Deleted Added
full compact
route.c (31827) route.c (31962)
1/*
2 * PPP Routing related Module
3 *
4 * Written by Toshiharu OHNO (tony-o@iij.ad.jp)
5 *
6 * Copyright (C) 1994, Internet Initiative Japan, Inc. All rights reserverd.
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 the Internet Initiative Japan, Inc. The name of the
14 * IIJ 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 * PPP Routing related Module
3 *
4 * Written by Toshiharu OHNO (tony-o@iij.ad.jp)
5 *
6 * Copyright (C) 1994, Internet Initiative Japan, Inc. All rights reserverd.
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 the Internet Initiative Japan, Inc. The name of the
14 * IIJ 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: route.c,v 1.33 1997/12/17 00:19:25 brian Exp $
20 * $Id: route.c,v 1.34 1997/12/17 21:22:05 brian Exp $
21 *
22 */
23
24#include <sys/param.h>
25#include <sys/time.h>
26#include <sys/socket.h>
27#include <net/if_types.h>
28#include <net/route.h>

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

76 struct sockaddr_in rtdata;
77
78 cmdstr = (cmd == RTM_ADD ? "Add" : "Delete");
79 s = ID0socket(PF_ROUTE, SOCK_RAW, 0);
80 if (s < 0) {
81 LogPrintf(LogERROR, "OsSetRoute: socket(): %s\n", strerror(errno));
82 return;
83 }
21 *
22 */
23
24#include <sys/param.h>
25#include <sys/time.h>
26#include <sys/socket.h>
27#include <net/if_types.h>
28#include <net/route.h>

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

76 struct sockaddr_in rtdata;
77
78 cmdstr = (cmd == RTM_ADD ? "Add" : "Delete");
79 s = ID0socket(PF_ROUTE, SOCK_RAW, 0);
80 if (s < 0) {
81 LogPrintf(LogERROR, "OsSetRoute: socket(): %s\n", strerror(errno));
82 return;
83 }
84 memset(&rtmes, '\0', sizeof(rtmes));
84 memset(&rtmes, '\0', sizeof rtmes);
85 rtmes.m_rtm.rtm_version = RTM_VERSION;
86 rtmes.m_rtm.rtm_type = cmd;
87 rtmes.m_rtm.rtm_addrs = RTA_DST;
88 rtmes.m_rtm.rtm_seq = ++seqno;
89 rtmes.m_rtm.rtm_pid = getpid();
90 rtmes.m_rtm.rtm_flags = RTF_UP | RTF_GATEWAY | RTF_STATIC;
91
85 rtmes.m_rtm.rtm_version = RTM_VERSION;
86 rtmes.m_rtm.rtm_type = cmd;
87 rtmes.m_rtm.rtm_addrs = RTA_DST;
88 rtmes.m_rtm.rtm_seq = ++seqno;
89 rtmes.m_rtm.rtm_pid = getpid();
90 rtmes.m_rtm.rtm_flags = RTF_UP | RTF_GATEWAY | RTF_STATIC;
91
92 memset(&rtdata, '\0', sizeof(rtdata));
92 memset(&rtdata, '\0', sizeof rtdata);
93 rtdata.sin_len = 16;
94 rtdata.sin_family = AF_INET;
95 rtdata.sin_port = 0;
96 rtdata.sin_addr = dst;
97
98 cp = rtmes.m_space;
99 memcpy(cp, &rtdata, 16);
100 cp += 16;
101 if (cmd == RTM_ADD)
102 if (gateway.s_addr == INADDR_ANY) {
103 /* Add a route through the interface */
104 struct sockaddr_dl dl;
105 const char *iname;
106 int ilen;
107
108 iname = Index2Nam(IfIndex);
109 ilen = strlen(iname);
93 rtdata.sin_len = 16;
94 rtdata.sin_family = AF_INET;
95 rtdata.sin_port = 0;
96 rtdata.sin_addr = dst;
97
98 cp = rtmes.m_space;
99 memcpy(cp, &rtdata, 16);
100 cp += 16;
101 if (cmd == RTM_ADD)
102 if (gateway.s_addr == INADDR_ANY) {
103 /* Add a route through the interface */
104 struct sockaddr_dl dl;
105 const char *iname;
106 int ilen;
107
108 iname = Index2Nam(IfIndex);
109 ilen = strlen(iname);
110 dl.sdl_len = sizeof(dl)-sizeof(dl.sdl_data)+ilen;
110 dl.sdl_len = sizeof dl - sizeof dl.sdl_data + ilen;
111 dl.sdl_family = AF_LINK;
112 dl.sdl_index = IfIndex;
113 dl.sdl_type = 0;
114 dl.sdl_nlen = ilen;
115 dl.sdl_alen = 0;
116 dl.sdl_slen = 0;
111 dl.sdl_family = AF_LINK;
112 dl.sdl_index = IfIndex;
113 dl.sdl_type = 0;
114 dl.sdl_nlen = ilen;
115 dl.sdl_alen = 0;
116 dl.sdl_slen = 0;
117 strcpy(dl.sdl_data, iname);
117 strncpy(dl.sdl_data, iname, sizeof dl.sdl_data);
118
119 memcpy(cp, &dl, dl.sdl_len);
120 cp += dl.sdl_len;
121 rtmes.m_rtm.rtm_addrs |= RTA_GATEWAY;
122 } else {
123 rtdata.sin_addr = gateway;
124 memcpy(cp, &rtdata, 16);
125 cp += 16;

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

214 }
215 break;
216
217 case AF_LINK:
218 if (dl->sdl_nlen)
219 snprintf(buf, sizeof buf, "%.*s", dl->sdl_nlen, dl->sdl_data);
220 else if (dl->sdl_alen)
221 if (dl->sdl_type == IFT_ETHER)
118
119 memcpy(cp, &dl, dl.sdl_len);
120 cp += dl.sdl_len;
121 rtmes.m_rtm.rtm_addrs |= RTA_GATEWAY;
122 } else {
123 rtdata.sin_addr = gateway;
124 memcpy(cp, &rtdata, 16);
125 cp += 16;

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

214 }
215 break;
216
217 case AF_LINK:
218 if (dl->sdl_nlen)
219 snprintf(buf, sizeof buf, "%.*s", dl->sdl_nlen, dl->sdl_data);
220 else if (dl->sdl_alen)
221 if (dl->sdl_type == IFT_ETHER)
222 if (dl->sdl_alen < sizeof(buf)/3) {
222 if (dl->sdl_alen < sizeof buf / 3) {
223 int f;
224 u_char *MAC;
225
226 MAC = (u_char *)dl->sdl_data + dl->sdl_nlen;
227 for (f = 0; f < dl->sdl_alen; f++)
228 sprintf(buf+f*3, "%02x:", MAC[f]);
229 buf[f*3-1] = '\0';
230 } else

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

284
285static void
286p_flags(u_long f, int max)
287{
288 if (VarTerm) {
289 char name[33], *flags;
290 register struct bits *p = bits;
291
223 int f;
224 u_char *MAC;
225
226 MAC = (u_char *)dl->sdl_data + dl->sdl_nlen;
227 for (f = 0; f < dl->sdl_alen; f++)
228 sprintf(buf+f*3, "%02x:", MAC[f]);
229 buf[f*3-1] = '\0';
230 } else

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

284
285static void
286p_flags(u_long f, int max)
287{
288 if (VarTerm) {
289 char name[33], *flags;
290 register struct bits *p = bits;
291
292 if (max > sizeof(name)-1)
293 max = sizeof(name)-1;
292 if (max > sizeof name - 1)
293 max = sizeof name - 1;
294
295 for (flags = name; p->b_mask && flags - name < max; p++)
296 if (p->b_mask & f)
297 *flags++ = p->b_val;
298 *flags = '\0';
299 fprintf(VarTerm, "%-*.*s", max, max, name);
300 }
301}

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

329 free(buf);
330 return "???";
331 }
332 end = buf + needed;
333
334 for (ptr = buf; ptr < end; ptr += ifm->ifm_msglen) {
335 ifm = (struct if_msghdr *)ptr;
336 dl = (struct sockaddr_dl *)(ifm + 1);
294
295 for (flags = name; p->b_mask && flags - name < max; p++)
296 if (p->b_mask & f)
297 *flags++ = p->b_val;
298 *flags = '\0';
299 fprintf(VarTerm, "%-*.*s", max, max, name);
300 }
301}

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

