Deleted Added
full compact
arp.c (28679) arp.c (28974)
1/*
2 * sys-bsd.c - System-dependent procedures for setting up
3 * PPP interfaces on bsd-4.4-ish systems (including 386BSD, NetBSD, etc.)
4 *
5 * Copyright (c) 1989 Carnegie Mellon University.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms are permitted
9 * provided that the above copyright notice and this paragraph are
10 * duplicated in all such forms and that any documentation,
11 * advertising materials, and other materials related to such
12 * distribution and use acknowledge that the software was developed
13 * by Carnegie Mellon University. The name of the
14 * University may not be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
18 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19 *
1/*
2 * sys-bsd.c - System-dependent procedures for setting up
3 * PPP interfaces on bsd-4.4-ish systems (including 386BSD, NetBSD, etc.)
4 *
5 * Copyright (c) 1989 Carnegie Mellon University.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms are permitted
9 * provided that the above copyright notice and this paragraph are
10 * duplicated in all such forms and that any documentation,
11 * advertising materials, and other materials related to such
12 * distribution and use acknowledge that the software was developed
13 * by Carnegie Mellon University. The name of the
14 * University may not be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
18 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19 *
20 * $Id: arp.c,v 1.12 1997/06/09 03:27:11 brian Exp $
20 * $Id: arp.c,v 1.13 1997/08/25 00:29:03 brian Exp $
21 *
22 */
23
24/*
25 * TODO:
26 */
27
28#include <sys/ioctl.h>

--- 60 unchanged lines hidden (view full) ---

89 int routes;
90
91 /*
92 * Get the hardware address of an interface on the same subnet as our local
93 * address.
94 */
95 memset(&arpmsg, 0, sizeof(arpmsg));
96 if (!get_ether_addr(unit, hisaddr, &arpmsg.hwa)) {
21 *
22 */
23
24/*
25 * TODO:
26 */
27
28#include <sys/ioctl.h>

--- 60 unchanged lines hidden (view full) ---

89 int routes;
90
91 /*
92 * Get the hardware address of an interface on the same subnet as our local
93 * address.
94 */
95 memset(&arpmsg, 0, sizeof(arpmsg));
96 if (!get_ether_addr(unit, hisaddr, &arpmsg.hwa)) {
97 LogPrintf(LogERROR, "Cannot determine ethernet address"
98 " for proxy ARP\n");
97 LogPrintf(LogERROR, "Cannot determine ethernet address for proxy ARP\n");
99 return 0;
100 }
101 if ((routes = socket(PF_ROUTE, SOCK_RAW, AF_INET)) < 0) {
102 LogPrintf(LogERROR, "sifproxyarp: opening routing socket: %s\n",
103 strerror(errno));
104 return 0;
105 }
106 arpmsg.hdr.rtm_type = RTM_ADD;

--- 74 unchanged lines hidden (view full) ---

181 }
182 arpreq.arp_ha.sa_len = sizeof(struct sockaddr);
183 arpreq.arp_ha.sa_family = AF_UNSPEC;
184 BCOPY(LLADDR(&dls.sdl), arpreq.arp_ha.sa_data, dls.sdl.sdl_alen);
185 SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
186 ((struct sockaddr_in *) & arpreq.arp_pa)->sin_addr.s_addr = hisaddr;
187 arpreq.arp_flags = ATF_PERM | ATF_PUBL;
188 if (ioctl(unit, SIOCSARP, (caddr_t) & arpreq) < 0) {
98 return 0;
99 }
100 if ((routes = socket(PF_ROUTE, SOCK_RAW, AF_INET)) < 0) {
101 LogPrintf(LogERROR, "sifproxyarp: opening routing socket: %s\n",
102 strerror(errno));
103 return 0;
104 }
105 arpmsg.hdr.rtm_type = RTM_ADD;

--- 74 unchanged lines hidden (view full) ---

