#ifndef lint
static char copyright[] =
-"$Id: socket.c,v 1.41 1999/10/24 17:17:51 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
+"$Id: socket.c,v 1.42 1999/10/24 23:23:41 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
#ifdef USE_SOCKET_FALLBACK
-# define USE_SOCKET_SEND
+# if !defined (USE_SOCKET_SEND)
# define if_register_send if_register_fallback
# define send_packet send_fallback
# define if_reinitialize_send if_reinitialize_fallback
+# endif
#endif
static int once = 0;
/* Reinitializes the specified interface after an address change. This
is not required for packet-filter APIs. */
-#ifdef USE_SOCKET_SEND
+#if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_FALLBACK)
void if_reinitialize_send (info)
struct interface_info *info;
{
}
#endif
-#if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_RECEIVE)
+#if defined (USE_SOCKET_SEND) || \
+ defined (USE_SOCKET_RECEIVE) || \
+ defined (USE_SOCKET_FALLBACK)
/* Generic interface registration routine... */
int if_register_socket (info)
struct interface_info *info;
return sock;
}
-#endif /* USE_SOCKET_SEND || USE_SOCKET_RECEIVE */
+#endif /* USE_SOCKET_SEND || USE_SOCKET_RECEIVE || USE_SOCKET_FALLBACK */
-#ifdef USE_SOCKET_SEND
+#if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_FALLBACK)
void if_register_send (info)
struct interface_info *info;
{
(info -> shared_network ?
info -> shared_network -> name : ""));
}
-#endif /* USE_SOCKET_SEND */
+#endif /* USE_SOCKET_SEND || USE_SOCKET_FALLBACK */
#ifdef USE_SOCKET_RECEIVE
void if_register_receive (info)
}
#endif /* USE_SOCKET_RECEIVE */
-#ifdef USE_SOCKET_SEND
+#if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_FALLBACK)
ssize_t send_packet (interface, packet, raw, len, from, to, hto)
struct interface_info *interface;
struct packet *packet;
if (result < 0) {
log_error ("send_packet: %m");
if (errno == ENETUNREACH)
- log_error ("send_packet: please consult README file %s",
- "regarding broadcast address.");
+ log_error ("send_packet: please consult README file%s",
+ " regarding broadcast address.");
}
return result;
}
-#endif /* USE_SOCKET_SEND */
+#endif /* USE_SOCKET_SEND || USE_SOCKET_FALLBACK */
#ifdef USE_SOCKET_RECEIVE
ssize_t receive_packet (interface, buf, len, from, hfrom)
}
return ISC_R_SUCCESS;
}
-#endif /* USE_SOCKET_SEND */
+#endif /* USE_SOCKET_FALLBACK */
-#if defined (USE_SOCKET_SEND) && !defined (USE_SOCKET_FALLBACK)
+#if defined (USE_SOCKET_SEND)
int can_unicast_without_arp (ip)
struct interface_info *ip;
{
return 0;
}
-/* On many stacks, we should return 1 here. */
int can_receive_unicast_unconfigured (ip)
struct interface_info *ip;
{
+#if defined (SOCKET_CAN_RECEIVE_UNICAST_UNCONFIGURED)
+ return 1;
+#else
return 0;
+#endif
}
/* If we have SO_BINDTODEVICE, set up a fallback interface; otherwise,
void maybe_setup_fallback ()
{
-#if defined (SO_BINDTODEVICE)
+#if defined (USE_SOCKET_FALLBACK)
isc_result_t status;
struct interface_info *fbi;
fbi = setup_fallback ();
}
#endif
}
-#endif /* USE_SOCKET_SEND && !USE_SOCKET_FALLBACK */
+#endif /* USE_SOCKET_SEND */