Deleted Added
full compact
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 ---