From 85bbbfa450113727532984633333175ed6d16011 Mon Sep 17 00:00:00 2001 From: Sam Leffler Date: Sun, 23 May 1982 05:26:16 -0800 Subject: [PATCH] date and time created 82/05/22 22:26:16 by sam SCCS-vsn: sbin/routed/af.c 4.1 --- usr/src/sbin/routed/af.c | 139 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 usr/src/sbin/routed/af.c diff --git a/usr/src/sbin/routed/af.c b/usr/src/sbin/routed/af.c new file mode 100644 index 0000000000..e409215690 --- /dev/null +++ b/usr/src/sbin/routed/af.c @@ -0,0 +1,139 @@ +#ifndef lint +static char sccsid[] = "@(#)af.c 4.1 %G%"; +#endif + +#include +#include +#include + +#include "router.h" +#include "rip.h" + +/* + * Address family support routines + */ +int null_hash(), null_netmatch(), null_output(), + null_portmatch(), null_checkhost(), null_canon(); +int inet_hash(), inet_netmatch(), inet_output(), + inet_portmatch(), inet_checkhost(), inet_canon(); +#define NIL \ + { null_hash, null_netmatch, null_output, \ + null_portmatch, null_checkhost, null_canon } +#define INET \ + { inet_hash, inet_netmatch, inet_output, \ + inet_portmatch, inet_checkhost, inet_canon } + +struct afswitch afswitch[AF_MAX] = + { NIL, NIL, INET, INET, NIL, NIL, NIL, NIL, NIL, NIL, NIL }; + +inet_hash(sin, hp) + register struct sockaddr_in *sin; + struct afhash *hp; +{ + + hp->afh_nethash = sin->sin_addr.s_net; + hp->afh_hosthash = ntohl(sin->sin_addr.s_addr); +} + +inet_netmatch(sin1, sin2) + struct sockaddr_in *sin1, *sin2; +{ + + return (sin1->sin_addr.s_net == sin2->sin_addr.s_net); +} + +/* + * Verify the message is from the right port. + */ +inet_portmatch(sin) + struct sockaddr_in *sin; +{ + int port = ntohs(sin->sin_port); + + return (port == IPPORT_ROUTESERVER); +} + +/* + * Internet output routine. + */ +inet_output(sin, size) + struct sockaddr_in *sin; + int size; +{ + extern int s; + extern char packet[MAXPACKETSIZE]; + struct sockaddr_in dst; + + dst = *sin; + sin = &dst; + if (sin->sin_port == 0) + sin->sin_port = htons(IPPORT_ROUTESERVER); + if (send(s, sin, packet, size) < 0) + perror("send"); +} + +/* + * Return 1 if the address is for an Internet host, + * otherwise assume it's a network address (broadcast). + */ +inet_checkhost(sin) + struct sockaddr_in *sin; +{ + extern struct in_addr if_makeaddr(); + struct in_addr netaddr; + + netaddr = if_makeaddr((int)sin->sin_addr.s_net, INADDR_ANY); + return (netaddr.s_addr != sin->sin_addr.s_addr); +} + +inet_canon(sin) + struct sockaddr_in *sin; +{ + sin->sin_port = 0; +} + +/*ARGSUSED*/ +null_hash(addr, hp) + struct sockaddr *addr; + struct afhash *hp; +{ + + hp->afh_nethash = hp->afh_hosthash = 0; +} + +/*ARGSUSED*/ +null_netmatch(a1, a2) + struct sockaddr *a1, *a2; +{ + + return (0); +} + +/*ARGSUSED*/ +null_output(a1, n) + struct sockaddr *a1; + int n; +{ + ; +} + +/*ARGSUSED*/ +null_portmatch(a1) + struct sockaddr *a1; +{ + return (0); +} + +/*ARGSUSED*/ +null_checkhost(a1) + struct sockaddr *a1; +{ + return (0); +} + +/*ARGSUSED*/ +null_canon(a1) + struct sockaddr *a1; +{ + ; +} -- 2.20.1