From 98bf16077d22f28e288a18e184a9d1f97cb5f4f7 Mon Sep 17 00:00:00 2001 From: Shawn Routhier Date: Wed, 28 Oct 2009 04:12:30 +0000 Subject: Support for asynchronous ddns per ticket 19216 - convert to using isclib and dnslib. --- common/socket.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'common/socket.c') diff --git a/common/socket.c b/common/socket.c index f1185f62..24cd724a 100644 --- a/common/socket.c +++ b/common/socket.c @@ -116,6 +116,10 @@ if_register_socket(struct interface_info *info, int family, int sock; int flag; int domain; +#ifdef DHCPv6 + struct sockaddr_in6 *addr6; +#endif + struct sockaddr_in *addr; /* INSIST((family == AF_INET) || (family == AF_INET6)); */ @@ -133,28 +137,30 @@ if_register_socket(struct interface_info *info, int family, * address family. */ memset(&name, 0, sizeof(name)); + switch (family) { #ifdef DHCPv6 - if (family == AF_INET6) { - struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&name; - addr->sin6_family = AF_INET6; - addr->sin6_port = local_port; + case AF_INET6: + addr6 = (struct sockaddr_in6 *)&name; + addr6->sin6_family = AF_INET6; + addr6->sin6_port = local_port; /* XXX: What will happen to multicasts if this is nonzero? */ - memcpy(&addr->sin6_addr, + memcpy(&addr6->sin6_addr, &local_address6, - sizeof(addr->sin6_addr)); + sizeof(addr6->sin6_addr)); #ifdef HAVE_SA_LEN - addr->sin6_len = sizeof(*addr); + addr6->sin6_len = sizeof(*addr6); #endif - name_len = sizeof(*addr); + name_len = sizeof(*addr6); domain = PF_INET6; if ((info->flags & INTERFACE_STREAMS) == INTERFACE_UPSTREAM) { *do_multicast = 0; } - } else { -#else - { + break; #endif /* DHCPv6 */ - struct sockaddr_in *addr = (struct sockaddr_in *)&name; + + case AF_INET: + default: + addr = (struct sockaddr_in *)&name; addr->sin_family = AF_INET; addr->sin_port = local_port; memcpy(&addr->sin_addr, @@ -165,6 +171,7 @@ if_register_socket(struct interface_info *info, int family, #endif name_len = sizeof(*addr); domain = PF_INET; + break; } /* Make a socket... */ @@ -770,7 +777,7 @@ isc_result_t fallback_discard (object) struct interface_info *interface; if (object -> type != dhcp_type_interface) - return ISC_R_INVALIDARG; + return DHCP_R_INVALIDARG; interface = (struct interface_info *)object; status = recvfrom (interface -> wfdesc, buf, sizeof buf, 0, -- cgit v1.2.1