svn commit: samba r25384 - in branches/SAMBA_4_0: . source/lib/socket

jelmer at samba.org jelmer at samba.org
Thu Sep 27 21:17:45 GMT 2007


Author: jelmer
Date: 2007-09-27 21:17:44 +0000 (Thu, 27 Sep 2007)
New Revision: 25384

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25384

Log:
Support DGRAM IPv6 sockets.
Modified:
   branches/SAMBA_4_0/
   branches/SAMBA_4_0/source/lib/socket/socket_ip.c


Changeset:

Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...

Modified: branches/SAMBA_4_0/source/lib/socket/socket_ip.c
===================================================================
--- branches/SAMBA_4_0/source/lib/socket/socket_ip.c	2007-09-27 20:45:42 UTC (rev 25383)
+++ branches/SAMBA_4_0/source/lib/socket/socket_ip.c	2007-09-27 21:17:44 UTC (rev 25384)
@@ -531,6 +531,7 @@
 	.fn_get_peer_name	= ipv4_get_peer_name,
 	.fn_get_peer_addr	= ipv4_get_peer_addr,
 	.fn_get_my_addr		= ipv4_get_my_addr,
+
 	.fn_get_fd		= ip_get_fd
 };
 
@@ -558,9 +559,22 @@
 	return *((struct in6_addr *)he->h_addr);
 }
 
-static NTSTATUS ipv6_tcp_init(struct socket_context *sock)
+static NTSTATUS ipv6_init(struct socket_context *sock)
 {
-	sock->fd = socket(PF_INET6, SOCK_STREAM, 0);
+	int type;
+
+	switch (sock->type) {
+	case SOCKET_TYPE_STREAM:
+		type = SOCK_STREAM;
+		break;
+	case SOCKET_TYPE_DGRAM:
+		type = SOCK_DGRAM;
+		break;
+	default:
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	sock->fd = socket(PF_INET6, type, 0);
 	if (sock->fd == -1) {
 		return map_nt_error_from_unix(errno);
 	}
@@ -624,7 +638,7 @@
 	return ip_connect_complete(sock, flags);
 }
 
-static NTSTATUS ipv6_tcp_listen(struct socket_context *sock,
+static NTSTATUS ipv6_listen(struct socket_context *sock,
 				const struct socket_address *my_address,
 				int queue_size, uint32_t flags)
 {
@@ -680,7 +694,6 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-
 	new_fd = accept(sock->fd, (struct sockaddr *)&cli_addr, &cli_addr_len);
 	if (new_fd == -1) {
 		return map_nt_error_from_unix(errno);
@@ -812,7 +825,7 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS ipv6_tcp_set_option(struct socket_context *sock, const char *option, const char *val)
+static NTSTATUS ipv6_set_option(struct socket_context *sock, const char *option, const char *val)
 {
 	set_socket_options(sock->fd, option);
 	return NT_STATUS_OK;
@@ -935,19 +948,19 @@
 
 static const struct socket_ops ipv6_tcp_ops = {
 	.name			= "ipv6",
-	.fn_init		= ipv6_tcp_init,
+	.fn_init		= ipv6_init,
 	.fn_connect		= ipv6_tcp_connect,
 	.fn_connect_complete	= ip_connect_complete,
-	.fn_listen		= ipv6_tcp_listen,
+	.fn_listen		= ipv6_listen,
 	.fn_accept		= ipv6_tcp_accept,
 	.fn_recv		= ip_recv,
 	.fn_recvfrom 		= ipv6_recvfrom,
+	.fn_send		= ip_send,
 	.fn_sendto		= ipv6_sendto,
-	.fn_send		= ip_send,
+	.fn_pending		= ip_pending,
 	.fn_close		= ip_close,
-	.fn_pending		= ip_pending,
 
-	.fn_set_option		= ipv6_tcp_set_option,
+	.fn_set_option		= ipv6_set_option,
 
 	.fn_get_peer_name	= ipv6_tcp_get_peer_name,
 	.fn_get_peer_addr	= ipv6_tcp_get_peer_addr,



More information about the samba-cvs mailing list