Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/in.c
Show First 20 Lines • Show All 407 Lines • ▼ Show 20 Lines | in_aifaddr_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp, struct thread *td) | ||||
ia->ia_ifp = ifp; | ia->ia_ifp = ifp; | ||||
ia->ia_addr = *addr; | ia->ia_addr = *addr; | ||||
if (mask->sin_len != 0) { | if (mask->sin_len != 0) { | ||||
ia->ia_sockmask = *mask; | ia->ia_sockmask = *mask; | ||||
ia->ia_subnetmask = ntohl(ia->ia_sockmask.sin_addr.s_addr); | ia->ia_subnetmask = ntohl(ia->ia_sockmask.sin_addr.s_addr); | ||||
} else { | } else { | ||||
in_addr_t i = ntohl(addr->sin_addr.s_addr); | in_addr_t i = ntohl(addr->sin_addr.s_addr); | ||||
/* Assume host address if netmask is not specified */ | |||||
/* | ia->ia_subnetmask = INADDR_BROADCAST; | ||||
* Be compatible with network classes, if netmask isn't | |||||
* supplied, guess it based on classes. | |||||
*/ | |||||
if (IN_CLASSA(i)) | |||||
ia->ia_subnetmask = IN_CLASSA_NET; | |||||
else if (IN_CLASSB(i)) | |||||
ia->ia_subnetmask = IN_CLASSB_NET; | |||||
else | |||||
ia->ia_subnetmask = IN_CLASSC_NET; | |||||
ia->ia_sockmask.sin_addr.s_addr = htonl(ia->ia_subnetmask); | ia->ia_sockmask.sin_addr.s_addr = htonl(ia->ia_subnetmask); | ||||
} | } | ||||
ia->ia_subnet = ntohl(addr->sin_addr.s_addr) & ia->ia_subnetmask; | ia->ia_subnet = ntohl(addr->sin_addr.s_addr) & ia->ia_subnetmask; | ||||
in_socktrim(&ia->ia_sockmask); | in_socktrim(&ia->ia_sockmask); | ||||
if (ifp->if_flags & IFF_BROADCAST) { | if (ifp->if_flags & IFF_BROADCAST) { | ||||
if (broadaddr->sin_len != 0) { | if (broadaddr->sin_len != 0) { | ||||
ia->ia_broadaddr = *broadaddr; | ia->ia_broadaddr = *broadaddr; | ||||
▲ Show 20 Lines • Show All 1,277 Lines • Show Last 20 Lines |