180 }
181 arpreq.arp_ha.sa_len = sizeof(struct sockaddr);
182 arpreq.arp_ha.sa_family = AF_UNSPEC;
183 BCOPY(LLADDR(&dls.sdl), arpreq.arp_ha.sa_data, dls.sdl.sdl_alen);
184 SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
185 ((struct sockaddr_in *) & arpreq.arp_pa)->sin_addr.s_addr = hisaddr;
186 arpreq.arp_flags = ATF_PERM | ATF_PUBL;
187 if (ioctl(unit, SIOCSARP, (caddr_t) & arpreq) < 0) {
189 LogPrintf(LogERROR, "sifproxyarp: ioctl(SIOCSARP): \n");
188 LogPrintf(LogERROR, "sifproxyarp: ioctl(SIOCSARP): %s\n", strerror(errno));
190 return 0;
191 }
192 return 1;
193}
194
195/*
196 * cifproxyarp - Delete the proxy ARP entry for the peer.
197 */
198int
199cifproxyarp(int unit, u_long hisaddr)
200{
201 struct arpreq arpreq;
202
203 BZERO(&arpreq, sizeof(arpreq));
204 SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
205 ((struct sockaddr_in *) & arpreq.arp_pa)->sin_addr.s_addr = hisaddr;
206 if (ioctl(unit, SIOCDARP, (caddr_t) & arpreq) < 0) {
189 return 0;
190 }
191 return 1;
192}
193
194/*
195 * cifproxyarp - Delete the proxy ARP entry for the peer.
196 */
197int
198cifproxyarp(int unit, u_long hisaddr)
199{
200 struct arpreq arpreq;
201
202 BZERO(&arpreq, sizeof(arpreq));
203 SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
204 ((struct sockaddr_in *) & arpreq.arp_pa)->sin_addr.s_addr = hisaddr;
205 if (ioctl(unit, SIOCDARP, (caddr_t) & arpreq) < 0) {
207 LogPrintf(LogERROR, "cifproxyarp: ioctl(SIOCDARP): \n");
206 LogPrintf(LogERROR, "cifproxyarp: ioctl(SIOCDARP): %s\n", strerror(errno));
208 return 0;
209 }
210 return 1;
211}
212
213#endif /* RTM_VERSION */
214
215

--- 11 unchanged lines hidden (view full) ---

227 struct sockaddr_dl *dla;
228 struct ifreq ifreq;
229 struct ifconf ifc;
230 struct ifreq ifs[MAX_IFS];
231
232 ifc.ifc_len = sizeof(ifs);
233 ifc.ifc_req = ifs;
234 if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
207 return 0;
208 }
209 return 1;
210}
211
212#endif /* RTM_VERSION */
213
214

--- 11 unchanged lines hidden (view full) ---

226 struct sockaddr_dl *dla;
227 struct ifreq ifreq;
228 struct ifconf ifc;
229 struct ifreq ifs[MAX_IFS];
230
231 ifc.ifc_len = sizeof(ifs);
232 ifc.ifc_req = ifs;
233 if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
235 LogPrintf(LogERROR, "get_ether_addr: ioctl(SIOCGIFCONF): \n");
234 LogPrintf(LogERROR, "get_ether_addr: ioctl(SIOCGIFCONF): %s\n",
235 strerror(errno));
236 return 0;
237 }
238
239 /*
240 * Scan through looking for an interface with an Internet address on the
241 * same subnet as `ipaddr'.
242 */
243 ifend = (struct ifreq *) (ifc.ifc_buf + ifc.ifc_len);

--- 169 unchanged lines hidden ---
236 return 0;
237 }
238
239 /*
240 * Scan through looking for an interface with an Internet address on the
241 * same subnet as `ipaddr'.
242 */
243 ifend = (struct ifreq *) (ifc.ifc_buf + ifc.ifc_len);

--- 169 unchanged lines hidden ---