components/isc-dhcp/patches/002-dhcp_broadcast_offer_bug.patch
author Ben Chang <Benjamin.Chang@Oracle.COM>
Fri, 01 Apr 2016 16:02:33 -0700
changeset 5709 42ebc732084b
parent 5461 components/isc-dhcp/patches/004-dhcp_broadcast_offer_bug.patch@5241debe1312
permissions -rw-r--r--
PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1 20430438 upgrade isc-dhcp to better support IPv6 for WAN Boot
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
     1
This patch file was developed in-house to fix a Solaris specific bug. We are
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
     2
working with upstream, but it is unclear at this point whether or not they are
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
     3
going to accept it. This is a highly visible bug which many customers have
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
     4
encountered.
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
     5
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
     6
--- old/common/socket.c	Tue Mar  1 19:45:19 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
     7
+++ new/common/socket.c	Tue Mar  1 19:45:18 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
     8
@@ -39,6 +39,9 @@
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
     9
 #include <sys/ioctl.h>
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    10
 #include <sys/uio.h>
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    11
 #include <sys/uio.h>
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    12
+#if defined (sun)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    13
+#include <sys/ethernet.h>
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    14
+#endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    15
 
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    16
 #if defined(sun) && defined(USE_V4_PKTINFO)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    17
 #include <sys/sysmacros.h>
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    18
@@ -87,6 +90,33 @@
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    19
 static int once = 0;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    20
 #endif /* !defined(SO_BINDTODEVICE) && !defined(USE_FALLBACK) */
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    21
 
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    22
+#if defined (sun)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    23
+int
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    24
+setup_arp(struct interface_info *interface, struct in_addr ip_addr,
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    25
+	unsigned char *macaddr)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    26
+{
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    27
+        struct xarpreq ar;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    28
+        struct sockaddr_in *sin;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    29
+
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    30
+	(void) memset(&ar, 0, sizeof (ar));
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    31
+        sin = (struct sockaddr_in *)&ar.xarp_pa;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    32
+        sin->sin_family = AF_INET;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    33
+	sin->sin_addr.s_addr = ip_addr.s_addr;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    34
+
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    35
+	ar.xarp_ha.sdl_alen = ETHERADDRL;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    36
+	(void) memcpy(LLADDR(&ar.xarp_ha), macaddr, ar.xarp_ha.sdl_alen); 
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    37
+	ar.xarp_ha.sdl_family = AF_LINK; 
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    38
+	if (ioctl(interface->set_arp_socket, SIOCSXARP, (caddr_t)&ar) < 0) {
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    39
+		log_error("setup_arp: ioctl error for IP %s MAC %s",
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    40
+		   inet_ntoa(ip_addr), ether_ntoa((const struct ether_addr *)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    41
+		    macaddr));
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    42
+		return (1);
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    43
+	}
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    44
+        return (0);
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    45
+}
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    46
+#endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    47
+
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    48
+
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    49
 /* Reinitializes the specified interface after an address change.   This
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    50
    is not required for packet-filter APIs. */
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    51
 
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    52
@@ -337,6 +367,9 @@
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    53
 #else
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    54
 	info->wfdesc = info->rfdesc;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    55
 #endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    56
