#include "../h/protosw.h"
#include "../h/socketvar.h"
#include "../netinet/in.h"
#include "../netinet/in_systm.h"
#include "../net/route.h"
register struct sockaddr_in
*sin
;
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.
addr
= (net
<< IN_CLASSA_NSHIFT
) | host
;
else if (net
< IN_CLASSB_MAX
)
addr
= (net
<< IN_CLASSB_NSHIFT
) | host
;
addr
= (net
<< IN_CLASSC_NSHIFT
) | host
;
return (*(struct in_addr
*)&addr
);
* Return the network number from an internet address.
register u_long i
= ntohl(in
.s_addr
);
register u_long net
, subnet
;
register struct ifnet
*ifp
;
net
= (i
& IN_CLASSA_NET
) >> IN_CLASSA_NSHIFT
;
subnet
= (i
& IN_CLASSA_SUBNET
) >> IN_CLASSA_SUBNSHIFT
;
/* Fall through and check whether a subnet */
} else if (IN_CLASSB(i
)) {
net
= (i
& IN_CLASSB_NET
) >> IN_CLASSB_NSHIFT
;
subnet
= (i
& IN_CLASSB_SUBNET
) >> IN_CLASSB_SUBNSHIFT
;
/* Fall through and check whether a subnet */
return ((i
& IN_CLASSC_NET
) >> IN_CLASSC_NSHIFT
);
* Check whether network is a subnet of a `local' network;
* if so, return subnet number.
for (ifp
= ifnet
; ifp
; ifp
= ifp
->if_next
) {
if (ifp
->if_addr
.sa_family
!= AF_INET
)
if (ifp
->if_flags
& IFF_LOCAL
) {
if ((ifp
->if_net
>> SUBNETSHIFT
) == net
)
* Hack for use in setting if_net initially.
register struct sockaddr_in
*sin
;
sin
= (struct sockaddr_in
*) &ifp
->if_addr
;
if (sin
->sin_addr
.s_addr
== in
.s_addr
)
* Return the host portion of an internet address.
register u_long i
= ntohl(in
.s_addr
);
register u_long net
, host
, subhost
;
register struct ifnet
*ifp
;
net
= (i
& IN_CLASSA_NET
) >> IN_CLASSA_NSHIFT
;
host
= i
& IN_CLASSA_HOST
;
subhost
= i
& IN_CLASSA_SUBHOST
;
/* Fall through and check whether a subnet */
return (i
& IN_CLASSA_HOST
);
} else if (IN_CLASSB(i
)) {
net
= (i
& IN_CLASSB_NET
) >> IN_CLASSB_NSHIFT
;
host
= i
& IN_CLASSB_HOST
;
subhost
= i
& IN_CLASSB_SUBHOST
;
/* Fall through and check whether a subnet */
return (i
& IN_CLASSB_HOST
);
return (i
& IN_CLASSC_HOST
);
* Check whether network is a subnet of a `local' network;
* if so, use the modified interpretation of `host'.
for (ifp
= ifnet
; ifp
; ifp
= ifp
->if_next
) {
if (ifp
->if_addr
.sa_family
!= AF_INET
)
if (ifp
->if_flags
& IFF_LOCAL
) {
if ((ifp
->if_net
>> SUBNETSHIFT
) == net
)
* Initialize an interface's routing
* table entry according to the network.
register struct ifnet
*ifp
;
if (ifp
->if_flags
& IFF_ROUTE
)
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
);