Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet/ip_input.c
Show First 20 Lines • Show All 493 Lines • ▼ Show 20 Lines | if ((m = m_pullup(m, hlen)) == NULL) { | ||||
IPSTAT_INC(ips_badhlen); | IPSTAT_INC(ips_badhlen); | ||||
return; | return; | ||||
} | } | ||||
ip = mtod(m, struct ip *); | ip = mtod(m, struct ip *); | ||||
} | } | ||||
IP_PROBE(receive, NULL, NULL, ip, m->m_pkthdr.rcvif, ip, NULL); | IP_PROBE(receive, NULL, NULL, ip, m->m_pkthdr.rcvif, ip, NULL); | ||||
/* 127/8 must not appear on wire - RFC1122 */ | /* IN_LOOPBACK must not appear on the wire - RFC1122 */ | ||||
ifp = m->m_pkthdr.rcvif; | ifp = m->m_pkthdr.rcvif; | ||||
if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET || | if (IN_LOOPBACK(ntohl(ip->ip_dst.s_addr)) || | ||||
(ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) { | IN_LOOPBACK(ntohl(ip->ip_src.s_addr))) { | ||||
if ((ifp->if_flags & IFF_LOOPBACK) == 0) { | if ((ifp->if_flags & IFF_LOOPBACK) == 0) { | ||||
IPSTAT_INC(ips_badaddr); | IPSTAT_INC(ips_badaddr); | ||||
goto bad; | goto bad; | ||||
} | } | ||||
} | } | ||||
if (m->m_pkthdr.csum_flags & CSUM_IP_CHECKED) { | if (m->m_pkthdr.csum_flags & CSUM_IP_CHECKED) { | ||||
sum = !(m->m_pkthdr.csum_flags & CSUM_IP_VALID); | sum = !(m->m_pkthdr.csum_flags & CSUM_IP_VALID); | ||||
▲ Show 20 Lines • Show All 919 Lines • Show Last 20 Lines |