  This is the client VFS module for the Common Internet File System
  (CIFS) protocol which is the successor to the Server Message Block 
  (SMB) protocol, the native file sharing mechanism for most early
  PC operating systems.  CIFS is fully supported by current network
  file servers such as Windows 2000, Windows 2003 (including  
  Windows XP) as well by Samba (which provides excellent CIFS
  server support for Linux and many other operating systems), so
  this network filesystem client can mount to a wide variety of
  servers.  The smbfs module should be used instead of this cifs module
  for mounting to older SMB servers such as OS/2.  The smbfs and cifs
  modules can coexist and do not conflict.  The CIFS VFS filesystem
  module is designed to work well with servers that implement the
  newer versions (dialects) of the SMB/CIFS protocol such as Samba, 
  the program written by Andrew Tridgell that turns any Unix host 
  into a SMB/CIFS file server.

  The intent of this module is to provide the most advanced network
  file system function for CIFS compliant servers, including better
  POSIX compliance, secure per-user session establishment, high
  performance safe distributed caching (oplock), optional packet
  signing, large files, Unicode support and other internationalization
  improvements. Since both Samba server and this filesystem client support
  the CIFS Unix extensions, the combination can provide a reasonable 
  alternative to NFSv4 for fileserving in some Linux to Linux environments,
  not just in Linux to Windows environments.

  This filesystem has an optional mount utility (mount.cifs) that can
  be obtained from the project page and installed in the path in the same
  directory with the other mount helpers (such as mount.smbfs). 
  Mounting using the cifs filesystem without installing the mount helper
  requires specifying the server's ip address.

  For Linux 2.4:
    mount //anything/here /mnt_target -o
            user=username,pass=password,unc=//ip_address_of_server/sharename

  For Linux 2.5: 
    mount //ip_address_of_server/sharename /mnt_target -o user=username, pass=password


  For more information on the module see the project page at

      http://us1.samba.org/samba/Linux_CIFS_client.html 

  For more information on CIFS see:

      http://www.snia.org/tech_activities/CIFS

  or the Samba site:
     
      http://www.samba.org
