/* in.c 4.3 82/06/20 */ #include "sys/param.h" #include "sys/config.h" #include "sys/errno.h" #include "sys/types.h" #include "sys/systm.h" #include "net/misc.h" #include "net/mbuf.h" #include "net/protosw.h" #include "net/socket.h" #include "net/socketvar.h" #include "net/in.h" #include "net/in_systm.h" #include "net/if.h" #include "net/route.h" #include "net/af.h" #ifdef INET inet_hash(sin, hp) register struct sockaddr_in *sin; struct afhash *hp; { #ifdef ELEVEN long l; l = in_netof(sin->sin_addr); hp->afh_nethash = ((int)l ^ (int)(l>>16)) & 077777; l = sin->sin_addr.s_addr; hp->afh_hosthash = ((int)l ^ (int)(l>>16)) & 077777; if (hp->afh_hosthash < 0) hp->afh_hosthash = -hp->afh_hosthash; #endif hp->afh_nethash = in_netof(sin->sin_addr); hp->afh_hosthash = ntohl(sin->sin_addr.s_addr); } inet_netmatch(sin1, sin2) struct sockaddr_in *sin1, *sin2; { return (in_netof(sin1->sin_addr) == in_netof(sin2->sin_addr)); } /* * Formulate an Internet address from network + host. Used in * building addresses stored in the ifnet structure. */ struct in_addr if_mkaddr(net, host) u_long net,host; { u_long addr; addr = htonl(host) | net; return (*(struct in_addr *)&addr); } /* billn -- for transition */ #undef if_makeaddr(x,y) struct in_addr if_makeaddr(n, h) u_long n, h; { return (if_mkaddr(n, h)); } /* * Return the network number from an internet * address; handles class a/b/c network #'s. */ u_long in_netof(in) struct in_addr in; { return (IN_NETOF(in)); } /* * Return the local network address portion of an * internet address; handles class a/b/c network * number formats. */ u_long in_lnaof(in) struct in_addr in; { return (IN_LNAOF(in)); } /* * Initialize an interface's routing * table entry according to the network. * INTERNET SPECIFIC. */ if_rtinit(ifp, flags) register struct ifnet *ifp; int flags; { struct sockaddr_in sin; if (ifp->if_flags & IFF_ROUTE) return; bzero((caddr_t)&sin, sizeof (sin)); sin.sin_family = AF_INET; sin.sin_addr = if_makeaddr((u_long)ifp->if_net, (u_long)0); rtinit((struct sockaddr *)&sin, &ifp->if_addr, flags); } #endif