#!/bin/sh
# this is vxrouted_5.1.1-shar.08 (part 8 of a multipart archive)
# do not concatenate these parts, unpack them in order with /bin/sh
# file vxrouted_5.1.1/BSDrouted/trace.c continued
#
touch -am 1231235999 $$.touch >/dev/null 2>&1
if test ! -f 1231235999 && test -f $$.touch; then
  shar_touch=touch
else
  shar_touch=:
  echo 'WARNING: not restoring timestamps'
fi
rm -f 1231235999 $$.touch
#
if test ! -r _sharseq.tmp; then
  echo 'Please unpack part 1 first!'
  exit 1
fi
shar_sequence=`cat _sharseq.tmp`
if test "$shar_sequence" != 8; then
  echo "Please unpack part $shar_sequence next!"
  exit 1
fi
if test ! -f _sharnew.tmp; then
  echo 'x - still skipping vxrouted_5.1.1/BSDrouted/trace.c'
else
  echo 'x - continuing file vxrouted_5.1.1/BSDrouted/trace.c'
  sed 's/^X//' << 'SHAR_EOF' >> 'vxrouted_5.1.1/BSDrouted/trace.c' &&
X		fprintf(fd, "size=%d cp=%x packet=%x\n", size, cp, packet,
X		    ctime((time_t *)&stamp->tv_sec));
X		fflush(fd);
X		return;
X	}
X	if (tracepackets && tracecontents == 0) {
X		fflush(fd);
X		return;
X	}
X	switch (msg->rip_cmd) {
X
X	case RIPCMD_REQUEST:
X	case RIPCMD_RESPONSE:
X		size -= 4 * sizeof (char);
X		n = msg->rip_nets;
X		for (; size > 0; n++, size -= sizeof (struct netinfo)) {
X			if (size < sizeof (struct netinfo)) {
X				fprintf(fd, "(truncated record, len %d)\n",
X				    size);
X				break;
X			}
X			if (sizeof(n->rip_dst.sa_family) > 1)
X			    n->rip_dst.sa_family = ntohs(n->rip_dst.sa_family);
X
X			switch ((int)n->rip_dst.sa_family) {
X
X			case AF_INET:
X				fprintf(fd, "\tdst %s metric %d\n",
#define	satosin(sa)	((struct sockaddr_in *)&sa)
X				     inet_ntoa(satosin(n->rip_dst)->sin_addr),
X				     ntohl(n->rip_metric));
X				break;
X
X			default:
X				fprintf(fd, "\taf %d? metric %d\n",
X				     n->rip_dst.sa_family,
X				     ntohl(n->rip_metric));
X				break;
X			}
X		}
X		break;
X
X	case RIPCMD_TRACEON:
X		fprintf(fd, "\tfile=%*s\n", size, msg->rip_tracefile);
X		break;
X
X	case RIPCMD_TRACEOFF:
X		break;
X	}
X	fflush(fd);
X	if (ferror(fd))
X		traceoff();
}
SHAR_EOF
  echo 'File vxrouted_5.1.1/BSDrouted/trace.c is complete' &&
  $shar_touch -am 0218122889 'vxrouted_5.1.1/BSDrouted/trace.c' &&
  chmod 0444 'vxrouted_5.1.1/BSDrouted/trace.c' ||
  echo 'restore of vxrouted_5.1.1/BSDrouted/trace.c failed'
  shar_count="`wc -c < 'vxrouted_5.1.1/BSDrouted/trace.c'`"
  test 9714 -eq "$shar_count" ||
    echo "vxrouted_5.1.1/BSDrouted/trace.c: original size 9714, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= vxrouted_5.1.1/BSDrouted/trace.h ==============
if test -f 'vxrouted_5.1.1/BSDrouted/trace.h' && test X"$1" != X"-c"; then
  echo 'x - skipping vxrouted_5.1.1/BSDrouted/trace.h (File already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting vxrouted_5.1.1/BSDrouted/trace.h (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'vxrouted_5.1.1/BSDrouted/trace.h' &&
