Skip to end of metadata
Go to start of metadata

What is SMB/CIFS?

SMB and CIFS are generally used to refer to the protocols used by most Windows clients for "file sharing".  It's what goes over the network when a Windows user asks to "Map a network drive" or otherwise connect to a server that supports Windows style file sharing.  The SMB/CIFS protocols are now also used by many clients and servers other than Windows.

More specifically, CIFS also refers to the "Common Internet File System", CIFS protocol specification.

Similarly SMB refers to the "Server Message Block" SMB protocol specification.

In Windows file sharing, the server offers a collection of "shares", and clients "map a share" or "connect to a share".  On the client side, mapped shares (also known as connected trees) can be seen and manipulated with the "net use" command.

CIFS Client

The illumos CIFS client is a pair of components: (1) a file system module, smbfs(7FS) that allows mounting a Windows-compatible share on a unix mount point, and (2) a "connection manager" (smbiod(1M)) that handles connection setup (etc.) for smbfs(7FS), smbutil(1), and other consumers.  Note that the connection manager is an SMF(5) service, which must be enabled before any CIFS client features can be used.  Enable the service using:

  svcadm enable -r network/smb/client

The CIFS client code was derived from the Apple smbfs implementation that shipped with Tiger, which in turn was derived from the FreeBSD smbfs implementation.

CIFS Server

The illumos CIFS server includes a service demon, smbd(1M), that runs as the SMF(5) service, and a kernel module (smbsrv) that handles the low-level SMB file access protocol messages.  There are also several Windows-compatible Remote Procedure Call (RPC) services, currently implemented as libraries that run inside the smbd process.  SMB protocol messages that refer to "named pipe" endpoints are conveyed from the kernel-mode smbsrv up to the user space smbd, where they are then handled by the RPC libraries.

The illumos CIFS server was derived from an implementation that Sun bought from Procom in 2005.  Contrary to what many people assume, the implementation is not derived from Samba.