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 --- |