- Add netatalk bits

- Add prototypes
- Fix printf formats
This commit is contained in:
christos 1997-04-03 02:35:46 +00:00
parent 8e9ba6bac6
commit d9349e61e1
9 changed files with 230 additions and 115 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.15 1997/02/22 03:49:31 thorpej Exp $
# $NetBSD: Makefile,v 1.16 1997/04/03 02:35:46 christos Exp $
# @(#)Makefile 8.1 (Berkeley) 6/5/93
PROG= route
@ -16,4 +16,5 @@ SRCS= route.c show.c keywords.c ccitt_addr.c
route.o .depend lint tags: keywords.h
.include <bsd.prog.mk>

View File

@ -1,4 +1,4 @@
/* $NetBSD: ccitt_addr.c,v 1.8 1995/04/23 10:33:41 cgd Exp $ */
/* $NetBSD: ccitt_addr.c,v 1.9 1997/04/03 02:35:47 christos Exp $ */
/*
* Copyright (c) 1990, 1993
@ -52,12 +52,17 @@
* Copyright (c) 1984
*/
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netccitt/x25.h>
static char *copychar ();
#include "extern.h"
static char *copychar __P((char *, char *));
int
ccitt_addr (addr, xp)
char *addr;
register struct sockaddr_x25 *xp;

46
sbin/route/extern.h Normal file
View File

@ -0,0 +1,46 @@
/* $NetBSD: extern.h,v 1.1 1997/04/03 02:35:48 christos Exp $ */
/*
* Copyright (c) 1997 Christos Zoulas. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 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 Christos Zoulas.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
struct sockaddr;
struct sockaddr_x25;
struct sockaddr_ns;
/* show.c */
void show __P((int, char **));
/* ccitt_addr.c */
int ccitt_addr __P((char *, struct sockaddr_x25 *));
/* route.c */
extern int nflag;
char *routename __P((struct sockaddr *));
char *netname __P((struct sockaddr *));
char *ns_print __P((struct sockaddr_ns *));

View File

