a version stamp to allow future changes
SCCS-vsn: sbin/routed/af.c 4.11
SCCS-vsn: sbin/routed/if.c 4.3
SCCS-vsn: sbin/routed/input.c 4.4
SCCS-vsn: sbin/routed/main.c 4.5
SCCS-vsn: sbin/routed/output.c 4.3
SCCS-vsn: include/protocols/routed.h 4.9
SCCS-vsn: sbin/routed/startup.c 4.4
SCCS-vsn: sbin/routed/tables.c 4.3
SCCS-vsn: sbin/routed/timer.c 4.3
SCCS-vsn: sbin/routed/trace.c 4.3
SCCS-vsn: sbin/routed/trace.h 4.3
-/* routed.h 82/08/18 4.8 */
+/* routed.h 83/05/25 4.9 */
/*
* Routing Information Protocol
*
/*
* Routing Information Protocol
*
* by changing 32-bit net numbers to sockaddr's and
* padding stuff to 32-bit boundaries.
*/
* by changing 32-bit net numbers to sockaddr's and
* padding stuff to 32-bit boundaries.
*/
struct netinfo {
struct sockaddr rip_dst; /* destination net/host */
int rip_metric; /* cost of route */
struct netinfo {
struct sockaddr rip_dst; /* destination net/host */
int rip_metric; /* cost of route */
struct rip {
u_char rip_cmd; /* request/response */
struct rip {
u_char rip_cmd; /* request/response */
- u_char rip_res1[3]; /* pad to 32-bit boundary */
+ u_char rip_vers; /* protocol version # */
+ u_char rip_res1[2]; /* pad to 32-bit boundary */
union {
struct netinfo ru_nets[1]; /* variable length... */
char ru_tracefile[1]; /* ditto ... */
union {
struct netinfo ru_nets[1]; /* variable length... */
char ru_tracefile[1]; /* ditto ... */
#define rip_tracefile ripun.ru_tracefile
};
#define rip_tracefile ripun.ru_tracefile
};
+/*
+ * Packet types.
+ */
#define RIPCMD_REQUEST 1 /* want info */
#define RIPCMD_RESPONSE 2 /* responding to request */
#define RIPCMD_TRACEON 3 /* turn tracing on */
#define RIPCMD_REQUEST 1 /* want info */
#define RIPCMD_RESPONSE 2 /* responding to request */
#define RIPCMD_TRACEON 3 /* turn tracing on */
-static char sccsid[] = "@(#)af.c 4.10 %G%";
+static char sccsid[] = "@(#)af.c 4.11 (Berkeley) %G%";
-static char sccsid[] = "@(#)if.c 4.2 %G%";
+static char sccsid[] = "@(#)if.c 4.3 (Berkeley) %G%";
-static char sccsid[] = "@(#)input.c 4.3 %G%";
+static char sccsid[] = "@(#)input.c 4.4 (Berkeley) %G%";
break;
size -= sizeof (struct netinfo);
break;
size -= sizeof (struct netinfo);
+#ifdef notyet
+ if (msg->rip_vers > 0) {
+ n->rip_dst.sa_family =
+ ntohs(n->rip_dst.sa_family);
+ n->rip_metric = ntohl(n->rip_metric);
+ }
+#endif
/*
* A single entry with sa_family == AF_UNSPEC and
* metric ``infinity'' means ``all routes''.
/*
* A single entry with sa_family == AF_UNSPEC and
* metric ``infinity'' means ``all routes''.
rt = rtlookup(&n->rip_dst);
n->rip_metric = rt == 0 ? HOPCNT_INFINITY :
min(rt->rt_metric+1, HOPCNT_INFINITY);
rt = rtlookup(&n->rip_dst);
n->rip_metric = rt == 0 ? HOPCNT_INFINITY :
min(rt->rt_metric+1, HOPCNT_INFINITY);
+#ifdef notyet
+ if (msg->rip_vers > 0) {
+ n->rip_dst.sa_family =
+ htons(n->rip_dst.sa_family);
+ n->rip_metric = htonl(n->rip_metric);
+ }
+#endif
n++, newsize += sizeof (struct netinfo);
}
if (newsize > 0) {
n++, newsize += sizeof (struct netinfo);
}
if (newsize > 0) {
for (; size > 0; size -= sizeof (struct netinfo), n++) {
if (size < sizeof (struct netinfo))
break;
for (; size > 0; size -= sizeof (struct netinfo), n++) {
if (size < sizeof (struct netinfo))
break;
+#ifdef notyet
+ if (msg->rip_vers > 0) {
+ n->rip_dst.sa_family =
+ ntohs(n->rip_dst.sa_family);
+ n->rip_metric = ntohl(n->rip_metric);
+ }
+#endif
if (n->rip_metric >= HOPCNT_INFINITY)
continue;
rt = rtlookup(&n->rip_dst);
if (n->rip_metric >= HOPCNT_INFINITY)
continue;
rt = rtlookup(&n->rip_dst);
-static char sccsid[] = "@(#)main.c 4.4 %G%";
+static char sccsid[] = "@(#)main.c 4.5 (Berkeley) %G%";
for (t = 0; t < 20; t++)
if (t != s)
#ifdef COMPAT
for (t = 0; t < 20; t++)
if (t != s)
#ifdef COMPAT
#endif
(void) close(cc);
(void) open("/", 0);
#endif
(void) close(cc);
(void) open("/", 0);
if (supplier < 0)
supplier = 0;
msg->rip_cmd = RIPCMD_REQUEST;
if (supplier < 0)
supplier = 0;
msg->rip_cmd = RIPCMD_REQUEST;
+ msg->rip_vers = RIPVERSION;
msg->rip_nets[0].rip_dst.sa_family = AF_UNSPEC;
msg->rip_nets[0].rip_metric = HOPCNT_INFINITY;
msg->rip_nets[0].rip_dst.sa_family = AF_UNSPEC;
msg->rip_nets[0].rip_metric = HOPCNT_INFINITY;
+#ifdef notyet
+ msg->rip_nets[0].rip_dst.sa_family = htons(AF_UNSPEC);
+ msg->rip_nets[0].rip_metric = htonl(HOPCNT_INFINITY);
+#endif
toall(sendmsg);
sigset(SIGALRM, timer);
timer();
toall(sendmsg);
sigset(SIGALRM, timer);
timer();
-static char sccsid[] = "@(#)output.c 4.2 %G%";
+static char sccsid[] = "@(#)output.c 4.3 (Berkeley) %G%";
dst = ifp->int_flags & IFF_BROADCAST ? &ifp->int_broadaddr :
ifp->int_flags & IFF_POINTOPOINT ? &ifp->int_dstaddr :
&ifp->int_addr;
dst = ifp->int_flags & IFF_BROADCAST ? &ifp->int_broadaddr :
ifp->int_flags & IFF_POINTOPOINT ? &ifp->int_dstaddr :
&ifp->int_addr;
- flags = ifp->int_flags & IFF_INTERFACE ? SOF_DONTROUTE : 0;
+ flags = ifp->int_flags & IFF_INTERFACE ? MSG_DONTROUTE : 0;
(*f)(dst, flags, ifp);
}
}
(*f)(dst, flags, ifp);
}
}
int (*output)() = afswitch[dst->sa_family].af_output;
msg->rip_cmd = RIPCMD_RESPONSE;
int (*output)() = afswitch[dst->sa_family].af_output;
msg->rip_cmd = RIPCMD_RESPONSE;
+ msg->rip_vers = RIPVERSION;
again:
for (rh = base; rh < &base[ROUTEHASHSIZ]; rh++)
for (rt = rh->rt_forw; rt != (struct rt_entry *)rh; rt = rt->rt_forw) {
again:
for (rh = base; rh < &base[ROUTEHASHSIZ]; rh++)
for (rt = rh->rt_forw; rt != (struct rt_entry *)rh; rt = rt->rt_forw) {
}
n->rip_dst = rt->rt_dst;
n->rip_metric = min(rt->rt_metric + 1, HOPCNT_INFINITY);
}
n->rip_dst = rt->rt_dst;
n->rip_metric = min(rt->rt_metric + 1, HOPCNT_INFINITY);
+#ifdef notyet
+ n->rip_dst.sa_family = htons(n->rip_dst.sa_family);
+ n->rip_metric = htonl(n->rip_metric);
+#endif
-static char sccsid[] = "@(#)startup.c 4.3 %G%";
+static char sccsid[] = "@(#)startup.c 4.4 (Berkeley) %G%";
-static char sccsid[] = "@(#)tables.c 4.2 %G%";
+static char sccsid[] = "@(#)tables.c 4.3 (Berkeley) %G%";
-static char sccsid[] = "@(#)timer.c 4.2 %G%";
+static char sccsid[] = "@(#)timer.c 4.3 (Berkeley) %G%";
if (!supplier || timetobroadcast)
continue;
msg->rip_cmd = RIPCMD_RESPONSE;
if (!supplier || timetobroadcast)
continue;
msg->rip_cmd = RIPCMD_RESPONSE;
+ msg->rip_vers = RIPVERSION;
msg->rip_nets[0].rip_dst = rt->rt_dst;
msg->rip_nets[0].rip_metric =
msg->rip_nets[0].rip_dst = rt->rt_dst;
msg->rip_nets[0].rip_metric =
- min(rt->rt_metric+1, HOPCNT_INFINITY);
+ min(rt->rt_metric+1, HOPCNT_INFINITY);
+#ifdef notyet
+ msg->rip_nets[0].rip_dst.sa_family =
+ htons(msg->rip_nets[0].rip_dst.sa_family);
+ msg->rip_nets[0].rip_metric =
+ htonl(msg->rip_nets[0].rip_metric);
+#endif
-static char sccsid[] = "@(#)trace.c 4.2 %G%";
+static char sccsid[] = "@(#)trace.c 4.3 (Berkeley) %G%";
-/* trace.h 4.2 83/01/31 */
+/* trace.h 4.3 83/05/25 */
/*
* Routing table management daemon.
/*
* Routing table management daemon.
ifp = if_iflookup(src); \
if (ifp) \
trace(&ifp->int_input, src, packet, size, \
ifp = if_iflookup(src); \
if (ifp) \
trace(&ifp->int_input, src, packet, size, \
+ ntohl(ifp->int_metric)); \
} \
if (tracepackets) \
dumppacket(stdout, "from", src, packet, size); \
} \
if (tracepackets) \
dumppacket(stdout, "from", src, packet, size); \