Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet/in.c
Show First 20 Lines • Show All 185 Lines • ▼ Show 20 Lines | |||||
* Determine whether an IP address is in a reserved set of addresses | * Determine whether an IP address is in a reserved set of addresses | ||||
* that may not be forwarded, or whether datagrams to that destination | * that may not be forwarded, or whether datagrams to that destination | ||||
* may be forwarded. | * may be forwarded. | ||||
*/ | */ | ||||
int | int | ||||
in_canforward(struct in_addr in) | in_canforward(struct in_addr in) | ||||
{ | { | ||||
u_long i = ntohl(in.s_addr); | u_long i = ntohl(in.s_addr); | ||||
u_long net; | |||||
if (IN_EXPERIMENTAL(i) || IN_MULTICAST(i) || IN_LINKLOCAL(i)) | if (IN_EXPERIMENTAL(i) || IN_MULTICAST(i) || IN_LINKLOCAL(i) || | ||||
IN_ZERONET(i) || IN_LOOPBACK(i)) | |||||
return (0); | return (0); | ||||
if (IN_CLASSA(i)) { | |||||
net = i & IN_CLASSA_NET; | |||||
if (net == 0 || net == (IN_LOOPBACKNET << IN_CLASSA_NSHIFT)) | |||||
return (0); | |||||
} | |||||
return (1); | return (1); | ||||
} | } | ||||
/* | /* | ||||
* Trim a mask in a sockaddr | * Trim a mask in a sockaddr | ||||
*/ | */ | ||||
static void | static void | ||||
in_socktrim(struct sockaddr_in *ap) | in_socktrim(struct sockaddr_in *ap) | ||||
▲ Show 20 Lines • Show All 1,312 Lines • Show Last 20 Lines |