route.c (89498) | route.c (92806) |
---|---|
1/* 2 * Copyright (c) 1983, 1989, 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 28 unchanged lines hidden (view full) --- 37 The Regents of the University of California. All rights reserved.\n"; 38#endif /* not lint */ 39 40#ifndef lint 41#if 0 42static char sccsid[] = "@(#)route.c 8.6 (Berkeley) 4/28/95"; 43#endif 44static const char rcsid[] = | 1/* 2 * Copyright (c) 1983, 1989, 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 28 unchanged lines hidden (view full) --- 37 The Regents of the University of California. All rights reserved.\n"; 38#endif /* not lint */ 39 40#ifndef lint 41#if 0 42static char sccsid[] = "@(#)route.c 8.6 (Berkeley) 4/28/95"; 43#endif 44static const char rcsid[] = |
45 "$FreeBSD: head/sbin/route/route.c 89498 2002-01-18 14:33:04Z ru $"; | 45 "$FreeBSD: head/sbin/route/route.c 92806 2002-03-20 17:55:10Z obrien $"; |
46#endif /* not lint */ 47 48#include <sys/param.h> 49#include <sys/file.h> 50#include <sys/socket.h> 51#include <sys/ioctl.h> 52#include <sys/sysctl.h> 53#include <sys/types.h> --- 155 unchanged lines hidden (view full) --- 209void 210flushroutes(argc, argv) 211 int argc; 212 char *argv[]; 213{ 214 size_t needed; 215 int mib[6], rlen, seqno; 216 char *buf, *next, *lim; | 46#endif /* not lint */ 47 48#include <sys/param.h> 49#include <sys/file.h> 50#include <sys/socket.h> 51#include <sys/ioctl.h> 52#include <sys/sysctl.h> 53#include <sys/types.h> --- 155 unchanged lines hidden (view full) --- 209void 210flushroutes(argc, argv) 211 int argc; 212 char *argv[]; 213{ 214 size_t needed; 215 int mib[6], rlen, seqno; 216 char *buf, *next, *lim; |
217 register struct rt_msghdr *rtm; | 217 struct rt_msghdr *rtm; |
218 219 if (uid) { 220 errx(EX_NOPERM, "must be root to alter routing table"); 221 } 222 shutdown(s, 0); /* Don't want to read back our messages */ 223 if (argc > 1) { 224 argv++; 225 if (argc == 2 && **argv == '-') --- 75 unchanged lines hidden (view full) --- 301 } 302 } 303} 304 305const char * 306routename(sa) 307 struct sockaddr *sa; 308{ | 218 219 if (uid) { 220 errx(EX_NOPERM, "must be root to alter routing table"); 221 } 222 shutdown(s, 0); /* Don't want to read back our messages */ 223 if (argc > 1) { 224 argv++; 225 if (argc == 2 && **argv == '-') --- 75 unchanged lines hidden (view full) --- 301 } 302 } 303} 304 305const char * 306routename(sa) 307 struct sockaddr *sa; 308{ |
309 register char *cp; | 309 char *cp; |
310 static char line[MAXHOSTNAMELEN + 1]; 311 struct hostent *hp; 312 static char domain[MAXHOSTNAMELEN + 1]; 313 static int first = 1, n; 314#ifdef NS 315 char *ns_print(); 316#endif 317 --- 107 unchanged lines hidden (view full) --- 425const char * 426netname(sa) 427 struct sockaddr *sa; 428{ 429 char *cp = 0; 430 static char line[MAXHOSTNAMELEN + 1]; 431 struct netent *np = 0; 432 u_long net, mask; | 310 static char line[MAXHOSTNAMELEN + 1]; 311 struct hostent *hp; 312 static char domain[MAXHOSTNAMELEN + 1]; 313 static int first = 1, n; 314#ifdef NS 315 char *ns_print(); 316#endif 317 --- 107 unchanged lines hidden (view full) --- 425const char * 426netname(sa) 427 struct sockaddr *sa; 428{ 429 char *cp = 0; 430 static char line[MAXHOSTNAMELEN + 1]; 431 struct netent *np = 0; 432 u_long net, mask; |
433 register u_long i; | 433 u_long i; |
434 int n, subnetshift; 435#ifdef NS 436 char *ns_print(); 437#endif 438 439 switch (sa->sa_family) { 440 441 case AF_INET: --- 139 unchanged lines hidden (view full) --- 581 if (locking) 582 locking = 0; 583 *valp = atoi(value); 584} 585 586void 587newroute(argc, argv) 588 int argc; | 434 int n, subnetshift; 435#ifdef NS 436 char *ns_print(); 437#endif 438 439 switch (sa->sa_family) { 440 441 case AF_INET: --- 139 unchanged lines hidden (view full) --- 581 if (locking) 582 locking = 0; 583 *valp = atoi(value); 584} 585 586void 587newroute(argc, argv) 588 int argc; |
589 register char **argv; | 589 char **argv; |
590{ 591 char *cmd, *dest = "", *gateway = "", *err; 592 int ishost = 0, proxy = 0, ret, attempts, oerrno, flags = RTF_STATIC; 593 int key; 594 struct hostent *hp = 0; 595 596 if (uid) { 597 errx(EX_NOPERM, "must be root to alter routing table"); --- 215 unchanged lines hidden (view full) --- 813 (void) printf(": %s\n", err); 814 exit(1); 815 } 816} 817 818void 819inet_makenetandmask(net, sin, bits) 820 u_long net, bits; | 590{ 591 char *cmd, *dest = "", *gateway = "", *err; 592 int ishost = 0, proxy = 0, ret, attempts, oerrno, flags = RTF_STATIC; 593 int key; 594 struct hostent *hp = 0; 595 596 if (uid) { 597 errx(EX_NOPERM, "must be root to alter routing table"); --- 215 unchanged lines hidden (view full) --- 813 (void) printf(": %s\n", err); 814 exit(1); 815 } 816} 817 818void 819inet_makenetandmask(net, sin, bits) 820 u_long net, bits; |
821 register struct sockaddr_in *sin; | 821 struct sockaddr_in *sin; |
822{ 823 u_long addr, mask = 0; | 822{ 823 u_long addr, mask = 0; |
824 register char *cp; | 824 char *cp; |
825 826 rtm_addrs |= RTA_NETMASK; 827 if (net == 0) 828 mask = addr = 0; 829 else if (net < 128) { 830 addr = net << IN_CLASSA_NSHIFT; 831 mask = IN_CLASSA_NET; 832 } else if (net < 65536) { --- 31 unchanged lines hidden (view full) --- 864 * returning 1 if a host address, 0 if a network address. 865 */ 866int 867getaddr(which, s, hpp) 868 int which; 869 char *s; 870 struct hostent **hpp; 871{ | 825 826 rtm_addrs |= RTA_NETMASK; 827 if (net == 0) 828 mask = addr = 0; 829 else if (net < 128) { 830 addr = net << IN_CLASSA_NSHIFT; 831 mask = IN_CLASSA_NET; 832 } else if (net < 65536) { --- 31 unchanged lines hidden (view full) --- 864 * returning 1 if a host address, 0 if a network address. 865 */ 866int 867getaddr(which, s, hpp) 868 int which; 869 char *s; 870 struct hostent **hpp; 871{ |
872 register sup su; | 872 sup su; |
873 struct hostent *hp; 874 struct netent *np; 875 u_long val; 876 char *q; 877 int afamily; /* local copy of af so we can change it */ 878 879 if (af == 0) { 880 af = AF_INET; --- 238 unchanged lines hidden (view full) --- 1119ns_print(sns) 1120 struct sockaddr_ns *sns; 1121{ 1122 struct ns_addr work; 1123 union { union ns_net net_e; u_long long_e; } net; 1124 u_short port; 1125 static char mybuf[50+MAXHOSTNAMELEN], cport[10], chost[25]; 1126 char *host = ""; | 873 struct hostent *hp; 874 struct netent *np; 875 u_long val; 876 char *q; 877 int afamily; /* local copy of af so we can change it */ 878 879 if (af == 0) { 880 af = AF_INET; --- 238 unchanged lines hidden (view full) --- 1119ns_print(sns) 1120 struct sockaddr_ns *sns; 1121{ 1122 struct ns_addr work; 1123 union { union ns_net net_e; u_long long_e; } net; 1124 u_short port; 1125 static char mybuf[50+MAXHOSTNAMELEN], cport[10], chost[25]; 1126 char *host = ""; |
1127 register char *p; 1128 register u_char *q; | 1127 char *p; 1128 u_char *q; |
1129 1130 work = sns->sns_addr; 1131 port = ntohs(work.x_port); 1132 work.x_port = 0; 1133 net.net_e = work.x_net; 1134 if (ns_nullhost(work) && net.long_e == 0) { 1135 if (!port) 1136 return ("*.*"); --- 26 unchanged lines hidden (view full) --- 1163#endif 1164 1165void 1166interfaces() 1167{ 1168 size_t needed; 1169 int mib[6]; 1170 char *buf, *lim, *next; | 1129 1130 work = sns->sns_addr; 1131 port = ntohs(work.x_port); 1132 work.x_port = 0; 1133 net.net_e = work.x_net; 1134 if (ns_nullhost(work) && net.long_e == 0) { 1135 if (!port) 1136 return ("*.*"); --- 26 unchanged lines hidden (view full) --- 1163#endif 1164 1165void 1166interfaces() 1167{ 1168 size_t needed; 1169 int mib[6]; 1170 char *buf, *lim, *next; |
1171 register struct rt_msghdr *rtm; | 1171 struct rt_msghdr *rtm; |
1172 1173 mib[0] = CTL_NET; 1174 mib[1] = PF_ROUTE; 1175 mib[2] = 0; /* protocol */ 1176 mib[3] = 0; /* wildcard address family */ 1177 mib[4] = NET_RT_IFLIST; 1178 mib[5] = 0; /* no flags */ 1179 if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) --- 35 unchanged lines hidden (view full) --- 1215} m_rtmsg; 1216 1217int 1218rtmsg(cmd, flags) 1219 int cmd, flags; 1220{ 1221 static int seq; 1222 int rlen; | 1172 1173 mib[0] = CTL_NET; 1174 mib[1] = PF_ROUTE; 1175 mib[2] = 0; /* protocol */ 1176 mib[3] = 0; /* wildcard address family */ 1177 mib[4] = NET_RT_IFLIST; 1178 mib[5] = 0; /* no flags */ 1179 if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) --- 35 unchanged lines hidden (view full) --- 1215} m_rtmsg; 1216 1217int 1218rtmsg(cmd, flags) 1219 int cmd, flags; 1220{ 1221 static int seq; 1222 int rlen; |
1223 register char *cp = m_rtmsg.m_space; 1224 register int l; | 1223 char *cp = m_rtmsg.m_space; 1224 int l; |
1225 1226#define NEXTADDR(w, u) \ 1227 if (rtm_addrs & (w)) {\ 1228 l = ROUNDUP(u.sa.sa_len); memmove(cp, &(u), l); cp += l;\ 1229 if (verbose) sodump(&(u),"u");\ 1230 } 1231 1232 errno = 0; --- 49 unchanged lines hidden (view full) --- 1282#undef rtm 1283 return (0); 1284} 1285 1286void 1287mask_addr() 1288{ 1289 int olen = so_mask.sa.sa_len; | 1225 1226#define NEXTADDR(w, u) \ 1227 if (rtm_addrs & (w)) {\ 1228 l = ROUNDUP(u.sa.sa_len); memmove(cp, &(u), l); cp += l;\ 1229 if (verbose) sodump(&(u),"u");\ 1230 } 1231 1232 errno = 0; --- 49 unchanged lines hidden (view full) --- 1282#undef rtm 1283 return (0); 1284} 1285 1286void 1287mask_addr() 1288{ 1289 int olen = so_mask.sa.sa_len; |
1290 register char *cp1 = olen + (char *)&so_mask, *cp2; | 1290 char *cp1 = olen + (char *)&so_mask, *cp2; |
1291 1292 for (so_mask.sa.sa_len = 0; cp1 > (char *)&so_mask; ) 1293 if (*--cp1 != 0) { 1294 so_mask.sa.sa_len = 1 + cp1 - (char *)&so_mask; 1295 break; 1296 } 1297 if ((rtm_addrs & RTA_DST) == 0) 1298 return; --- 52 unchanged lines hidden (view full) --- 1351"\1UP\2BROADCAST\3DEBUG\4LOOPBACK\5PTP\6b6\7RUNNING\010NOARP" 1352"\011PPROMISC\012ALLMULTI\013OACTIVE\014SIMPLEX\015LINK0\016LINK1" 1353"\017LINK2\020MULTICAST"; 1354char addrnames[] = 1355"\1DST\2GATEWAY\3NETMASK\4GENMASK\5IFP\6IFA\7AUTHOR\010BRD"; 1356 1357void 1358print_rtmsg(rtm, msglen) | 1291 1292 for (so_mask.sa.sa_len = 0; cp1 > (char *)&so_mask; ) 1293 if (*--cp1 != 0) { 1294 so_mask.sa.sa_len = 1 + cp1 - (char *)&so_mask; 1295 break; 1296 } 1297 if ((rtm_addrs & RTA_DST) == 0) 1298 return; --- 52 unchanged lines hidden (view full) --- 1351"\1UP\2BROADCAST\3DEBUG\4LOOPBACK\5PTP\6b6\7RUNNING\010NOARP" 1352"\011PPROMISC\012ALLMULTI\013OACTIVE\014SIMPLEX\015LINK0\016LINK1" 1353"\017LINK2\020MULTICAST"; 1354char addrnames[] = 1355"\1DST\2GATEWAY\3NETMASK\4GENMASK\5IFP\6IFA\7AUTHOR\010BRD"; 1356 1357void 1358print_rtmsg(rtm, msglen) |
1359 register struct rt_msghdr *rtm; | 1359 struct rt_msghdr *rtm; |
1360 int msglen; 1361{ 1362 struct if_msghdr *ifm; 1363 struct ifa_msghdr *ifam; 1364#ifdef RTM_NEWMADDR 1365 struct ifma_msghdr *ifmam; 1366#endif 1367 struct if_announcemsghdr *ifan; --- 53 unchanged lines hidden (view full) --- 1421 (long)rtm->rtm_pid, rtm->rtm_seq, rtm->rtm_errno); 1422 bprintf(stdout, rtm->rtm_flags, routeflags); 1423 pmsg_common(rtm); 1424 } 1425} 1426 1427void 1428print_getmsg(rtm, msglen) | 1360 int msglen; 1361{ 1362 struct if_msghdr *ifm; 1363 struct ifa_msghdr *ifam; 1364#ifdef RTM_NEWMADDR 1365 struct ifma_msghdr *ifmam; 1366#endif 1367 struct if_announcemsghdr *ifan; --- 53 unchanged lines hidden (view full) --- 1421 (long)rtm->rtm_pid, rtm->rtm_seq, rtm->rtm_errno); 1422 bprintf(stdout, rtm->rtm_flags, routeflags); 1423 pmsg_common(rtm); 1424 } 1425} 1426 1427void 1428print_getmsg(rtm, msglen) |
1429 register struct rt_msghdr *rtm; | 1429 struct rt_msghdr *rtm; |
1430 int msglen; 1431{ 1432 struct sockaddr *dst = NULL, *gate = NULL, *mask = NULL; 1433 struct sockaddr_dl *ifp = NULL; | 1430 int msglen; 1431{ 1432 struct sockaddr *dst = NULL, *gate = NULL, *mask = NULL; 1433 struct sockaddr_dl *ifp = NULL; |
1434 register struct sockaddr *sa; 1435 register char *cp; 1436 register int i; | 1434 struct sockaddr *sa; 1435 char *cp; 1436 int i; |
1437 1438 (void) printf(" route to: %s\n", routename(&so_dst)); 1439 if (rtm->rtm_version != RTM_VERSION) { 1440 warnx("routing message version %d not understood", 1441 rtm->rtm_version); 1442 return; 1443 } 1444 if (rtm->rtm_msglen > msglen) { --- 72 unchanged lines hidden (view full) --- 1517 bprintf(stdout, rtm->rtm_addrs, addrnames); 1518 putchar('\n'); 1519 } 1520#undef RTA_IGN 1521} 1522 1523void 1524pmsg_common(rtm) | 1437 1438 (void) printf(" route to: %s\n", routename(&so_dst)); 1439 if (rtm->rtm_version != RTM_VERSION) { 1440 warnx("routing message version %d not understood", 1441 rtm->rtm_version); 1442 return; 1443 } 1444 if (rtm->rtm_msglen > msglen) { --- 72 unchanged lines hidden (view full) --- 1517 bprintf(stdout, rtm->rtm_addrs, addrnames); 1518 putchar('\n'); 1519 } 1520#undef RTA_IGN 1521} 1522 1523void 1524pmsg_common(rtm) |
1525 register struct rt_msghdr *rtm; | 1525 struct rt_msghdr *rtm; |
1526{ 1527 (void) printf("\nlocks: "); 1528 bprintf(stdout, rtm->rtm_rmx.rmx_locks, metricnames); 1529 (void) printf(" inits: "); 1530 bprintf(stdout, rtm->rtm_inits, metricnames); 1531 pmsg_addrs(((char *)(rtm + 1)), rtm->rtm_addrs); 1532} 1533 1534void 1535pmsg_addrs(cp, addrs) 1536 char *cp; 1537 int addrs; 1538{ | 1526{ 1527 (void) printf("\nlocks: "); 1528 bprintf(stdout, rtm->rtm_rmx.rmx_locks, metricnames); 1529 (void) printf(" inits: "); 1530 bprintf(stdout, rtm->rtm_inits, metricnames); 1531 pmsg_addrs(((char *)(rtm + 1)), rtm->rtm_addrs); 1532} 1533 1534void 1535pmsg_addrs(cp, addrs) 1536 char *cp; 1537 int addrs; 1538{ |
1539 register struct sockaddr *sa; | 1539 struct sockaddr *sa; |
1540 int i; 1541 1542 if (addrs == 0) { 1543 (void) putchar('\n'); 1544 return; 1545 } 1546 (void) printf("\nsockaddrs: "); 1547 bprintf(stdout, addrs, addrnames); --- 5 unchanged lines hidden (view full) --- 1553 ADVANCE(cp, sa); 1554 } 1555 (void) putchar('\n'); 1556 (void) fflush(stdout); 1557} 1558 1559void 1560bprintf(fp, b, s) | 1540 int i; 1541 1542 if (addrs == 0) { 1543 (void) putchar('\n'); 1544 return; 1545 } 1546 (void) printf("\nsockaddrs: "); 1547 bprintf(stdout, addrs, addrnames); --- 5 unchanged lines hidden (view full) --- 1553 ADVANCE(cp, sa); 1554 } 1555 (void) putchar('\n'); 1556 (void) fflush(stdout); 1557} 1558 1559void 1560bprintf(fp, b, s) |
1561 register FILE *fp; 1562 register int b; 1563 register u_char *s; | 1561 FILE *fp; 1562 int b; 1563 u_char *s; |
1564{ | 1564{ |
1565 register int i; | 1565 int i; |
1566 int gotsome = 0; 1567 1568 if (b == 0) 1569 return; 1570 while ((i = *s++) != 0) { 1571 if (b & (1 << (i-1))) { 1572 if (gotsome == 0) 1573 i = '<'; --- 10 unchanged lines hidden (view full) --- 1584 if (gotsome) 1585 (void) putc('>', fp); 1586} 1587 1588int 1589keyword(cp) 1590 char *cp; 1591{ | 1566 int gotsome = 0; 1567 1568 if (b == 0) 1569 return; 1570 while ((i = *s++) != 0) { 1571 if (b & (1 << (i-1))) { 1572 if (gotsome == 0) 1573 i = '<'; --- 10 unchanged lines hidden (view full) --- 1584 if (gotsome) 1585 (void) putc('>', fp); 1586} 1587 1588int 1589keyword(cp) 1590 char *cp; 1591{ |
1592 register struct keytab *kt = keywords; | 1592 struct keytab *kt = keywords; |
1593 1594 while (kt->kt_cp && strcmp(kt->kt_cp, cp)) 1595 kt++; 1596 return kt->kt_i; 1597} 1598 1599void 1600sodump(su, which) | 1593 1594 while (kt->kt_cp && strcmp(kt->kt_cp, cp)) 1595 kt++; 1596 return kt->kt_i; 1597} 1598 1599void 1600sodump(su, which) |
1601 register sup su; | 1601 sup su; |
1602 char *which; 1603{ 1604 switch (su->sa.sa_family) { 1605 case AF_LINK: 1606 (void) printf("%s: link %s; ", 1607 which, link_ntoa(&su->sdl)); 1608 break; 1609 case AF_INET: --- 20 unchanged lines hidden (view full) --- 1630#define GOTTWO 2 1631/* Inputs */ 1632#define DIGIT (4*0) 1633#define END (4*1) 1634#define DELIM (4*2) 1635 1636void 1637sockaddr(addr, sa) | 1602 char *which; 1603{ 1604 switch (su->sa.sa_family) { 1605 case AF_LINK: 1606 (void) printf("%s: link %s; ", 1607 which, link_ntoa(&su->sdl)); 1608 break; 1609 case AF_INET: --- 20 unchanged lines hidden (view full) --- 1630#define GOTTWO 2 1631/* Inputs */ 1632#define DIGIT (4*0) 1633#define END (4*1) 1634#define DELIM (4*2) 1635 1636void 1637sockaddr(addr, sa) |
1638 register char *addr; 1639 register struct sockaddr *sa; | 1638 char *addr; 1639 struct sockaddr *sa; |
1640{ | 1640{ |
1641 register char *cp = (char *)sa; | 1641 char *cp = (char *)sa; |
1642 int size = sa->sa_len; 1643 char *cplim = cp + size; | 1642 int size = sa->sa_len; 1643 char *cplim = cp + size; |
1644 register int byte = 0, state = VIRGIN, new = 0 /* foil gcc */; | 1644 int byte = 0, state = VIRGIN, new = 0 /* foil gcc */; |
1645 1646 memset(cp, 0, size); 1647 cp++; 1648 do { 1649 if ((*addr >= '0') && (*addr <= '9')) { 1650 new = *addr - '0'; 1651 } else if ((*addr >= 'a') && (*addr <= 'f')) { 1652 new = *addr - 'a' + 10; --- 48 unchanged lines hidden --- | 1645 1646 memset(cp, 0, size); 1647 cp++; 1648 do { 1649 if ((*addr >= '0') && (*addr <= '9')) { 1650 new = *addr - '0'; 1651 } else if ((*addr >= 'a') && (*addr <= 'f')) { 1652 new = *addr - 'a' + 10; --- 48 unchanged lines hidden --- |