summaryrefslogtreecommitdiff
path: root/net-mgmt/wide-dhcp/files/patch-ac
blob: bb16bd0cc59a1d75a2193c12b4055ad48ebefcd0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
--- client/dhcpc_subr.c.org	Sat Jul  6 11:00:50 1996
+++ client/dhcpc_subr.c	Sat Jul  6 11:01:28 1996
@@ -273,7 +273,11 @@
   tmp = 0;
   bcopy(&tmp, sarp->arp_spa, sarp->arp_pln);
   bcopy(&target->s_addr, sarp->arp_tpa, sarp->arp_pln);
+#ifdef __FreeBSD__
+  sether->ether_type = ETHERTYPE_ARP;
+#else
   sether->ether_type = htons(ETHERTYPE_ARP);
+#endif
 
   if (ether_write(ifp->fd, sbuf, ETHERHL + sizeof(struct ether_arp)) < 0) {
     return(0);                               /* it is harmless to return 0 */
@@ -341,7 +345,11 @@
   bcopy(&ipaddr->s_addr, sarp->arp_spa, sarp->arp_pln);
   bcopy(&ipaddr->s_addr, sarp->arp_tpa, sarp->arp_pln);
 
+#ifdef __FreeBSD__
+  sether->ether_type = ETHERTYPE_ARP;
+#else
   sether->ether_type = htons(ETHERTYPE_ARP);
+#endif
 
   if (ether_write(ifp->fd, sbuf, ETHERHL + sizeof(struct ether_arp)) < 0) {
     return(-1);
@@ -1387,7 +1395,7 @@
   /* get haddr of interface */
   intface.haddr.htype = ETHER;
   intface.haddr.hlen = 6;
-#if defined(sony_news) || defined(__FreeBSD__)
+#if defined(sony_news) || !defined(__FreeBSD__)
   if (ioctl(dhcpif.fd, SIOCGIFADDR, &ifr) < 0) {
     syslog(LOG_WARNING, "ioctl(SIOCGIFADDR) error in initialize(): %m");
     return(-1);
@@ -1535,8 +1543,8 @@
     ((struct sockaddr_in *)&ridreq.ifr_addr)->sin_addr.s_addr;
 
   if (current_addr.s_addr == addr->s_addr &&
-      current_mask.s_addr == mask->s_addr &&
-      current_brdcst.s_addr == brdcst->s_addr) {
+      (mask && current_mask.s_addr == mask->s_addr) &&
+      (brdcst && current_brdcst.s_addr == brdcst->s_addr)) {
     close(sockfd);
     return(1);
   }
@@ -1660,7 +1668,7 @@
 /*
  * set routing table
  */
-#ifndef BSDOS
+#if !defined(BSDOS) && (__FreeBSD__ != 2)
 void
 set_route(param)
   struct dhcp_param *param;
@@ -1730,6 +1738,10 @@
   register char *cp = m_rtmsg.m_space;
   register int l;
 
+  if (!ISSET(param->got_option, ROUTER) ||
+      param->router == NULL || param->router->addr == NULL)
+    return;
+
   bzero(&so_dst, sizeof(struct sockaddr));
   bzero(&so_mask, sizeof(struct sockaddr));
   bzero(&so_gate, sizeof(struct sockaddr));
@@ -1897,7 +1909,11 @@
     lsether->ether_shost[i] = intface.haddr.haddr[i];
 #endif
   }
+#ifdef __FreeBSD__
+  lsether->ether_type = ETHERTYPE_IP;
+#else
   lsether->ether_type = htons(ETHERTYPE_IP);
+#endif
 
   return;
 }
@@ -2199,7 +2215,11 @@
     snd.ether->ether_shost[i] = intface.haddr.haddr[i];
 #endif
   }
+#ifdef __FreeBSD__
+  snd.ether->ether_type = ETHERTYPE_IP;
+#else
   snd.ether->ether_type = htons(ETHERTYPE_IP);
+#endif
 
   return;
 }
@@ -2372,7 +2392,11 @@
     snd.ether->ether_shost[i] = intface.haddr.haddr[i];
 #endif
   }
+#ifdef __FreeBSD__
+  snd.ether->ether_type = ETHERTYPE_IP;
+#else
   snd.ether->ether_type = htons(ETHERTYPE_IP);
+#endif
 
   return(0);
 }
@@ -2391,7 +2415,7 @@
   struct msghdr msg;
   struct iovec bufvec[1];
   int bufsize = DFLTDHCPLEN;
-#ifdef BSDOS
+#if defined(BSDOS) || (__FreeBSD__ == 2)
   int on;
 #endif
 
@@ -2417,7 +2441,7 @@
       return(-1);
     }
 
-#ifdef BSDOS
+#if defined(BSDOS) || (__FreeBSD__ == 2)
     on = 1;
     if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)) < 0) {
       close(sockfd);