X-Git-Url: https://gitweb.dragonflybsd.org/~tuxillo/dragonfly.git/blobdiff_plain/a6fe93dc81f66af3c2b899c1bc1ddb7fa9e6f42a..4ff4d99fc851da1a09ed7e6a9fe054d2dd3d6013:/sbin/route/route.c diff --git a/sbin/route/route.c b/sbin/route/route.c index 26ae9ef33b..924c7646c6 100644 --- a/sbin/route/route.c +++ b/sbin/route/route.c @@ -10,11 +10,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -33,7 +29,6 @@ * @(#) Copyright (c) 1983, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. * @(#)route.c 8.6 (Berkeley) 4/28/95 * $FreeBSD: src/sbin/route/route.c,v 1.40.2.11 2003/02/27 23:10:10 ru Exp $ - * $DragonFly: src/sbin/route/route.c,v 1.17 2008/07/07 22:02:09 nant Exp $ */ #include @@ -48,7 +43,6 @@ #include #include #include -#include #include #include @@ -74,7 +68,6 @@ union sockunion { #ifdef INET6 struct sockaddr_in6 sin6; #endif - struct sockaddr_at sat; struct sockaddr_mpls smpls; struct sockaddr_dl sdl; struct sockaddr_inarp sinarp; @@ -98,8 +91,6 @@ static int mplsop, popcount, pushcount, swapcount; static u_long rtm_inits; static uid_t uid; -static int atalk_aton(const char *, struct at_addr *); -static char *atalk_ntoa(struct at_addr); static void flushroutes(int, char **); static void set_metric(char *, int); static void newroute(int, char **); @@ -131,10 +122,6 @@ usage(const char *cp) /* NOTREACHED */ } -#define ROUNDUP(a) \ - ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) -#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len)) - int main(int argc, char **argv) { @@ -239,9 +226,6 @@ flushroutes(int argc, char **argv) af = AF_INET6; break; #endif - case K_ATALK: - af = AF_APPLETALK; - break; case K_LINK: af = AF_LINK; break; @@ -311,7 +295,7 @@ bad: usage(*argv); printf("%-20.20s ", rtm->rtm_flags & RTF_HOST ? routename(sa) : netname(sa)); } - sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + + sa = (struct sockaddr *)(RT_ROUNDUP(sa->sa_len) + (char *)sa); if (wflag) { printf("%-20s ", routename(sa)); @@ -407,11 +391,6 @@ routename(struct sockaddr *sa) } #endif - case AF_APPLETALK: - snprintf(line, sizeof(line), "atalk %s", - atalk_ntoa(((struct sockaddr_at *)sa)->sat_addr)); - break; - case AF_LINK: return(link_ntoa((struct sockaddr_dl *)sa)); @@ -441,9 +420,9 @@ routename(struct sockaddr *sa) char * netname(struct sockaddr *sa) { - const char *cp = 0; + const char *cp = NULL; static char line[MAXHOSTNAMELEN + 1]; - struct netent *np = 0; + struct netent *np = NULL; u_long net, mask; u_long i; int subnetshift; @@ -475,7 +454,7 @@ netname(struct sockaddr *sa) * width subnet fields. */ while (in.s_addr &~ mask) - mask = (long)mask >> subnetshift; + mask |= mask >> subnetshift; net = in.s_addr & mask; while ((mask & 1) == 0) mask >>= 1, net >>= 1; @@ -536,11 +515,6 @@ netname(struct sockaddr *sa) } #endif - case AF_APPLETALK: - snprintf(line, sizeof(line), "atalk %s", - atalk_ntoa(((struct sockaddr_at *)sa)->sat_addr)); - break; - case AF_LINK: return(link_ntoa((struct sockaddr_dl *)sa)); @@ -580,6 +554,9 @@ set_metric(char *value, int key) caseof(K_SSTHRESH, RTV_SSTHRESH, rmx_ssthresh); caseof(K_RTT, RTV_RTT, rmx_rtt); caseof(K_RTTVAR, RTV_RTTVAR, rmx_rttvar); + caseof(K_MSL, RTV_MSL, rmx_msl); + caseof(K_IWMAX, RTV_IWMAXSEGS, rmx_iwmaxsegs); + caseof(K_IW, RTV_IWCAPSEGS, rmx_iwcapsegs); } rtm_inits |= flag; if (lockrest || locking) @@ -596,7 +573,7 @@ newroute(int argc, char **argv) const char *err_str, *dest = "", *gateway = ""; int ishost = 0, proxy = 0, ret, attempts, oerrno, flags = RTF_STATIC; int key; - struct hostent *hp = 0; + struct hostent *hp = NULL; if (uid != 0) { errx(EX_NOPERM, "must be root to alter routing table"); @@ -621,10 +598,6 @@ newroute(int argc, char **argv) aflen = sizeof(struct sockaddr_in6); break; #endif - case K_ATALK: - af = AF_APPLETALK; - aflen = sizeof(struct sockaddr_at); - break; case K_SA: af = PF_ROUTE; aflen = sizeof(union sockunion); @@ -783,6 +756,9 @@ newroute(int argc, char **argv) case K_SSTHRESH: case K_RTT: case K_RTTVAR: + case K_MSL: + case K_IWMAX: + case K_IW: if (--argc == 0) usage(NULL); set_metric(*++argv, key); @@ -1101,12 +1077,6 @@ getaddr(int which, const char *str, struct hostent **hpp) } #endif /* INET6 */ - case AF_APPLETALK: - if (!atalk_aton(str, &su->sat.sat_addr)) - errx(EX_NOHOST, "bad address: %s", str); - rtm_addrs |= RTA_NETMASK; - return(forcehost || su->sat.sat_addr.s_node != 0); - case AF_LINK: link_addr(str, &su->sdl); return(1); @@ -1288,7 +1258,7 @@ rtmsg(int cmd, int flags) #define NEXTADDR(w, u) \ if (rtm_addrs & (w)) {\ - l = ROUNDUP(u.sa.sa_len); memmove(cp, &(u), l); cp += l;\ + l = RT_ROUNDUP(u.sa.sa_len); memmove(cp, &(u), l); cp += l;\ if (verbose) sodump(&(u),"u");\ } @@ -1367,7 +1337,6 @@ mask_addr(void) #ifdef INET6 case AF_INET6: #endif - case AF_APPLETALK: case 0: return; } @@ -1403,8 +1372,8 @@ const char *msgtypes[] = { }; char metricnames[] = -"\011pksent\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire\2hopcount" -"\1mtu"; +"\013iw\012iwmax\011msl\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire" +"\2hopcount\1mtu"; char routeflags[] = "\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE\010MASK_PRESENT" "\011CLONING\012XRESOLVE\013LLINFO\014STATIC\015BLACKHOLE\016b016" @@ -1531,7 +1500,7 @@ print_getmsg(struct rt_msghdr *rtm, int msglen) ifp = (struct sockaddr_dl *)sa; break; } - ADVANCE(cp, sa); + RT_ADVANCE(cp, sa); } if (dst != NULL && mask != NULL) mask->sa_family = dst->sa_family; /* XXX */ @@ -1556,7 +1525,7 @@ print_getmsg(struct rt_msghdr *rtm, int msglen) #define msec(u) (((u) + 500) / 1000) /* usec to msec */ printf("\n%s\n", "\ - recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire"); + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire msl,msec iwmax iw"); printf("%8ld%c ", rtm->rtm_rmx.rmx_recvpipe, lock(RPIPE)); printf("%8ld%c ", rtm->rtm_rmx.rmx_sendpipe, lock(SPIPE)); printf("%8ld%c ", rtm->rtm_rmx.rmx_ssthresh, lock(SSTHRESH)); @@ -1564,9 +1533,15 @@ print_getmsg(struct rt_msghdr *rtm, int msglen) printf("%8ld%c ", msec(rtm->rtm_rmx.rmx_rttvar), lock(RTTVAR)); printf("%8ld%c ", rtm->rtm_rmx.rmx_hopcount, lock(HOPCOUNT)); printf("%8ld%c ", rtm->rtm_rmx.rmx_mtu, lock(MTU)); - if (rtm->rtm_rmx.rmx_expire != 0) - rtm->rtm_rmx.rmx_expire -= time(0); - printf("%8ld%c\n", rtm->rtm_rmx.rmx_expire, lock(EXPIRE)); + if (rtm->rtm_rmx.rmx_expire != 0) { + struct timespec sp; + clock_gettime(CLOCK_MONOTONIC, &sp); + rtm->rtm_rmx.rmx_expire -= sp.tv_sec; + } + printf("%8ld%c ", rtm->rtm_rmx.rmx_expire, lock(EXPIRE)); + printf("%8ld ", rtm->rtm_rmx.rmx_msl); + printf("%5ld ", rtm->rtm_rmx.rmx_iwmaxsegs); + printf("%3ld\n", rtm->rtm_rmx.rmx_iwcapsegs); #undef lock #undef msec #define RTA_IGN (RTA_DST|RTA_GATEWAY|RTA_NETMASK|RTA_IFP|RTA_IFA|RTA_BRD) @@ -1607,7 +1582,7 @@ pmsg_addrs(char *cp, int addrs) if (i & addrs) { sa = (struct sockaddr *)cp; printf(" %s", routename(sa)); - ADVANCE(cp, sa); + RT_ADVANCE(cp, sa); } putchar('\n'); fflush(stdout); @@ -1661,10 +1636,6 @@ sodump(sup su, const char *which) printf("%s: inet %s; ", which, inet_ntoa(su->sin.sin_addr)); break; - case AF_APPLETALK: - printf("%s: atalk %s; ", - which, atalk_ntoa(su->sat.sat_addr)); - break; } fflush(stdout); } @@ -1719,25 +1690,3 @@ sockaddr(const char *addr, struct sockaddr *sa) } while (cp < cplim); sa->sa_len = cp - (char *)sa; } - -static int -atalk_aton(const char *text, struct at_addr *addr) -{ - u_int net, node; - - if (sscanf(text, "%u.%u", &net, &node) != 2 - || net > 0xffff || node > 0xff) - return(0); - addr->s_net = htons(net); - addr->s_node = node; - return(1); -} - -static char * -atalk_ntoa(struct at_addr at) -{ - static char buf[20]; - - snprintf(buf, sizeof(buf), "%u.%u", ntohs(at.s_net), at.s_node); - return(buf); -}