X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/0f4556f12c8f75078501c9d1338ae7648a97f975..95f51977ddc18faa2e212f30c00a39540b39f325:/usr/src/etc/routed/af.c diff --git a/usr/src/etc/routed/af.c b/usr/src/etc/routed/af.c index eef0f3d3ae..d307fcd127 100644 --- a/usr/src/etc/routed/af.c +++ b/usr/src/etc/routed/af.c @@ -1,36 +1,52 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * All rights reserved. The Berkeley software License Agreement + * specifies the terms and conditions for redistribution. + */ + #ifndef lint -static char sccsid[] = "@(#)af.c 4.11 (Berkeley) 5/25/83"; -#endif +static char sccsid[] = "@(#)af.c 5.4 (Berkeley) 4/20/86"; +#endif not lint #include "defs.h" /* * Address family support routines */ -int null_hash(), null_netmatch(), null_output(), - null_portmatch(), null_portcheck(), - null_checkhost(), null_canon(); int inet_hash(), inet_netmatch(), inet_output(), inet_portmatch(), inet_portcheck(), - inet_checkhost(), inet_canon(); -#define NIL \ - { null_hash, null_netmatch, null_output, \ - null_portmatch, null_portcheck, null_checkhost, \ - null_canon } + inet_checkhost(), inet_rtflags(), inet_sendsubnet(), inet_canon(); +char *inet_format(); + +#define NIL { 0 } #define INET \ { inet_hash, inet_netmatch, inet_output, \ inet_portmatch, inet_portcheck, inet_checkhost, \ - inet_canon } + inet_rtflags, inet_sendsubnet, inet_canon, \ + inet_format \ + } + +struct afswitch afswitch[AF_MAX] = { + NIL, /* 0- unused */ + NIL, /* 1- Unix domain, unused */ + INET, /* Internet */ +}; -struct afswitch afswitch[AF_MAX] = - { NIL, NIL, INET, INET, NIL, NIL, NIL, NIL, NIL, NIL, NIL }; +int af_max = sizeof(afswitch) / sizeof(afswitch[0]); + +struct sockaddr_in inet_default = { AF_INET, INADDR_ANY }; inet_hash(sin, hp) register struct sockaddr_in *sin; struct afhash *hp; { + register u_long n; - hp->afh_nethash = inet_netof(sin->sin_addr); + n = inet_netof(sin->sin_addr); + if (n) + while ((n & 0xff) == 0) + n >>= 8; + hp->afh_nethash = n; hp->afh_hosthash = ntohl(sin->sin_addr.s_addr); hp->afh_hosthash &= 0x7fffffff; } @@ -49,10 +65,6 @@ inet_portmatch(sin) register struct sockaddr_in *sin; { -#ifdef COMPAT - if (ntohs(sin->sin_port) == ntohs(sp->s_port) + 1) - return (1); -#endif return (sin->sin_port == sp->s_port); } @@ -91,8 +103,18 @@ inet_output(s, flags, sin, size) inet_checkhost(sin) struct sockaddr_in *sin; { - - return (inet_lnaof(sin->sin_addr) != 0); + u_long i = ntohl(sin->sin_addr.s_addr); + +#define IN_BADCLASS(i) (((long) (i) & 0xe0000000) == 0xe0000000) + + if (IN_BADCLASS(i) || sin->sin_port != 0) + return (0); + if (i != 0 && (i & 0xff000000) == 0) + return (0); + for (i = 0; i < sizeof(sin->sin_zero)/sizeof(sin->sin_zero[0]); i++) + if (sin->sin_zero[i]) + return (0); + return (1); } inet_canon(sin) @@ -102,61 +124,11 @@ inet_canon(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(s, f, a1, n) - int s, f; - struct sockaddr *a1; - int n; -{ - - ; -} - -/*ARGSUSED*/ -null_portmatch(a1) - struct sockaddr *a1; -{ - - return (0); -} - -/*ARGSUSED*/ -null_portcheck(a1) - struct sockaddr *a1; -{ - - return (0); -} - -/*ARGSUSED*/ -null_checkhost(a1) - struct sockaddr *a1; -{ - - return (0); -} - -/*ARGSUSED*/ -null_canon(a1) - struct sockaddr *a1; +char * +inet_format(sin) + struct sockaddr_in *sin; { + char *inet_ntoa(); - ; + return (inet_ntoa(sin->sin_addr)); }