diff options
author | Shawn Routhier <sar@isc.org> | 2009-10-28 04:12:30 +0000 |
---|---|---|
committer | Shawn Routhier <sar@isc.org> | 2009-10-28 04:12:30 +0000 |
commit | 98bf16077d22f28e288a18e184a9d1f97cb5f4f7 (patch) | |
tree | b38c8282016ec1526d59abe313ff8317da4c21b6 /common/socket.c | |
parent | 571c38b093626507112330e197dbbd318ba43a57 (diff) | |
download | isc-dhcp-98bf16077d22f28e288a18e184a9d1f97cb5f4f7.tar.gz |
Support for asynchronous ddns per ticket 19216 - convert to using isclib and
dnslib.
Diffstat (limited to 'common/socket.c')
-rw-r--r-- | common/socket.c | 33 |
1 files changed, 20 insertions, 13 deletions
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, |