/*
X * Copyright (c) 1983, 1988 Regents of the University of California.
X * All rights reserved.
X *
X * Redistribution and use in source and binary forms are permitted
X * provided that the above copyright notice and this paragraph are
X * duplicated in all such forms and that any documentation,
X * advertising materials, and other materials related to such
X * distribution and use acknowledge that the software was developed
X * by the University of California, Berkeley.  The name of the
X * University may not be used to endorse or promote products derived
X * from this software without specific prior written permission.
X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X *
X *	@(#)trace.h	5.7 (Berkeley) 2/20/89
X */
X
/*
X * Routing table management daemon.
X */
X
/*
X * Trace record format.
X */
struct	iftrace {
X	struct	timeval ift_stamp;	/* time stamp */
X	struct	sockaddr ift_who;	/* from/to */
X	char	*ift_packet;		/* pointer to packet */
X	short	ift_size;		/* size of packet */
X	short	ift_metric;		/* metric on associated metric */
};
X
/*
X * Per interface packet tracing buffers.  An incoming and
X * outgoing circular buffer of packets is maintained, per
X * interface, for debugging.  Buffers are dumped whenever
X * an interface is marked down.
X */
struct	ifdebug {
X	struct	iftrace *ifd_records;	/* array of trace records */
X	struct	iftrace *ifd_front;	/* next empty trace record */
X	int	ifd_count;		/* number of unprinted records */
X	struct	interface *ifd_if;	/* for locating stuff */
};
X
/*
X * Packet tracing stuff.
X */
int	tracepackets;		/* watch packets as they go by */
int	tracecontents;		/* watch packet contents as they go by */
int	traceactions;		/* on/off */
int	tracehistory;		/* on/off */
FILE	*ftrace;		/* output trace file */
X
#define	TRACE_ACTION(action, route) { \
X	  if (traceactions) \
X		traceaction(ftrace, action, route); \
X	}
#define	TRACE_NEWMETRIC(route, newmetric) { \
X	  if (traceactions) \
X		tracenewmetric(ftrace, route, newmetric); \
X	}
#define	TRACE_INPUT(ifp, src, pack, size) { \
X	  if (tracehistory) { \
X		ifp = if_iflookup(src); \
X		if (ifp) \
X			trace(&ifp->int_input, src, pack, size, \
X				ntohl(ifp->int_metric)); \
X	  } \
X	  if (tracepackets) \
X		dumppacket(ftrace, "from", src, pack, size, &now); \
X	}
#define	TRACE_OUTPUT(ifp, dst, size) { \
X	  if (tracehistory && ifp) \
X		trace(&ifp->int_output, dst, packet, size, ifp->int_metric); \
X	  if (tracepackets) \
X		dumppacket(ftrace, "to", dst, packet, size, &now); \
X	}
SHAR_EOF
  $shar_touch -am 0220182189 'vxrouted_5.1.1/BSDrouted/trace.h' &&
  chmod 0444 'vxrouted_5.1.1/BSDrouted/trace.h' ||
  echo 'restore of vxrouted_5.1.1/BSDrouted/trace.h failed'
  shar_count="`wc -c < 'vxrouted_5.1.1/BSDrouted/trace.h'`"
  test 2608 -eq "$shar_count" ||
    echo "vxrouted_5.1.1/BSDrouted/trace.h: original size 2608, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= vxrouted_5.1.1/BSDrouted/tables.c ==============
if test -f 'vxrouted_5.1.1/BSDrouted/tables.c' && test X"$1" != X"-c"; then
  echo 'x - skipping vxrouted_5.1.1/BSDrouted/tables.c (File already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting vxrouted_5.1.1/BSDrouted/tables.c (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'vxrouted_5.1.1/BSDrouted/tables.c' &&
