summaryrefslogtreecommitdiff
path: root/common/socket.c
diff options
context:
space:
mode:
authorDavid Hankins <dhankins@isc.org>2007-05-19 18:47:15 +0000
committerDavid Hankins <dhankins@isc.org>2007-05-19 18:47:15 +0000
commitfe5b0fdd70907a228c996a0d9a2857bc90a67e6f (patch)
tree98fca773de13ea25b36a8354547aff15b4070b52 /common/socket.c
parent786b09305811b4f210e695961aaf3785a5d0d72d (diff)
downloadisc-dhcp-fe5b0fdd70907a228c996a0d9a2857bc90a67e6f.tar.gz
- Replaced ./configure shellscripting with GNU Autoconf. [ISC-Bugs #16405b]
- RELNOTES/README++ - s/wether/whether/ in dhcp-options.5 manpage edits.
Diffstat (limited to 'common/socket.c')
-rw-r--r--common/socket.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/common/socket.c b/common/socket.c
index 16acd17b..3a5e5fbc 100644
--- a/common/socket.c
+++ b/common/socket.c
@@ -3,7 +3,7 @@
BSD socket interface code... */
/*
- * Copyright (c) 2004-2006 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 2004-2007 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1995-2003 by Internet Software Consortium
*
* Permission to use, copy, modify, and distribute this software for any
@@ -42,11 +42,13 @@
#ifndef lint
static char copyright[] =
-"$Id: socket.c,v 1.64 2007/05/18 17:21:46 dhankins Exp $ "
-"Copyright (c) 2004-2006 Internet Systems Consortium.\n";
+"$Id: socket.c,v 1.65 2007/05/19 18:47:14 dhankins Exp $ "
+"Copyright (c) 2004-2007 Internet Systems Consortium.\n";
#endif /* not lint */
#include "dhcpd.h"
+#include <errno.h>
+#include <sys/ioctl.h>
#include <sys/uio.h>
#include <sys/uio.h>
@@ -103,7 +105,7 @@ if_register_socket(struct interface_info *info, int family, int do_multicast) {
/* INSIST((family == AF_INET) || (family == AF_INET6)); */
-#if !defined (HAVE_SO_BINDTODEVICE) && !defined (USE_FALLBACK)
+#if !defined(SO_BINDTODEVICE) && !defined(USE_FALLBACK)
/* Make sure only one interface is registered. */
if (once) {
log_fatal ("The standard socket API can only support %s",
@@ -126,6 +128,7 @@ if_register_socket(struct interface_info *info, int family, int do_multicast) {
sizeof(addr->sin_addr));
name_len = sizeof(*addr);
domain = PF_INET;
+#ifdef DHCPv6
} else {
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&name;
addr->sin6_family = AF_INET6;
@@ -135,6 +138,7 @@ if_register_socket(struct interface_info *info, int family, int do_multicast) {
sizeof(addr->sin6_addr));
name_len = sizeof(*addr);
domain = PF_INET6;
+#endif /* DHCPv6 */
}
/* Make a socket... */
@@ -170,7 +174,7 @@ if_register_socket(struct interface_info *info, int family, int do_multicast) {
log_fatal("includes a bootp server.");
}
-#if defined (HAVE_SO_BINDTODEVICE)
+#if defined(SO_BINDTODEVICE)
/* Bind this socket to this interface. */
if (info->ifp &&
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE,
@@ -193,6 +197,7 @@ if_register_socket(struct interface_info *info, int family, int do_multicast) {
log_fatal("Can't set IP_BROADCAST_IF on dhcp socket: %m");
#endif
+#ifdef DHCPv6
/*
* If we turn on IPV6_PKTINFO, we will be able to receive
* additional information, such as the destination IP address.
@@ -243,6 +248,7 @@ if_register_socket(struct interface_info *info, int family, int do_multicast) {
log_fatal("setsockopt: IPV6_JOIN_GROUP: %m");
}
}
+#endif /* DHCPv6 */
get_hw_addr(info->name, &info->hw_address);
@@ -322,6 +328,7 @@ void if_deregister_receive (info)
#endif /* USE_SOCKET_RECEIVE */
+#ifdef DHCPv6
void
if_register6(struct interface_info *info, int do_multicast) {
info->rfdesc = if_register_socket(info, AF_INET6, do_multicast);
@@ -362,6 +369,7 @@ if_deregister6(struct interface_info *info) {
}
}
}
+#endif /* DHCPv6 */
#if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_FALLBACK)
ssize_t send_packet (interface, packet, raw, len, from, to, hto)
@@ -398,6 +406,7 @@ ssize_t send_packet (interface, packet, raw, len, from, to, hto)
#endif /* USE_SOCKET_SEND || USE_SOCKET_FALLBACK */
+#ifdef DHCPv6
/*
* For both send_packet6() and receive_packet6() we need to use the
* sendmsg()/recvmsg() functions rather than the simplier send()/recv()
@@ -473,6 +482,7 @@ ssize_t send_packet6(struct interface_info *interface,
}
return result;
}
+#endif /* DHCPv6 */
#ifdef USE_SOCKET_RECEIVE
ssize_t receive_packet (interface, buf, len, from, hfrom)
@@ -509,6 +519,7 @@ ssize_t receive_packet (interface, buf, len, from, hfrom)
#endif /* USE_SOCKET_RECEIVE */
+#ifdef DHCPv6
ssize_t
receive_packet6(struct interface_info *interface,
unsigned char *buf, size_t len,
@@ -583,6 +594,7 @@ receive_packet6(struct interface_info *interface,
return result;
}
+#endif /* DHCPv6 */
#if defined (USE_SOCKET_FALLBACK)
/* This just reads in a packet and silently discards it. */