1*8937Sroot /* in.c 4.10 82/10/30 */ 27159Ssam 37159Ssam #include "../h/param.h" 47159Ssam #include "../h/mbuf.h" 57159Ssam #include "../h/protosw.h" 67159Ssam #include "../h/socket.h" 77159Ssam #include "../h/socketvar.h" 88397Swnj #include "../netinet/in.h" 98397Swnj #include "../netinet/in_systm.h" 107166Ssam #include "../net/if.h" 117166Ssam #include "../net/route.h" 127159Ssam #include "../net/af.h" 137159Ssam 147159Ssam #ifdef INET 157159Ssam inet_hash(sin, hp) 167159Ssam register struct sockaddr_in *sin; 177159Ssam struct afhash *hp; 187159Ssam { 198595Sroot 207159Ssam hp->afh_nethash = in_netof(sin->sin_addr); 21*8937Sroot hp->afh_hosthash = ntohl(sin->sin_addr.s_addr); 227159Ssam } 237159Ssam 247159Ssam inet_netmatch(sin1, sin2) 257159Ssam struct sockaddr_in *sin1, *sin2; 267159Ssam { 278595Sroot 287159Ssam return (sin1->sin_addr.s_net == sin2->sin_addr.s_net); 297159Ssam } 307159Ssam 317159Ssam /* 327159Ssam * Formulate an Internet address from network + host. Used in 337159Ssam * building addresses stored in the ifnet structure. 347159Ssam */ 357159Ssam struct in_addr 367159Ssam if_makeaddr(net, host) 377159Ssam int net, host; 387159Ssam { 397159Ssam u_long addr; 407159Ssam 417159Ssam if (net < 128) 428694Sroot addr = (net << IN_CLASSA_NSHIFT) | host; 437159Ssam else if (net < 65536) 448694Sroot addr = (net << IN_CLASSB_NSHIFT) | host; 457159Ssam else 468694Sroot addr = (net << IN_CLASSC_NSHIFT) | host; 477159Ssam addr = htonl(addr); 487159Ssam return (*(struct in_addr *)&addr); 497159Ssam } 507159Ssam 517159Ssam /* 528595Sroot * Return the network number from an internet address. 537159Ssam */ 547159Ssam in_netof(in) 557159Ssam struct in_addr in; 567159Ssam { 57*8937Sroot register u_long i = ntohl(in.s_addr); 587159Ssam 598595Sroot if (IN_CLASSA(i)) 608694Sroot return (((i)&IN_CLASSA_NET) >> IN_CLASSA_NSHIFT); 618595Sroot else if (IN_CLASSB(i)) 628694Sroot return (((i)&IN_CLASSB_NET) >> IN_CLASSB_NSHIFT); 638595Sroot else 648694Sroot return (((i)&IN_CLASSC_NET) >> IN_CLASSC_NSHIFT); 657159Ssam } 667159Ssam 678775Sroot #ifdef notdef 687159Ssam /* 698595Sroot * Return the host portion of an internet address. 707159Ssam */ 717159Ssam in_lnaof(in) 727159Ssam struct in_addr in; 737159Ssam { 74*8937Sroot register u_long i = ntohl(in.s_addr); 757159Ssam 768595Sroot if (IN_CLASSA(i)) 778694Sroot return ((i)&IN_CLASSA_HOST); 788595Sroot else if (IN_CLASSB(i)) 798694Sroot return ((i)&IN_CLASSB_HOST); 808595Sroot else 818694Sroot return ((i)&IN_CLASSC_HOST); 827159Ssam } 838724Sroot #endif 847159Ssam 857159Ssam /* 867159Ssam * Initialize an interface's routing 877159Ssam * table entry according to the network. 887159Ssam * INTERNET SPECIFIC. 897159Ssam */ 907159Ssam if_rtinit(ifp, flags) 917159Ssam register struct ifnet *ifp; 927159Ssam int flags; 937159Ssam { 947159Ssam struct sockaddr_in sin; 957159Ssam 967159Ssam if (ifp->if_flags & IFF_ROUTE) 977159Ssam return; 987159Ssam bzero((caddr_t)&sin, sizeof (sin)); 997159Ssam sin.sin_family = AF_INET; 1007159Ssam sin.sin_addr = if_makeaddr(ifp->if_net, 0); 1018637Sroot rtinit((struct sockaddr *)&sin, &ifp->if_addr, flags); 1027159Ssam } 1037159Ssam #endif 104