/*
X * Copyright (c) 1983, 1988 Regents of the University of California.
X * All rights reserved.
X *
X * Redistribution and use in source and binary forms are permitted
X * provided that the above copyright notice and this paragraph are
X * duplicated in all such forms and that any documentation,
X * advertising materials, and other materials related to such
X * distribution and use acknowledge that the software was developed
X * by the University of California, Berkeley.  The name of the
X * University may not be used to endorse or promote products derived
X * from this software without specific prior written permission.
X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X */
X
#ifndef lint
static char sccsid[] = "@(#)tables.c	5.15 (Berkeley) 2/18/89";
#endif /* not lint */
X
/*
X * Routing Table Management Daemon
X */
#include "defs.h"
#include <sys/ioctl.h>
#include <errno.h>
#include <sys/syslog.h>
X
#ifndef DEBUG
#define	DEBUG	0
#endif
X
int	install = !DEBUG;		/* if 1 call kernel */
X
/*
X * Lookup dst in the tables for an exact match.
X */
struct rt_entry *
rtlookup(dst)
X	struct sockaddr *dst;
{
X	register struct rt_entry *rt;
X	register struct rthash *rh;
X	register u_int hash;
X	struct afhash h;
X	int doinghost = 1;
X
X	if (dst->sa_family >= af_max)
X		return (0);
X	(*afswitch[dst->sa_family].af_hash)(dst, &h);
X	hash = h.afh_hosthash;
X	rh = &hosthash[hash & ROUTEHASHMASK];
again:
X	for (rt = rh->rt_forw; rt != (struct rt_entry *)rh; rt = rt->rt_forw) {
X		if (rt->rt_hash != hash)
X			continue;
X		if (equal(&rt->rt_dst, dst))
X			return (rt);
X	}
X	if (doinghost) {
X		doinghost = 0;
X		hash = h.afh_nethash;
X		rh = &nethash[hash & ROUTEHASHMASK];
X		goto again;
X	}
X	return (0);
}
X
struct sockaddr wildcard;	/* zero valued cookie for wildcard searches */
X
/*
X * Find a route to dst as the kernel would.
X */
struct rt_entry *
rtfind(dst)
X	struct sockaddr *dst;
{
X	register struct rt_entry *rt;
X	register struct rthash *rh;
X	register u_int hash;
X	struct afhash h;
X	int af = dst->sa_family;
X	int doinghost = 1, (*match)();
X
X	if (af >= af_max)
X		return (0);
X	(*afswitch[af].af_hash)(dst, &h);
X	hash = h.afh_hosthash;
X	rh = &hosthash[hash & ROUTEHASHMASK];
X
again:
X	for (rt = rh->rt_forw; rt != (struct rt_entry *)rh; rt = rt->rt_forw) {
X		if (rt->rt_hash != hash)
X			continue;
X		if (doinghost) {
X			if (equal(&rt->rt_dst, dst))
X				return (rt);
X		} else {
X			if (rt->rt_dst.sa_family == af &&
X			    (*match)(&rt->rt_dst, dst))
X				return (rt);
X		}
X	}
X	if (doinghost) {
X		doinghost = 0;
X		hash = h.afh_nethash;
X		rh = &nethash[hash & ROUTEHASHMASK];
X		match = afswitch[af].af_netmatch;
X		goto again;
X	}
#ifdef notyet
X	/*
X	 * Check for wildcard gateway, by convention network 0.
X	 */
X	if (dst != &wildcard) {
X		dst = &wildcard, hash = 0;
X		goto again;
X	}
#endif
X	return (0);
}
X
rtadd(dst, gate, metric, state)
X	struct sockaddr *dst, *gate;
X	int metric, state;
{
X	struct afhash h;
X	register struct rt_entry *rt;
X	struct rthash *rh;
X	int af = dst->sa_family, flags;
X	u_int hash;
X
X	if (af >= af_max)
X		return;
X	(*afswitch[af].af_hash)(dst, &h);
X	flags = (*afswitch[af].af_rtflags)(dst);
X	/*
X	 * Subnet flag isn't visible to kernel, move to state.	XXX
X	 */
X	if (flags & RTF_SUBNET) {
X		state |= RTS_SUBNET;
X		flags &= ~RTF_SUBNET;
X	}
X	if (flags & RTF_HOST) {
X		hash = h.afh_hosthash;
X		rh = &hosthash[hash & ROUTEHASHMASK];
X	} else {
X		hash = h.afh_nethash;
X		rh = &nethash[hash & ROUTEHASHMASK];
X	}
X	rt = (struct rt_entry *)malloc(sizeof (*rt));
X	if (rt == 0)
X		return;
X	rt->rt_hash = hash;
X	rt->rt_dst = *dst;
X	rt->rt_router = *gate;
X	rt->rt_timer = 0;
X	rt->rt_flags = RTF_UP | flags;
X	rt->rt_state = state | RTS_CHANGED;
X	rt->rt_ifp = if_ifwithdstaddr(&rt->rt_router);
X	if (rt->rt_ifp == 0)
X		rt->rt_ifp = if_ifwithnet(&rt->rt_router);
X	if ((state & RTS_INTERFACE) == 0)
X		rt->rt_flags |= RTF_GATEWAY;
X	rt->rt_metric = metric;
X	insque(rt, rh);
X	TRACE_ACTION("ADD", rt);
X	/*
X	 * If the ioctl fails because the gateway is unreachable
X	 * from this host, discard the entry.  This should only
X	 * occur because of an incorrect entry in /etc/gateways.
X	 */
X	if (install && (rt->rt_state & (RTS_INTERNAL | RTS_EXTERNAL)) == 0 &&
X	    ioctl(s, SIOCADDRT, (char *)&rt->rt_rt) < 0) {
X		if (errno != EEXIST && gate->sa_family < af_max)
X			syslog(LOG_ERR,
X			"adding route to net/host %s through gateway %s: %m\n",
X			   (*afswitch[dst->sa_family].af_format)(dst),
X			   (*afswitch[gate->sa_family].af_format)(gate));
X		perror("SIOCADDRT");
X		if (errno == ENETUNREACH) {
X			TRACE_ACTION("DELETE", rt);
X			remque(rt);
X			free((char *)rt);
X		}
X	}
}
X
rtchange(rt, gate, metric)
X	struct rt_entry *rt;
X	struct sockaddr *gate;
X	short metric;
{
X	int add = 0, delete = 0, newgateway = 0;
X	struct rtentry oldroute;
X
X	if (!equal(&rt->rt_router, gate)) {
X		newgateway++;
X		TRACE_ACTION("CHANGE FROM ", rt);
X	} else if (metric != rt->rt_metric)
X		TRACE_NEWMETRIC(rt, metric);
X	if ((rt->rt_state & RTS_INTERNAL) == 0) {
X		/*
X		 * If changing to different router, we need to add
X		 * new route and delete old one if in the kernel.
X		 * If the router is the same, we need to delete
X		 * the route if has become unreachable, or re-add
X		 * it if it had been unreachable.
X		 */
X		if (newgateway) {
X			add++;
X			if (rt->rt_metric != HOPCNT_INFINITY)
X				delete++;
X		} else if (metric == HOPCNT_INFINITY)
X			delete++;
X		else if (rt->rt_metric == HOPCNT_INFINITY)
X			add++;
X	}
X	if (delete)
X		oldroute = rt->rt_rt;
X	if ((rt->rt_state & RTS_INTERFACE) && delete) {
X		rt->rt_state &= ~RTS_INTERFACE;
X		rt->rt_flags |= RTF_GATEWAY;
X		if (metric > rt->rt_metric && delete)
X			syslog(LOG_ERR, "%s route to interface %s (timed out)",
X			    add? "changing" : "deleting",
X			    rt->rt_ifp->int_name);
X	}
X	if (add) {
X		rt->rt_router = *gate;
X		rt->rt_ifp = if_ifwithdstaddr(&rt->rt_router);
X		if (rt->rt_ifp == 0)
X			rt->rt_ifp = if_ifwithnet(&rt->rt_router);
X	}
X	rt->rt_metric = metric;
X	rt->rt_state |= RTS_CHANGED;
X	if (newgateway)
X		TRACE_ACTION("CHANGE TO   ", rt);
X	if (add && install)
X		if (ioctl(s, SIOCADDRT, (char *)&rt->rt_rt) < 0)
X			perror("SIOCADDRT");
X	if (delete && install)
X		if (ioctl(s, SIOCDELRT, (char *)&oldroute) < 0)
X			perror("SIOCDELRT");
}
X
rtdelete(rt)
X	struct rt_entry *rt;
{
X
X	TRACE_ACTION("DELETE", rt);
X	if (rt->rt_metric < HOPCNT_INFINITY) {
X	    if ((rt->rt_state & (RTS_INTERFACE|RTS_INTERNAL)) == RTS_INTERFACE)
X		syslog(LOG_ERR,
X		    "deleting route to interface %s? (timed out?)",
X		    rt->rt_ifp->int_name);
X	    if (install &&
X		(rt->rt_state & (RTS_INTERNAL | RTS_EXTERNAL)) == 0 &&
X		ioctl(s, SIOCDELRT, (char *)&rt->rt_rt))
X		    perror("SIOCDELRT");
X	}
X	remque(rt);
X	free((char *)rt);
}
X
rtdeleteall(sig)
X	int sig;
{
X	register struct rthash *rh;
X	register struct rt_entry *rt;
X	struct rthash *base = hosthash;
X	int doinghost = 1;
X
again:
X	for (rh = base; rh < &base[ROUTEHASHSIZ]; rh++) {
X		rt = rh->rt_forw;
X		for (; rt != (struct rt_entry *)rh; rt = rt->rt_forw) {
X			if (rt->rt_state & RTS_INTERFACE ||
X			    rt->rt_metric >= HOPCNT_INFINITY)
X				continue;
X			TRACE_ACTION("DELETE", rt);
X			if ((rt->rt_state & (RTS_INTERNAL|RTS_EXTERNAL)) == 0 &&
X			    ioctl(s, SIOCDELRT, (char *)&rt->rt_rt))
X				perror("SIOCDELRT");
X		}
X	}
X	if (doinghost) {
X		doinghost = 0;
X		base = nethash;
X		goto again;
X	}
X	exit(sig);
}
X
/*
X * If we have an interface to the wide, wide world,
X * add an entry for an Internet default route (wildcard) to the internal
X * tables and advertise it.  This route is not added to the kernel routes,
X * but this entry prevents us from listening to other people's defaults
X * and installing them in the kernel here.
X */
rtdefault()
{
X	extern struct sockaddr inet_default;
X
X	rtadd(&inet_default, &inet_default, 1,
X		RTS_CHANGED | RTS_PASSIVE | RTS_INTERNAL);
}
X
rtinit()
{
X	register struct rthash *rh;
X
X	for (rh = nethash; rh < &nethash[ROUTEHASHSIZ]; rh++)
X		rh->rt_forw = rh->rt_back = (struct rt_entry *)rh;
X	for (rh = hosthash; rh < &hosthash[ROUTEHASHSIZ]; rh++)
X		rh->rt_forw = rh->rt_back = (struct rt_entry *)rh;
}
SHAR_EOF
  $shar_touch -am 0218122889 'vxrouted_5.1.1/BSDrouted/tables.c' &&
  chmod 0444 'vxrouted_5.1.1/BSDrouted/tables.c' ||
  echo 'restore of vxrouted_5.1.1/BSDrouted/tables.c failed'
  shar_count="`wc -c < 'vxrouted_5.1.1/BSDrouted/tables.c'`"
  test 8088 -eq "$shar_count" ||
    echo "vxrouted_5.1.1/BSDrouted/tables.c: original size 8088, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= vxrouted_5.1.1/BSDrouted/Makefile ==============
