lint
[unix-history] / usr / src / sys / netinet / in.c
/* in.c 4.6 82/10/17 */
#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 (sin1->sin_addr.s_net == sin2->sin_addr.s_net);
}
/*
* 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_CLASSANSHIFT) | host;
else if (net < 65536)
addr = (net << IN_CLASSBNSHIFT) | host;
else
addr = (net << IN_CLASSCNSHIFT) | host;
#ifdef vax || pdp11 || ns16032
addr = htonl(addr);
#endif
return (*(struct in_addr *)&addr);
}
/*
* Return the network number from an internet address.
*/
in_netof(in)
struct in_addr in;
{
register u_int i = in.s_addr;
#ifdef vax || pdp11 || ns16032
i = ntohl(i);
#endif
if (IN_CLASSA(i))
return (((i)&IN_CLASSANET) >> IN_CLASSANSHIFT);
else if (IN_CLASSB(i))
return (((i)&IN_CLASSBNET) >> IN_CLASSBNSHIFT);
else
return (((i)&IN_CLASSCNET) >> IN_CLASSCNSHIFT);
}
/*
* Return the host portion of an internet address.
*/
in_lnaof(in)
struct in_addr in;
{
register u_int i = in.s_addr;
#ifdef vax || pdp11 || ns16032
i = ntohl(i);
#endif
if (IN_CLASSA(i))
return ((i)&IN_CLASSAHOST);
else if (IN_CLASSB(i))
return ((i)&IN_CLASSBHOST);
else
return ((i)&IN_CLASSCHOST);
}
/*
* 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, 0);
rtinit((struct sockaddr *)&sin, &ifp->if_addr, flags);
}
#endif