|
|
1.1 ! root 1: /* in.c 6.1 83/07/29 */ ! 2: ! 3: #include "../h/param.h" ! 4: #include "../h/mbuf.h" ! 5: #include "../h/protosw.h" ! 6: #include "../h/socket.h" ! 7: #include "../h/socketvar.h" ! 8: #include "../netinet/in.h" ! 9: #include "../netinet/in_systm.h" ! 10: #include "../net/if.h" ! 11: #include "../net/route.h" ! 12: #include "../net/af.h" ! 13: ! 14: #ifdef INET ! 15: inet_hash(sin, hp) ! 16: register struct sockaddr_in *sin; ! 17: struct afhash *hp; ! 18: { ! 19: ! 20: hp->afh_nethash = in_netof(sin->sin_addr); ! 21: hp->afh_hosthash = ntohl(sin->sin_addr.s_addr); ! 22: } ! 23: ! 24: inet_netmatch(sin1, sin2) ! 25: struct sockaddr_in *sin1, *sin2; ! 26: { ! 27: ! 28: return (in_netof(sin1->sin_addr) == in_netof(sin2->sin_addr)); ! 29: } ! 30: ! 31: /* ! 32: * Formulate an Internet address from network + host. Used in ! 33: * building addresses stored in the ifnet structure. ! 34: */ ! 35: struct in_addr ! 36: if_makeaddr(net, host) ! 37: int net, host; ! 38: { ! 39: u_long addr; ! 40: ! 41: if (net < 128) ! 42: addr = (net << IN_CLASSA_NSHIFT) | host; ! 43: else if (net < 65536) ! 44: addr = (net << IN_CLASSB_NSHIFT) | host; ! 45: else ! 46: addr = (net << IN_CLASSC_NSHIFT) | host; ! 47: addr = htonl(addr); ! 48: return (*(struct in_addr *)&addr); ! 49: } ! 50: ! 51: /* ! 52: * Return the network number from an internet address. ! 53: */ ! 54: in_netof(in) ! 55: struct in_addr in; ! 56: { ! 57: register u_long i = ntohl(in.s_addr); ! 58: ! 59: if (IN_CLASSA(i)) ! 60: return (((i)&IN_CLASSA_NET) >> IN_CLASSA_NSHIFT); ! 61: else if (IN_CLASSB(i)) ! 62: return (((i)&IN_CLASSB_NET) >> IN_CLASSB_NSHIFT); ! 63: else ! 64: return (((i)&IN_CLASSC_NET) >> IN_CLASSC_NSHIFT); ! 65: } ! 66: ! 67: /* ! 68: * Return the host portion of an internet address. ! 69: */ ! 70: in_lnaof(in) ! 71: struct in_addr in; ! 72: { ! 73: register u_long i = ntohl(in.s_addr); ! 74: ! 75: if (IN_CLASSA(i)) ! 76: return ((i)&IN_CLASSA_HOST); ! 77: else if (IN_CLASSB(i)) ! 78: return ((i)&IN_CLASSB_HOST); ! 79: else ! 80: return ((i)&IN_CLASSC_HOST); ! 81: } ! 82: ! 83: /* ! 84: * Initialize an interface's routing ! 85: * table entry according to the network. ! 86: * INTERNET SPECIFIC. ! 87: */ ! 88: if_rtinit(ifp, flags) ! 89: register struct ifnet *ifp; ! 90: int flags; ! 91: { ! 92: struct sockaddr_in sin; ! 93: ! 94: if (ifp->if_flags & IFF_ROUTE) ! 95: return; ! 96: bzero((caddr_t)&sin, sizeof (sin)); ! 97: sin.sin_family = AF_INET; ! 98: sin.sin_addr = if_makeaddr(ifp->if_net, INADDR_ANY); ! 99: rtinit((struct sockaddr *)&sin, &ifp->if_addr, flags); ! 100: } ! 101: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.