if test -f 'vxrouted_5.1.1/BSDrouted/Makefile' && test X"$1" != X"-c"; then
  echo 'x - skipping vxrouted_5.1.1/BSDrouted/Makefile (File already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting vxrouted_5.1.1/BSDrouted/Makefile (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'vxrouted_5.1.1/BSDrouted/Makefile' &&
#
# Copyright (c) 1987 Regents of the University of California.
# All rights reserved.
#
# Redistribution and use in source and binary forms are permitted
# provided that the above copyright notice and this paragraph are
# duplicated in all such forms and that any documentation,
# advertising materials, and other materials related to such
# distribution and use acknowledge that the software was developed
# by the University of California, Berkeley.  The name of the
# University may not be used to endorse or promote products derived
# from this software without specific prior written permission.
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
#	@(#)Makefile	5.7 (Berkeley) 7/9/88
#
CFLAGS=	-O
LIBC=	/lib/libc.a
C2=	/lib/c2
INLINE=	/sys/machine/inline/inline
SRCS=	af.c if.c input.c main.c output.c startup.c tables.c timer.c \
X	trace.c inet.c
OBJS=	af.o if.o input.o main.o output.o startup.o tables.o timer.o \
X	trace.o inet.o
HDRS=	af.h defs.h interface.h table.h trace.h
X
all: routed
X
routed:	${OBJS} ${LIBC}
X	${CC} -o $@ ${CFLAGS} ${OBJS}
X
# The following can be deleted where not appropriate to use the kernel's
# inline code expansions.
X.c.o:
X	${CC} -S ${CFLAGS} $*.c
X	${C2} $*.s | ${INLINE} | ${AS} -o $*.o
X	rm -f $*.s
X
clean: FRC
X	rm -f ${OBJS} core routed
X	(cd tools; make ${MFLAGS} clean)
X
depend: FRC
X	mkdep ${CFLAGS} ${SRCS}
X	(cd tools; make ${MFLAGS} depend)
X
install: FRC
X	install -s -o bin -g bin -m 755 routed ${DESTDIR}/etc/routed
X
lint: FRC
X	lint ${CFLAGS} ${SRCS}
X
tags: FRC
X	ctags ${HDRS} ${SRCS}
X	(cd tools; make ${MFLAGS} tags)
X
FRC:
X
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
X
af.o: af.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
af.o: /usr/include/net/route.h /usr/include/netinet/in.h
af.o: /usr/include/protocols/routed.h /usr/include/stdio.h /usr/include/netdb.h
af.o: trace.h interface.h table.h af.h
if.o: if.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
if.o: /usr/include/net/route.h /usr/include/netinet/in.h
if.o: /usr/include/protocols/routed.h /usr/include/stdio.h /usr/include/netdb.h
if.o: trace.h interface.h table.h af.h
input.o: input.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
input.o: /usr/include/net/route.h /usr/include/netinet/in.h
input.o: /usr/include/protocols/routed.h /usr/include/stdio.h
input.o: /usr/include/netdb.h trace.h interface.h table.h af.h
input.o: /usr/include/sys/syslog.h
main.o: main.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
main.o: /usr/include/net/route.h /usr/include/netinet/in.h
main.o: /usr/include/protocols/routed.h /usr/include/stdio.h
main.o: /usr/include/netdb.h trace.h interface.h table.h af.h
main.o: /usr/include/sys/ioctl.h /usr/include/sys/ttychars.h
main.o: /usr/include/sys/ttydev.h /usr/include/sys/time.h /usr/include/time.h
main.o: /usr/include/net/if.h /usr/include/net/if_arp.h
main.o: /usr/include/sys/errno.h /usr/include/sys/signal.h
main.o: /usr/include/machine/trap.h /usr/include/sys/syslog.h
output.o: output.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
output.o: /usr/include/net/route.h /usr/include/netinet/in.h
output.o: /usr/include/protocols/routed.h /usr/include/stdio.h
output.o: /usr/include/netdb.h trace.h interface.h table.h af.h
startup.o: startup.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
startup.o: /usr/include/net/route.h /usr/include/netinet/in.h
startup.o: /usr/include/protocols/routed.h /usr/include/stdio.h
startup.o: /usr/include/netdb.h trace.h interface.h table.h af.h
startup.o: /usr/include/sys/ioctl.h /usr/include/sys/ttychars.h
startup.o: /usr/include/sys/ttydev.h /usr/include/net/if.h
startup.o: /usr/include/net/if_arp.h /usr/include/syslog.h
tables.o: tables.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
tables.o: /usr/include/net/route.h /usr/include/netinet/in.h
tables.o: /usr/include/protocols/routed.h /usr/include/stdio.h
tables.o: /usr/include/netdb.h trace.h interface.h table.h af.h
tables.o: /usr/include/sys/ioctl.h /usr/include/sys/ttychars.h
tables.o: /usr/include/sys/ttydev.h /usr/include/errno.h
tables.o: /usr/include/sys/syslog.h
timer.o: timer.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
timer.o: /usr/include/net/route.h /usr/include/netinet/in.h
timer.o: /usr/include/protocols/routed.h /usr/include/stdio.h
timer.o: /usr/include/netdb.h trace.h interface.h table.h af.h
trace.o: trace.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
trace.o: /usr/include/net/route.h /usr/include/netinet/in.h
trace.o: /usr/include/protocols/routed.h /usr/include/stdio.h
trace.o: /usr/include/netdb.h trace.h interface.h table.h af.h
trace.o: /usr/include/sys/file.h /usr/include/sys/stat.h
trace.o: /usr/include/sys/signal.h /usr/include/machine/trap.h
inet.o: inet.c defs.h /usr/include/sys/types.h /usr/include/sys/socket.h
inet.o: /usr/include/net/route.h /usr/include/netinet/in.h
inet.o: /usr/include/protocols/routed.h /usr/include/stdio.h
inet.o: /usr/include/netdb.h trace.h interface.h table.h af.h
X
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
SHAR_EOF
  $shar_touch -am 0714191488 'vxrouted_5.1.1/BSDrouted/Makefile' &&
  chmod 0444 'vxrouted_5.1.1/BSDrouted/Makefile' ||
  echo 'restore of vxrouted_5.1.1/BSDrouted/Makefile failed'
  shar_count="`wc -c < 'vxrouted_5.1.1/BSDrouted/Makefile'`"
  test 5252 -eq "$shar_count" ||
    echo "vxrouted_5.1.1/BSDrouted/Makefile: original size 5252, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= vxrouted_5.1.1/in_routed ==============
