From: CSRG Date: Sun, 27 Mar 1983 02:57:45 +0000 (-0800) Subject: BSD 4_1c_2 development X-Git-Tag: BSD-4_1c_2~29 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/cb4ea8b2072afb82ddc0e865919e1b15e8884de2 BSD 4_1c_2 development Work on file a/sys/netinet/in.c Synthesized-from: CSRG/cd1/4.1c.2 --- diff --git a/a/sys/netinet/in.c b/a/sys/netinet/in.c new file mode 100644 index 0000000000..e947bc7b3e --- /dev/null +++ b/a/sys/netinet/in.c @@ -0,0 +1,101 @@ +/* in.c 4.12 83/03/14 */ + +#include "../h/param.h" +#include "../h/mbuf.h" +#include "../h/protosw.h" +#include "../h/socket.h" +#include "../h/socketvar.h" +#include "../netinet/in.h" +#include "../netinet/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; +{ + + 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_makeaddr(net, host) + int net, host; +{ + u_long addr; + + if (net < 128) + addr = (net << IN_CLASSA_NSHIFT) | host; + else if (net < 65536) + addr = (net << IN_CLASSB_NSHIFT) | host; + else + addr = (net << IN_CLASSC_NSHIFT) | host; + addr = htonl(addr); + return (*(struct in_addr *)&addr); +} + +/* + * Return the network number from an internet address. + */ +in_netof(in) + struct in_addr in; +{ + register u_long i = ntohl(in.s_addr); + + if (IN_CLASSA(i)) + return (((i)&IN_CLASSA_NET) >> IN_CLASSA_NSHIFT); + else if (IN_CLASSB(i)) + return (((i)&IN_CLASSB_NET) >> IN_CLASSB_NSHIFT); + else + return (((i)&IN_CLASSC_NET) >> IN_CLASSC_NSHIFT); +} + +/* + * Return the host portion of an internet address. + */ +in_lnaof(in) + struct in_addr in; +{ + register u_long i = ntohl(in.s_addr); + + if (IN_CLASSA(i)) + return ((i)&IN_CLASSA_HOST); + else if (IN_CLASSB(i)) + return ((i)&IN_CLASSB_HOST); + else + return ((i)&IN_CLASSC_HOST); +} + +/* + * 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(ifp->if_net, INADDR_ANY); + rtinit((struct sockaddr *)&sin, &ifp->if_addr, flags); +} +#endif