-/*
- * Compute and save network mask as sockaddr from an internet address.
- */
-in_sockmaskof(in, sockmask)
- struct in_addr in;
- register struct sockaddr_in *sockmask;
-{
- register u_long net;
- register u_long mask;
- {
- register u_long i = ntohl(in.s_addr);
-
- if (i == 0)
- net = 0, mask = 0;
- else if (IN_CLASSA(i))
- net = i & IN_CLASSA_NET, mask = IN_CLASSA_NET;
- else if (IN_CLASSB(i))
- net = i & IN_CLASSB_NET, mask = IN_CLASSB_NET;
- else if (IN_CLASSC(i))
- net = i & IN_CLASSC_NET, mask = IN_CLASSC_NET;
- else
- net = i, mask = -1;
- }
- {
- register struct in_ifaddr *ia;
- /*
- * Check whether network is a subnet;
- * if so, return subnet number.
- */
- for (ia = in_ifaddr; ia; ia = ia->ia_next)
- if (net == ia->ia_net)
- mask = ia->ia_subnetmask;
- }
- {
- register char *cpbase = (char *)&(sockmask->sin_addr);
- register char *cp = (char *)(1 + &(sockmask->sin_addr));
-
- sockmask->sin_addr.s_addr = htonl(mask);
- sockmask->sin_len = 0;
- while (--cp >= cpbase)
- if (*cp) {
- sockmask->sin_len = 1 + cp - (caddr_t)sockmask;
- break;
- }
- }
-}
-
-/*
- * Return the host portion of an internet address.
- */
-u_long
-in_lnaof(in)
- struct in_addr in;
-{
- register u_long i = ntohl(in.s_addr);
- register u_long net, host;
- register struct in_ifaddr *ia;
-
- if (IN_CLASSA(i)) {
- net = i & IN_CLASSA_NET;
- host = i & IN_CLASSA_HOST;
- } else if (IN_CLASSB(i)) {
- net = i & IN_CLASSB_NET;
- host = i & IN_CLASSB_HOST;
- } else if (IN_CLASSC(i)) {
- net = i & IN_CLASSC_NET;
- host = i & IN_CLASSC_HOST;
- } else
- return (i);
-
- /*
- * Check whether network is a subnet;
- * if so, use the modified interpretation of `host'.
- */
- for (ia = in_ifaddr; ia; ia = ia->ia_next)
- if (net == ia->ia_net)
- return (host &~ ia->ia_subnetmask);
- return (host);
-}
-