if test -f 'vxrouted_5.1.1/in_routed' && test X"$1" != X"-c"; then
  echo 'x - skipping vxrouted_5.1.1/in_routed (File already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting vxrouted_5.1.1/in_routed (Text)'
  sed 's/^X//' << 'SHAR_EOF' > 'vxrouted_5.1.1/in_routed' &&
Xx#X#@HyXLHxHx/$./+HyTK?X(n/N"n iNNN|ܹXX *x/&n"nNPOJgHnNa/Hy-|-|HnNNa
L<N^NuNVH0 $nXX/N$n`p`L0*NN/9Hy/9Hy/9$nHyNHy0*pЪNt$nGNPOJf B/$nX (X0*Xf @/ ./J#X nX  1f`4rlVzDfHxNNlVzDfHxNNX+@LN^NuNV&n$n&nN^NuNVLN^NuNV$RL<N^Nu@(#) Copyright (c) 1983, 1988 Regents of the University of California.
X All rights reserved.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX%.19s:
XX%.19s:
XXXXXXXXXXXXXoH@tIk۰\YeT.h=y-Ckg.*ʈis]O5oQank6A?"*{"'GXXXXXXXXXXXXX &8tXXXX>zXXXXXXXzXXXlXXXXLX
XXX"*6CQWmain.od_ifinitifwithaddr
SHAR_EOF
  $shar_touch -am 0712080394 'vxrouted_5.1.1/in_routed' &&
  chmod 0644 'vxrouted_5.1.1/in_routed' ||
  echo 'restore of vxrouted_5.1.1/in_routed failed'
  shar_count="`wc -c < 'vxrouted_5.1.1/in_routed'`"
  test 36363 -eq "$shar_count" ||
    echo "vxrouted_5.1.1/in_routed: original size 36363, current size $shar_count"
  rm -f _sharnew.tmp
fi
rm -f _sharseq.tmp
echo 'You have unpacked the last part'
exit 0
