| Skip Navigation Links | |
| Exit Print View | |
|
Managing SMB File Sharing and Windows Interoperability in Oracle Solaris 11.1 Oracle Solaris 11.1 Information Library |
1. Sharing Files Between Windows and Oracle Solaris Systems
2. Setting Up Identity Mapping Between Windows and Oracle Solaris Systems
3. Setting Up a Oracle Solaris SMB Server to Manage and Share Files
The following example DTrace script shows how to trace all SMB requests:
#!/usr/sbin/dtrace -s
#pragma D option quiet
dtrace:::BEGIN
{
printf(
"%39s/%-17s %-31s %8s %-10s %5s %9s %5s %6s %4s\n",
"CLIENT",
"SESSION",
"REQUEST",
"TIME(us)",
"STATUS",
"MID",
"PID",
"TID",
"FLAGS2",
"FLAGS");
}
dtrace:::END
{
printf(
"%39s/%-17s %-31s %8s %-10s %5s %9s %5s %6s %4s\n",
"CLIENT",
"SESSION",
"REQUEST",
"TIME(us)",
"STATUS",
"MID",
"PID",
"TID",
"FLAGS2",
"FLAGS");
}
smb:::op-Read-start,
smb:::op-ReadRaw-start,
smb:::op-ReadX-start,
smb:::op-LockAndRead-start,
smb:::op-Write-start,
smb:::op-WriteAndClose-start,
smb:::op-WriteAndUnlock-start,
smb:::op-WriteRaw-start,
smb:::op-WriteX-start,
smb:::op-CheckDirectory-start,
smb:::op-Close-start,
smb:::op-CloseAndTreeDisconnect-start,
smb:::op-ClosePrintFile-start,
smb:::op-Create-start,
smb:::op-CreateDirectory-start,
smb:::op-CreateNew-start,
smb:::op-CreateTemporary-start,
smb:::op-Delete-start,
smb:::op-DeleteDirectory-start,
smb:::op-Echo-start,
smb:::op-Find-start,
smb:::op-FindClose-start,
smb:::op-FindClose2-start,
smb:::op-FindUnique-start,
smb:::op-Flush-start,
smb:::op-GetPrintQueue-start,
smb:::op-Ioctl-start,
smb:::op-LockByteRange-start,
smb:::op-LockingX-start,
smb:::op-LogoffX-start,
smb:::op-Negotiate-start,
smb:::op-NtCancel-start,
smb:::op-NtCreateX-start,
smb:::op-NtTransact-start,
smb:::op-NtTransactSecondary-start,
smb:::op-NtRename-start,
smb:::op-Open-start,
smb:::op-OpenPrintFile-start,
smb:::op-WritePrintFile-start,
smb:::op-OpenX-start,
smb:::op-ProcessExit-start,
smb:::op-QueryInformation-start,
smb:::op-QueryInformation2-start,
smb:::op-QueryInformationDisk-start,
smb:::op-Rename-start,
smb:::op-Search-start,
smb:::op-Seek-start,
smb:::op-SessionSetupX-start,
smb:::op-SetInformation-start,
smb:::op-SetInformation2-start,
smb:::op-Transaction-start,
smb:::op-Transaction2-start,
smb:::op-Transaction2Secondary-start,
smb:::op-TransactionSecondary-start,
smb:::op-TreeConnect-start,
smb:::op-TreeConnectX-start,
smb:::op-TreeDisconnect-start,
smb:::op-UnlockByteRange-start
{
self->thread = curthread;
self->start = timestamp;
}
smb:::op-Read-done,
smb:::op-ReadRaw-done,
smb:::op-ReadX-done,
smb:::op-LockAndRead-done,
smb:::op-Write-done,
smb:::op-WriteAndClose-done,
smb:::op-WriteAndUnlock-done,
smb:::op-WriteRaw-done,
smb:::op-WriteX-done,
smb:::op-CheckDirectory-done,
smb:::op-Close-done,
smb:::op-CloseAndTreeDisconnect-done,
smb:::op-ClosePrintFile-done,
smb:::op-Create-done,
smb:::op-CreateDirectory-done,
smb:::op-CreateNew-done,
smb:::op-CreateTemporary-done,
smb:::op-Delete-done,
smb:::op-DeleteDirectory-done,
smb:::op-Echo-done,
smb:::op-Find-done,
smb:::op-FindClose-done,
smb:::op-FindClose2-done,
smb:::op-FindUnique-done,
smb:::op-Flush-done,
smb:::op-GetPrintQueue-done,
smb:::op-Ioctl-done,
smb:::op-LockByteRange-done,
smb:::op-LockingX-done,
smb:::op-LogoffX-done,
smb:::op-Negotiate-done,
smb:::op-NtCancel-done,
smb:::op-NtCreateX-done,
smb:::op-NtTransact-done,
smb:::op-NtTransactSecondary-done,
smb:::op-NtRename-done,
smb:::op-Open-done,
smb:::op-OpenPrintFile-done,
smb:::op-WritePrintFile-done,
smb:::op-OpenX-done,
smb:::op-ProcessExit-done,
smb:::op-QueryInformation-done,
smb:::op-QueryInformation2-done,
smb:::op-QueryInformationDisk-done,
smb:::op-Rename-done,
smb:::op-Search-done,
smb:::op-Seek-done,
smb:::op-SessionSetupX-done,
smb:::op-SetInformation-done,
smb:::op-Transaction-done,
smb:::op-SetInformation2-done,
smb:::op-Transaction2-done,
smb:::op-Transaction2Secondary-done,
smb:::op-TransactionSecondary-done,
smb:::op-TreeConnect-done,
smb:::op-TreeConnectX-done,
smb:::op-TreeDisconnect-done,
smb:::op-UnlockByteRange-done
/self->thread == curthread/
{
printf("%39s/%-17d %-31s %8d 0x%08x %5d %9d %5d 0x%04x 0x%02x\n",
args[0]->ci_remote,
args[1]->soi_sid,
probename,
(timestamp - self->start) / 1000,
args[1]->soi_status,
args[1]->soi_mid,
args[1]->soi_pid,
args[1]->soi_tid,
args[1]->soi_flags2,
args[1]->soi_flags);
}
The following example DTrace script traces reads and writes, which shows how the third argument is passed to read and write probes:
#!/usr/sbin/dtrace -s
#pragma D option quiet
dtrace:::BEGIN
{
printf(
"%39s/%-17s %-31s %8s %-10s %-17s %-10s %s\n",
"CLIENT",
"SESSION",
"REQUEST",
"TIME(us)",
"STATUS",
"OFFSET",
"COUNT",
"FILE");
}
dtrace:::END
{
printf(
"%39s/%-17s %-31s %8s %-10s %-17s %-10s %s\n",
"CLIENT",
"SESSION",
"REQUEST",
"TIME(us)",
"STATUS",
"OFFSET",
"COUNT",
"FILE");
}
smb:::op-Read-start,
smb:::op-ReadRaw-start,
smb:::op-ReadX-start,
smb:::op-LockAndRead-start
{
self->thread = curthread;
self->start = timestamp;
}
/*
* The following action is executed if the field 'soi_curpath' is undefined (or
* NULL).
*/
smb:::op-Read-done,
smb:::op-ReadRaw-done,
smb:::op-ReadX-done,
smb:::op-LockAndRead-done
/self->thread == curthread && args[1]->soi_curpath == NULL/
{
printf("%39s/%-17d %-31s %8d 0x%08x 0x%016x 0x%08x %s\n",
args[0]->ci_remote,
args[1]->soi_sid,
probename,
(timestamp - self->start) / 1000,
args[1]->soi_status,
args[2]->soa_offset,
args[2]->soa_count,
"NULL");
}
/*
* The following action is executed if the field 'soi_curpath' is defined (or
* points to an actual file path).
*/
smb:::op-Read-done,
smb:::op-ReadRaw-done,
smb:::op-ReadX-done,
smb:::op-LockAndRead-done
/self->thread == curthread && args[1]->soi_curpath != NULL/
{
printf("%39s/%-17d %-31s %8d 0x%08x 0x%016x 0x%08x %s\n",
args[0]->ci_remote,
args[1]->soi_sid,
probename,
(timestamp - self->start) / 1000,
args[1]->soi_status,
args[2]->soa_offset,
args[2]->soa_count,
args[1]->soi_curpath);
}
smb:::op-Write-start,
smb:::op-WriteAndClose-start,
smb:::op-WriteAndUnlock-start,
smb:::op-WriteRaw-start,
smb:::op-WriteX-start
{
self->thread = curthread;
self->start = timestamp;
}
/*
* The following action is executed if the field 'soi_curpath' is undefined (or
* NULL).
*/
smb:::op-Write-done,
smb:::op-WriteAndClose-done,
smb:::op-WriteAndUnlock-done,
smb:::op-WriteRaw-done,
smb:::op-WriteX-done
/self->thread == curthread && args[1]->soi_curpath == NULL/
{
printf("%39s/%-17d %-31s %8d 0x%08x 0x%016x 0x%08x %s\n",
args[0]->ci_remote,
args[1]->soi_sid,
probename,
(timestamp - self->start) / 1000,
args[1]->soi_status,
args[2]->soa_offset,
args[2]->soa_count,
"NULL");
}
/*
* The following action is executed if the field 'soi_curpath' is defined (or
* points to an actual file path).
*/
smb:::op-Write-done,
smb:::op-WriteAndClose-done,
smb:::op-WriteAndUnlock-done,
smb:::op-WriteRaw-done,
smb:::op-WriteX-done
/self->thread == curthread && args[1]->soi_curpath != NULL/
{
printf("%39s/%-17d %-31s %8d 0x%08x 0x%016x 0x%08x %s\n",
args[0]->ci_remote,
args[1]->soi_sid,
probename,
(timestamp - self->start) / 1000,
args[1]->soi_status,
args[2]->soa_offset,
args[2]->soa_count,
args[1]->soi_curpath);
}