-Verison 1.48
+Version 1.49
+------------
+IPv6 support.  Enable ipv6 addresses to be passed on mount (put the ipv6
+address after the "ip=" mount option, at least until mount.cifs is fixed to
+handle DNS host to ipv6 name translation).
+
+Version 1.48
 ------------
 Fix mtime bouncing around from local idea of last write times to remote time.
 Fix hang (in i_size_read) when simultaneous size update of same remote file
 
                existingCifsSes = cifs_find_tcp_session(&sin_server.sin_addr,
                        NULL /* no ipv6 addr */,
                        volume_info.username, &srvTcp);
-       else if(address_type == AF_INET6)
+       else if(address_type == AF_INET6) {
+               cFYI(1,("looking for ipv6 address"));
                existingCifsSes = cifs_find_tcp_session(NULL /* no ipv4 addr */,
                        &sin_server6.sin6_addr,
                        volume_info.username, &srvTcp);
-       else {
+       } else {
                kfree(volume_info.UNC);
                kfree(volume_info.password);
                kfree(volume_info.prepath);
                        sin_server.sin_port = htons(volume_info.port);
                else
                        sin_server.sin_port = 0;
-               rc = ipv4_connect(&sin_server,&csocket,
+               if (address_type == AF_INET6) {
+                       cFYI(1,("attempting ipv6 connect"));
+                       /* BB should we allow ipv6 on port 139? */
+                       /* other OS never observed in Wild doing 139 with v6 */
+                       rc = ipv6_connect(&sin_server6,&csocket);
+               } else 
+                       rc = ipv4_connect(&sin_server,&csocket,
                                  volume_info.source_rfc1001_name,
                                  volume_info.target_rfc1001_name);
                if (rc < 0) {
                        cERROR(1,
-                              ("Error connecting to IPv4 socket. Aborting operation"));
+                              ("Error connecting to IPv4 socket. Aborting operation"));                               
                        if(csocket != NULL)
                                sock_release(csocket);
                        kfree(volume_info.UNC);
 
 #include <linux/fs.h>
 #include <asm/div64.h>
 #include <asm/byteorder.h>
+#ifdef CONFIG_CIFS_EXPERIMENTAL
+#include <linux/inet.h>
+#endif
 #include "cifsfs.h"
 #include "cifspdu.h"
 #include "cifsglob.h"
 /* Convert string containing dotted ip address to binary form */
 /* returns 0 if invalid address */
 
-/* BB add address family, change rc to status flag and return union or for ipv6 */
-/*  will need parent to call something like inet_pton to convert ipv6 address  BB */
 int
 cifs_inet_pton(int address_family, char *cp,void *dst)
 {
+#ifdef CONFIG_CIFS_EXPERIMENTAL
+       int ret = 0;
+
+       /* calculate length by finding first slash or NULL */
+       /* BB Should we convert '/' slash to '\' here since it seems already done
+          before this */
+       if( address_family == AF_INET ){
+               ret = in4_pton(cp, -1 /* len */, dst , '\\', NULL);     
+       } else if( address_family == AF_INET6 ){
+               ret = in6_pton(cp, -1 /* len */, dst , '\\', NULL);
+       }
+#ifdef CONFIG_CIFS_DEBUG2
+       cFYI(1,("address conversion returned %d for %s", ret, cp));
+#endif
+       if (ret > 0)
+               ret = 1;
+       return ret;
+#else
        int value;
        int digit;
        int i;
 
        *((__be32 *)dst) = *((__be32 *) bytes) | htonl(value);
        return 1; /* success */
+#endif /* EXPERIMENTAL */      
 }
 
 /*****************************************************************************