clean up some stuff; map broadcast addresses to interface values
[unix-history] / usr / src / sys / netinet / in.c
index 441b87d..74108f6 100644 (file)
@@ -1,12 +1,14 @@
-/*     in.c    4.1     82/06/13        */
+/*     in.c    4.11    82/11/13        */
 
 #include "../h/param.h"
 #include "../h/mbuf.h"
 #include "../h/protosw.h"
 #include "../h/socket.h"
 #include "../h/socketvar.h"
 
 #include "../h/param.h"
 #include "../h/mbuf.h"
 #include "../h/protosw.h"
 #include "../h/socket.h"
 #include "../h/socketvar.h"
-#include "../net/in.h"
-#include "../net/in_systm.h"
+#include "../netinet/in.h"
+#include "../netinet/in_systm.h"
+#include "../net/if.h"
+#include "../net/route.h"
 #include "../net/af.h"
 
 #ifdef INET
 #include "../net/af.h"
 
 #ifdef INET
@@ -14,17 +16,15 @@ inet_hash(sin, hp)
        register struct sockaddr_in *sin;
        struct afhash *hp;
 {
        register struct sockaddr_in *sin;
        struct afhash *hp;
 {
-COUNT(INET_HASH);
+
        hp->afh_nethash = in_netof(sin->sin_addr);
        hp->afh_hosthash = ntohl(sin->sin_addr.s_addr);
        hp->afh_nethash = in_netof(sin->sin_addr);
        hp->afh_hosthash = ntohl(sin->sin_addr.s_addr);
-       if (hp->afh_hosthash < 0)
-               hp->afh_hosthash = -hp->afh_hosthash;
 }
 
 inet_netmatch(sin1, sin2)
        struct sockaddr_in *sin1, *sin2;
 {
 }
 
 inet_netmatch(sin1, sin2)
        struct sockaddr_in *sin1, *sin2;
 {
-COUNT(INET_NETMATCH);
+
        return (sin1->sin_addr.s_net == sin2->sin_addr.s_net);
 }
 
        return (sin1->sin_addr.s_net == sin2->sin_addr.s_net);
 }
 
@@ -38,40 +38,46 @@ if_makeaddr(net, host)
 {
        u_long addr;
 
 {
        u_long addr;
 
-COUNT(IF_MAKEADDR);
        if (net < 128)
        if (net < 128)
-               addr = (net << 24) | host;
+               addr = (net << IN_CLASSA_NSHIFT) | host;
        else if (net < 65536)
        else if (net < 65536)
-               addr = (net << 16) | host;
+               addr = (net << IN_CLASSB_NSHIFT) | host;
        else
        else
-               addr = (net << 8) | host;
-#ifdef vax
+               addr = (net << IN_CLASSC_NSHIFT) | host;
        addr = htonl(addr);
        addr = htonl(addr);
-#endif
        return (*(struct in_addr *)&addr);
 }
 
 /*
        return (*(struct in_addr *)&addr);
 }
 
 /*
- * Return the network number from an internet
- * address; handles class a/b/c network #'s.
+ * Return the network number from an internet address.
  */
 in_netof(in)
        struct in_addr in;
 {
  */
 in_netof(in)
        struct in_addr in;
 {
+       register u_long i = ntohl(in.s_addr);
 
 
-       return (IN_NETOF(in));
+       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 local network address portion of an
- * internet address; handles class a/b/c network
- * number formats.
+ * Return the host portion of an internet address.
  */
 in_lnaof(in)
        struct in_addr in;
 {
  */
 in_lnaof(in)
        struct in_addr in;
 {
+       register u_long i = ntohl(in.s_addr);
 
 
-       return (IN_LNAOF(in));
+       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);
 }
 
 /*
 }
 
 /*
@@ -85,12 +91,11 @@ if_rtinit(ifp, flags)
 {
        struct sockaddr_in sin;
 
 {
        struct sockaddr_in sin;
 
-COUNT(IF_RTINIT);
        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, 0);
        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, 0);
-       rtinit(&sin, &ifp->if_addr, flags);
+       rtinit((struct sockaddr *)&sin, &ifp->if_addr, flags);
 }
 #endif
 }
 #endif