329 free(buf);
330 return "???";
331 }
332 end = buf + needed;
333
334 for (ptr = buf; ptr < end; ptr += ifm->ifm_msglen) {
335 ifm = (struct if_msghdr *)ptr;
336 dl = (struct sockaddr_dl *)(ifm + 1);
337 if (ifm->ifm_index > 0 && ifm->ifm_index <= sizeof(ifs)/sizeof(ifs[0])
337 if (ifm->ifm_index > 0 && ifm->ifm_index <= sizeof ifs/sizeof ifs[0]
338 && ifs[ifm->ifm_index-1][0] == '\0') {
338 && ifs[ifm->ifm_index-1][0] == '\0') {
339 if ((len = dl->sdl_nlen) > sizeof(ifs[0])-1)
340 len = sizeof(ifs[0])-1;
339 if ((len = dl->sdl_nlen) > sizeof ifs[0] - 1)
340 len = sizeof ifs[0] - 1;
341 strncpy(ifs[ifm->ifm_index-1], dl->sdl_data, len);
342 ifs[ifm->ifm_index-1][len] = '\0';
343 if (len && nifs < ifm->ifm_index)
344 nifs = ifm->ifm_index;
345 } else if (LogIsKept(LogDEBUG))
346 LogPrintf(LogDEBUG, "Skipping out-of-range interface %d!\n",
347 ifm->ifm_index);
348 }

--- 206 unchanged lines hidden ---
341 strncpy(ifs[ifm->ifm_index-1], dl->sdl_data, len);
342 ifs[ifm->ifm_index-1][len] = '\0';
343 if (len && nifs < ifm->ifm_index)
344 nifs = ifm->ifm_index;
345 } else if (LogIsKept(LogDEBUG))
346 LogPrintf(LogDEBUG, "Skipping out-of-range interface %d!\n",
347 ifm->ifm_index);
348 }

--- 206 unchanged lines hidden ---