BSD 4_1c_2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Sun, 27 Mar 1983 02:57:45 +0000 (18:57 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Sun, 27 Mar 1983 02:57:45 +0000 (18:57 -0800)
Work on file a/sys/netinet/in.c

Synthesized-from: CSRG/cd1/4.1c.2

a/sys/netinet/in.c [new file with mode: 0644]

diff --git a/a/sys/netinet/in.c b/a/sys/netinet/in.c
new file mode 100644 (file)
index 0000000..e947bc7
--- /dev/null
@@ -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