+#if defined(sun)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    57
+	info->set_arp_socket = socket(AF_INET, SOCK_DGRAM, 0);
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    58
+#endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    59
 	if (!quiet_interface_discovery)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    60
 		log_info ("Sending on   Socket/%s%s%s",
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    61
 		      info->name,
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    62
@@ -353,6 +386,9 @@
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    63
 	close (info -> wfdesc);
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    64
 #endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    65
 	info -> wfdesc = -1;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    66
+#if defined (sun)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    67
+	close (info -> set_arp_socket);
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    68
+#endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    69
 
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    70
 	if (!quiet_interface_discovery)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    71
 		log_info ("Disabling output on Socket/%s%s%s",
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    72
@@ -1088,7 +1124,11 @@
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    73
 int can_unicast_without_arp (ip)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    74
 	struct interface_info *ip;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    75
 {
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    76
+#if defined (sun)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    77
+	return 1;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    78
+#else
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    79
 	return 0;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    80
+#endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    81
 }
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    82
 
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
    83
 int can_receive_unicast_unconfigured (ip)
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    84
--- old/includes/dhcpd.h	Tue Mar  1 19:45:19 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    85
+++ new/includes/dhcpd.h	Tue Mar  1 19:45:18 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    86
@@ -1354,6 +1354,9 @@
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    87
 	int configured;			/* If set to 1, interface has at least
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    88
 					 * one valid IP address.
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    89
 					 */
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    90
+#if defined (sun)
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    91
+	int set_arp_socket;		/* IOCTL socket to set entry in cache */
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    92
+#endif
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    93
 	u_int32_t flags;		/* Control flags... */
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    94
 #define INTERFACE_REQUESTED 1
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    95
 #define INTERFACE_AUTOMATIC 2
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    96
@@ -2563,6 +2566,10 @@
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    97
 		       struct sockaddr_in6 *, struct hardware *);
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    98
 #endif
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
    99
 
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   100
+#if defined (sun)
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   101
+int setup_arp(struct interface_info *, struct in_addr, unsigned char *);
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   102
+#endif
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   103
+
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   104
 #ifdef USE_SOCKET_SEND
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   105
 void if_reinitialize_send (struct interface_info *);
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   106
 void if_register_send (struct interface_info *);
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   107
--- old/relay/dhcrelay.c	Tue Mar  1 19:45:19 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   108
+++ new/relay/dhcrelay.c	Tue Mar  1 19:45:18 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   109
@@ -653,6 +653,13 @@
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   110
 			to.sin_addr = packet->yiaddr;
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   111
 			to.sin_port = remote_port;
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   112
 
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   113
+#if defined (sun)
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   114
+			if (setup_arp(out, packet->yiaddr, packet->chaddr)) {
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   115
+				log_error("do_relay4 : Set arp entry failed");
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   116
+				return;
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   117
+			}
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   118
+#endif	
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   119
+
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   120
 			/* and hardware address is not broadcast */
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   121
 			htop = &hto;
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   122
 		} else {
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   123
--- old/server/bootp.c	Tue Mar  1 19:45:19 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   124
+++ new/server/bootp.c	Tue Mar  1 19:45:18 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   125
@@ -410,7 +410,12 @@
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   126
 		   can_unicast_without_arp (packet -> interface)) {
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   127
 		to.sin_addr = raw.yiaddr;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   128
 		to.sin_port = remote_port;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   129
-
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   130
+#if defined (__sun)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   131
+                if (setup_arp(packet->interface, raw.yiaddr, raw.chaddr)) {
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   132
+                        log_error("bootp : Set arp entry failed");
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   133
+                        goto out;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   134
+                }
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   135
+#endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   136
 	/* Otherwise, broadcast it on the local network. */
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   137
 	} else {
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   138
 		to.sin_addr = limited_broadcast;
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   139
--- old/server/dhcp.c	Tue Mar  1 19:45:19 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   140
+++ new/server/dhcp.c	Tue Mar  1 19:45:18 2016
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   141
@@ -30,6 +30,8 @@
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   142
 #include <errno.h>
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   143
 #include <limits.h>
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   144
 #include <sys/time.h>
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   145
+#include <sys/sockio.h>
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   146
+#include <sys/ioccom.h>
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   147
 
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   148
 static void maybe_return_agent_options(struct packet *packet,
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   149
 				       struct option_state *options);
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   150
@@ -3745,7 +3747,12 @@
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   151
 		   can_unicast_without_arp (state -> ip)) {
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   152
 		to.sin_addr = raw.yiaddr;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   153
 		to.sin_port = remote_port;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   154
-
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   155
+#if defined (sun)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   156
+		if (setup_arp(state->ip, raw.yiaddr, raw.chaddr)) {
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   157
+			log_error("dhcp_reply : Set arp entry failed");
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   158
+			goto err_out;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   159
+		}
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   160
+#endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   161
 	/* Otherwise, broadcast it on the local network. */
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   162
 	} else {
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   163
 		to.sin_addr = limited_broadcast;
5709
42ebc732084b PSARC 2016/201 Upgrade to ISC DHCP 4.3.3-P1
Ben Chang <Benjamin.Chang@Oracle.COM>
parents: 5461
diff changeset
   164
@@ -3767,7 +3774,9 @@
5461
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   165
 
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   166
 	/* Free all of the entries in the option_state structure
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   167
 	   now that we're done with them. */
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   168
-
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   169
+#if defined (sun)
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   170
+err_out:
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   171
+#endif
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   172
 	free_lease_state (state, MDL);
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   173
 	lease -> state = (struct lease_state *)0;
5241debe1312 17423148 ISC DHCP: DHCPOFFER is being offered as broadcast, not unicast
sritej.velaga@oracle.com <sritej.velaga@oracle.com>
parents:
diff changeset
   174
 }