@ -1,4 +1,4 @@
/* $NetBSD: keywords.c,v 1.1 1996/11/15 18:01:38 gwr Exp $ */
/* $NetBSD: keywords.c,v 1.2 1997/04/03 02:35:48 christos Exp $ */
/* WARNING! This file was generated by keywords.sh */
@ -7,6 +7,7 @@
struct keytab keywords[] = {
{"add", K_ADD},
{"atalk", K_ATALK},
{"blackhole", K_BLACKHOLE},
{"change", K_CHANGE},
{"cloning", K_CLONING},

View File

@ -1,4 +1,4 @@
/* $NetBSD: keywords.h,v 1.3 1996/12/16 19:53:02 cgd Exp $ */
/* $NetBSD: keywords.h,v 1.4 1997/04/03 02:35:49 christos Exp $ */
/* WARNING! This file was generated by keywords.sh */
@ -9,46 +9,47 @@ extern struct keytab {
#define K_ADD 1
#define K_BLACKHOLE 2
#define K_CHANGE 3
#define K_CLONING 4
#define K_DELETE 5
#define K_DST 6
#define K_EXPIRE 7
#define K_FLUSH 8
#define K_GATEWAY 9
#define K_GENMASK 10
#define K_GET 11
#define K_HOST 12
#define K_HOPCOUNT 13
#define K_IFACE 14
#define K_INTERFACE 15
#define K_IFA 16
#define K_IFP 17
#define K_INET 18
#define K_ISO 19
#define K_LINK 20
#define K_LLINFO 21
#define K_LOCK 22
#define K_LOCKREST 23
#define K_MASK 24
#define K_MONITOR 25
#define K_MTU 26
#define K_NET 27
#define K_NETMASK 28
#define K_NOSTATIC 29
#define K_OSI 30
#define K_PROTO1 31
#define K_PROTO2 32
#define K_RECVPIPE 33
#define K_REJECT 34
#define K_RTT 35
#define K_RTTVAR 36
#define K_SA 37
#define K_SENDPIPE 38
#define K_SHOW 39
#define K_SSTHRESH 40
#define K_STATIC 41
#define K_X25 42
#define K_XNS 43
#define K_XRESOLVE 44
#define K_ATALK 2
#define K_BLACKHOLE 3
#define K_CHANGE 4
#define K_CLONING 5
#define K_DELETE 6
#define K_DST 7
#define K_EXPIRE 8
#define K_FLUSH 9
#define K_GATEWAY 10
#define K_GENMASK 11
#define K_GET 12
#define K_HOST 13
#define K_HOPCOUNT 14
#define K_IFACE 15
#define K_INTERFACE 16
#define K_IFA 17
#define K_IFP 18
#define K_INET 19
#define K_ISO 20
#define K_LINK 21
#define K_LLINFO 22
#define K_LOCK 23
#define K_LOCKREST 24
#define K_MASK 25
#define K_MONITOR 26
#define K_MTU 27
#define K_NET 28
#define K_NETMASK 29
#define K_NOSTATIC 30
#define K_OSI 31
#define K_PROTO1 32
#define K_PROTO2 33
#define K_RECVPIPE 34
#define K_REJECT 35
#define K_RTT 36
#define K_RTTVAR 37
#define K_SA 38
#define K_SENDPIPE 39
#define K_SHOW 40
#define K_SSTHRESH 41
#define K_STATIC 42
#define K_X25 43
#define K_XNS 44
#define K_XRESOLVE 45

View File

@ -1,5 +1,5 @@
#!/bin/sh
# $NetBSD: keywords.sh,v 1.3 1996/12/16 19:53:03 cgd Exp $
# $NetBSD: keywords.sh,v 1.4 1997/04/03 02:35:49 christos Exp $
# @(#)keywords 8.2 (Berkeley) 3/19/94
#
# WARNING! If you change this file, re-run it!
@ -9,6 +9,7 @@ awk=${AWK:-awk}
cat << _EOF_ > _keywords.t1
add
atalk
blackhole
change
cloning

View File

@ -1,4 +1,4 @@
.\" $NetBSD: route.8,v 1.8 1997/02/22 21:22:24 carrel Exp $
.\" $NetBSD: route.8,v 1.9 1997/04/03 02:35:50 christos Exp $
.\"
.\" Copyright (c) 1983, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@ -122,6 +122,7 @@ will ``flush'' the routing tables of all gateway entries.
When the address family may is specified by any of the
.Fl osi ,
.Fl xns ,
.Fl atalk ,
or
.Fl inet
modifiers, only routes having destinations with addresses in the
@ -185,11 +186,14 @@ indicating the interface to be used for transmission.
The optional modifiers
.Fl xns ,
.Fl osi ,
.Fl atalk ,
and
.Fl link
specify that all subsequent addresses are in the
.Tn XNS
.Tn OSI
.Tn XNS ,
.Tn OSI ,
or
.Tn AppleTalk
address families,
or are specified as link-level addresses,
and the names must be numeric specifications rather than

View File

@ -1,4 +1,4 @@
/* $NetBSD: route.c,v 1.18 1997/02/22 21:22:26 carrel Exp $ */
/* $NetBSD: route.c,v 1.19 1997/04/03 02:35:51 christos Exp $ */
/*
* Copyright (c) 1983, 1989, 1991, 1993
@ -43,7 +43,7 @@ static char copyright[] =
#if 0
static char sccsid[] = "@(#)route.c 8.3 (Berkeley) 3/19/94";
#else
static char rcsid[] = "$NetBSD: route.c,v 1.18 1997/02/22 21:22:26 carrel Exp $";
static char rcsid[] = "$NetBSD: route.c,v 1.19 1997/04/03 02:35:51 christos Exp $";
#endif
#endif /* not lint */
@ -58,6 +58,7 @@ static char rcsid[] = "$NetBSD: route.c,v 1.18 1997/02/22 21:22:26 carrel Exp $"
#include <net/route.h>
#include <net/if_dl.h>
#include <netinet/in.h>
#include <netatalk/at.h>
#include <netns/ns.h>
#include <netiso/iso.h>
#include <netccitt/x25.h>
@ -73,35 +74,55 @@ static char rcsid[] = "$NetBSD: route.c,v 1.18 1997/02/22 21:22:26 carrel Exp $"
#include <paths.h>
#include "keywords.h"
#include "extern.h"
typedef union sockunion *sup;
int main __P((int, char **));
static __dead void usage __P((char *));
static void quit __P((char *));
static char *any_ntoa __P((const struct sockaddr *));
static void set_metric __P((char *, int));
static void newroute __P((int, char **));
static void inet_makenetandmask __P((u_long, struct sockaddr_in *));
static int getaddr __P((int, char *, struct hostent **));
#ifndef SMALL
static void flushroutes __P((int, char *[]));
static int x25_makemask __P((void));
static void interfaces __P((void));
static void monitor __P((void));
static void print_getmsg __P((struct rt_msghdr *, int));
#endif
static int rtmsg __P((int, int ));
static void mask_addr __P((void));
static void print_rtmsg __P((struct rt_msghdr *, int));
static void pmsg_common __P((struct rt_msghdr *));
static void pmsg_addrs __P((char *, int));
static void bprintf __P((FILE *, int, u_char *));
static int keyword __P((char *));
static void sodump __P((sup, char *));
static void sockaddr __P((char *, struct sockaddr *));
struct ortentry route;
union sockunion {
struct sockaddr sa;
struct sockaddr_in sin;
struct sockaddr_at sat;
struct sockaddr_ns sns;
struct sockaddr_iso siso;
struct sockaddr_dl sdl;
struct sockaddr_x25 sx25;
} so_dst, so_gate, so_mask, so_genmask, so_ifa, so_ifp;
typedef union sockunion *sup;
int pid, rtm_addrs;
int s;
int forcehost, forcenet, doflush, nflag, af, qflag, tflag, keyword();
int forcehost, forcenet, doflush, nflag, af, qflag, tflag;
int iflag, verbose, aflen = sizeof (struct sockaddr_in);
int locking, lockrest, debugonly;
struct rt_metrics rt_metrics;
u_long rtm_inits;
struct in_addr inet_makeaddr();
char *routename(), *netname();
void flushroutes(), newroute(), monitor(), sockaddr(), sodump();
void print_getmsg(), print_rtmsg(), pmsg_common(), pmsg_addrs();
void bprintf(), mask_addr();
int getaddr(), rtmsg(), x25_makemask();
extern char *inet_ntoa(), *iso_ntoa(), *link_ntoa();
extern void show();
__dead void
static __dead void
usage(cp)
char *cp;
{
@ -113,7 +134,7 @@ usage(cp)
/* NOTREACHED */
}
void
static void
quit(s)
char *s;
{
@ -214,7 +235,7 @@ main(argc, argv)
* Purge all entries in the routing tables not
* associated with network interfaces.
*/
void
static void
flushroutes(argc, argv)
int argc;
char *argv[];
@ -232,6 +253,9 @@ flushroutes(argc, argv)
case K_INET:
af = AF_INET;
break;
case K_ATALK:
af = AF_APPLETALK;
break;
case K_XNS:
af = AF_NS;
break;
@ -311,7 +335,7 @@ bad: usage(*argv);
static char hexlist[] = "0123456789abcdef";
char *
static char *
any_ntoa(sa)
const struct sockaddr *sa;
{
@ -343,7 +367,6 @@ routename(sa)
struct hostent *hp;
static char domain[MAXHOSTNAMELEN + 1];
static int first = 1;
char *ns_print();
struct in_addr in;
if (first) {
@ -392,6 +415,12 @@ routename(sa)
(void) sprintf(line, "iso %s",
iso_ntoa(&((struct sockaddr_iso *)sa)->siso_addr));
break;
case AF_APPLETALK:
(void) snprintf(line, sizeof(line), "atalk %d.%d",
((struct sockaddr_at *)sa)->sat_addr.s_net,
((struct sockaddr_at *)sa)->sat_addr.s_node);
break;
#endif /* SMALL */
default:
@ -417,7 +446,6 @@ netname(sa)
u_long net, mask;
register u_long i;
int subnetshift;
char *ns_print();
struct in_addr in;
switch (sa->sa_family) {
@ -487,6 +515,12 @@ netname(sa)
(void) sprintf(line, "iso %s",
iso_ntoa(&((struct sockaddr_iso *)sa)->siso_addr));
break;
case AF_APPLETALK:
(void) snprintf(line, sizeof(line), "atalk %d.%d",
((struct sockaddr_at *)sa)->sat_addr.s_net,
((struct sockaddr_at *)sa)->sat_addr.s_node);
break;
#endif /* SMALL */
default:
@ -497,7 +531,7 @@ netname(sa)
return (line);
}
void
static void
set_metric(value, key)
char *value;
int key;
@ -524,7 +558,7 @@ set_metric(value, key)
*valp = atoi(value);
}
void
static void
newroute(argc, argv)
int argc;
register char **argv;
@ -546,6 +580,11 @@ newroute(argc, argv)
aflen = sizeof(union sockunion);
break;
case K_ATALK:
af = AF_APPLETALK;
aflen = sizeof(struct sockaddr_at);
break;
case K_INET:
af = AF_INET;
aflen = sizeof(struct sockaddr_in);
@ -741,7 +780,7 @@ newroute(argc, argv)
}
}
void
static void
inet_makenetandmask(net, sin)
u_long net;
register struct sockaddr_in *sin;
@ -787,18 +826,17 @@ inet_makenetandmask(net, sin)
* Interpret an argument as a network address of some kind,
* returning 1 if a host address, 0 if a network address.
*/
int
static int
getaddr(which, s, hpp)
int which;
char *s;
struct hostent **hpp;
{
register sup su;
struct ns_addr ns_addr();
struct iso_addr *iso_addr();
struct hostent *hp;
struct netent *np;
u_long val;
char *t;
if (af == 0) {
af = AF_INET;
@ -829,6 +867,7 @@ getaddr(which, s, hpp)
su->sa.sa_family = af;
break;
default:
su = NULL;
usage("Internal Error");
/*NOTREACHED*/
}
@ -880,6 +919,24 @@ getaddr(which, s, hpp)
sockaddr(s, &su->sa);
return (1);
case AF_APPLETALK:
t = strchr (s, '.');
if (!t) {
badataddr:
(void)fprintf (stderr, "bad address: %s\n", s);
exit (1);
}
val = atoi (s);
if (val > 65535)
goto badataddr;
su->sat.sat_addr.s_net = val;
val = atoi (t);
if (val > 256)
goto badataddr;
su->sat.sat_addr.s_node = val;
rtm_addrs |= RTA_NETMASK;
return(forcehost || su->sat.sat_addr.s_node != 0);
case AF_LINK:
link_addr(s, &su->sdl);
return (1);
@ -979,11 +1036,12 @@ ns_print(sns)
else
*cport = 0;
(void) sprintf(mybuf,"%XH.%s%s", ntohl(net.long_e), host, cport);
(void) sprintf(mybuf,"%XH.%s%s", (u_int32_t) ntohl(net.long_e),
host, cport);
return (mybuf);
}
void
static void
interfaces()
{
size_t needed;
@ -1010,7 +1068,7 @@ interfaces()
}
}
void
static void
monitor()
{
int n;
@ -1036,7 +1094,7 @@ struct {
char m_space[512];
} m_rtmsg;
int
static int
rtmsg(cmd, flags)
int cmd, flags;
{
@ -1113,7 +1171,7 @@ rtmsg(cmd, flags)
return (0);
}
void
static void
mask_addr()
{
int olen = so_mask.sa.sa_len;
@ -1130,6 +1188,7 @@ mask_addr()
case AF_NS:
case AF_INET:
case AF_CCITT:
case AF_APPLETALK:
case 0:
return;
case AF_ISO:
@ -1179,7 +1238,7 @@ char ifnetflags[] =
char addrnames[] =
"\1DST\2GATEWAY\3NETMASK\4GENMASK\5IFP\6IFA\7AUTHOR\010BRD";
void
static void
print_rtmsg(rtm, msglen)
register struct rt_msghdr *rtm;
int msglen;
@ -1218,7 +1277,7 @@ print_rtmsg(rtm, msglen)
}
#ifndef SMALL
void
static void
print_getmsg(rtm, msglen)
register struct rt_msghdr *rtm;
int msglen;
@ -1229,7 +1288,8 @@ print_getmsg(rtm, msglen)
register char *cp;
register int i;
(void) printf(" route to: %s\n", routename(&so_dst));
(void) printf(" route to: %s\n",
routename((struct sockaddr *) &so_dst));
if (rtm->rtm_version != RTM_VERSION) {
(void)fprintf(stderr,
"routing message version %d not understood\n",
@ -1293,16 +1353,16 @@ print_getmsg(rtm, msglen)
(void) printf("\n%s\n", "\
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire");
printf("%8d%c ", rtm->rtm_rmx.rmx_recvpipe, lock(RPIPE));
printf("%8d%c ", rtm->rtm_rmx.rmx_sendpipe, lock(SPIPE));
printf("%8d%c ", rtm->rtm_rmx.rmx_ssthresh, lock(SSTHRESH));
printf("%8d%c ", msec(rtm->rtm_rmx.rmx_rtt), lock(RTT));
printf("%8d%c ", msec(rtm->rtm_rmx.rmx_rttvar), lock(RTTVAR));
printf("%8d%c ", rtm->rtm_rmx.rmx_hopcount, lock(HOPCOUNT));
printf("%8d%c ", rtm->rtm_rmx.rmx_mtu, lock(MTU));
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));
printf("%8ld%c ", msec(rtm->rtm_rmx.rmx_rtt), lock(RTT));
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)
rtm->rtm_rmx.rmx_expire -= time(0);
printf("%8d%c\n", rtm->rtm_rmx.rmx_expire, lock(EXPIRE));
printf("%8ld%c\n", rtm->rtm_rmx.rmx_expire, lock(EXPIRE));
#undef lock
#undef msec
#define RTA_IGN (RTA_DST|RTA_GATEWAY|RTA_NETMASK|RTA_IFP|RTA_IFA|RTA_BRD)
@ -1328,7 +1388,7 @@ pmsg_common(rtm)
pmsg_addrs(((char *)(rtm + 1)), rtm->rtm_addrs);
}
void
static void
pmsg_addrs(cp, addrs)
char *cp;
int addrs;
@ -1351,7 +1411,7 @@ pmsg_addrs(cp, addrs)
(void) fflush(stdout);
}
void
static void
bprintf(fp, b, s)
register FILE *fp;
register int b;
@ -1362,7 +1422,7 @@ bprintf(fp, b, s)
if (b == 0)
return;
while (i = *s++) {
while ((i = *s++) != 0) {
if (b & (1 << (i-1))) {
if (gotsome == 0)
i = '<';
@ -1380,7 +1440,7 @@ bprintf(fp, b, s)
(void) putc('>', fp);
}
int
static int
keyword(cp)
char *cp;
{
@ -1391,7 +1451,7 @@ keyword(cp)
return kt->kt_i;
}
void
static void
sodump(su, which)
register sup su;
char *which;
@ -1401,6 +1461,10 @@ sodump(su, which)
(void) printf("%s: inet %s; ",
which, inet_ntoa(su->sin.sin_addr));
break;
case AF_APPLETALK:
(void) printf("%s: atalk %d.%d; ",
which, su->sat.sat_addr.s_net, su->sat.sat_addr.s_node);
break;
case AF_LINK:
(void) printf("%s: link %s; ",
which, link_ntoa(&su->sdl));
@ -1416,7 +1480,7 @@ sodump(su, which)
break;
#endif /* SMALL */
default:
(void) printf("af %d: %s; ",
(void) printf("af %p: %s; ",
which, any_ntoa(&su->sa));
}
(void) fflush(stdout);
@ -1431,7 +1495,7 @@ sodump(su, which)
#define END (4*1)
#define DELIM (4*2)
void
static void
sockaddr(addr, sa)
register char *addr;
register struct sockaddr *sa;
@ -1439,9 +1503,9 @@ sockaddr(addr, sa)
register char *cp = (char *)sa;
int size = sa->sa_len;
char *cplim = cp + size;
register int byte = 0, state = VIRGIN, new;
register int byte = 0, state = VIRGIN, new = 0;
memset(cp, 0, size);
(void) memset(cp, 0, size);
cp++;
do {
if ((*addr >= '0') && (*addr <= '9')) {

View File

@ -1,4 +1,4 @@
/* $NetBSD: show.c,v 1.1 1996/11/15 18:01:41 gwr Exp $ */
/* $NetBSD: show.c,v 1.2 1997/04/03 02:35:52 christos Exp $ */
/*
* Copyright (c) 1983, 1988, 1993
@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "from: @(#)route.c 8.3 (Berkeley) 3/9/94";
#else
static char *rcsid = "$NetBSD: show.c,v 1.1 1996/11/15 18:01:41 gwr Exp $";
static char *rcsid = "$NetBSD: show.c,v 1.2 1997/04/03 02:35:52 christos Exp $";
#endif
#endif /* not lint */
@ -61,12 +61,7 @@ static char *rcsid = "$NetBSD: show.c,v 1.1 1996/11/15 18:01:41 gwr Exp $";
#include <string.h>
#include <unistd.h>
/* XXX: things from route.c */
extern char * routename __P((struct sockaddr *));
extern char * netname __P((struct sockaddr *));
extern char * ns_print __P((struct sockaddr_ns *));
extern int nflag;
#include "extern.h"
/*
* Definitions for showing gateway flags.
@ -93,13 +88,11 @@ static const struct bits bits[] = {
{ 0 }
};
static void pr_rthdr __P((void));
static void p_rtentry __P((struct rt_msghdr *));
static void pr_family __P((int));
static void p_sockaddr __P((struct sockaddr *, int, int ));
static void p_flags __P((int, char *));
static void pr_rthdr __P((void));
static void pr_family __P((int));
/*
* Print routing tables.
@ -113,7 +106,6 @@ show(argc, argv)
int mib[6];
char *buf, *next, *lim;
register struct rt_msghdr *rtm;
int i;
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;