summaryrefslogtreecommitdiff
path: root/common/socket.c
diff options
context:
space:
mode:
authorShawn Routhier <sar@isc.org>2009-10-28 04:12:30 +0000
committerShawn Routhier <sar@isc.org>2009-10-28 04:12:30 +0000
commit98bf16077d22f28e288a18e184a9d1f97cb5f4f7 (patch)
treeb38c8282016ec1526d59abe313ff8317da4c21b6 /common/socket.c
parent571c38b093626507112330e197dbbd318ba43a57 (diff)
downloadisc-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.c33
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,