Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/ip_fastfwd.c
Show First 20 Lines • Show All 391 Lines • ▼ Show 20 Lines | passout: | ||||
* Check if media link state of interface is not down | * Check if media link state of interface is not down | ||||
*/ | */ | ||||
if (ifp->if_link_state == LINK_STATE_DOWN) { | if (ifp->if_link_state == LINK_STATE_DOWN) { | ||||
icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_HOST, 0, 0); | icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_HOST, 0, 0); | ||||
goto consumed; | goto consumed; | ||||
} | } | ||||
/* | /* | ||||
* Translate Layer 4 inbound checksum offloading flags to outbound | |||||
*/ | |||||
if ((m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) == | |||||
(CSUM_DATA_VALID | CSUM_PSEUDO_HDR) && | |||||
m->m_pkthdr.csum_data == 0xffff) { | |||||
/* L4 checksum was correct, but it's not present. */ | |||||
switch(ip->ip_p) { | |||||
case IPPROTO_TCP: | |||||
m->m_pkthdr.csum_flags |= CSUM_TCP; | |||||
break; | |||||
case IPPROTO_UDP: | |||||
m->m_pkthdr.csum_flags |= CSUM_UDP; | |||||
break; | |||||
case IPPROTO_SCTP: | |||||
m->m_pkthdr.csum_flags |= CSUM_SCTP; | |||||
break; | |||||
default: | |||||
/* | |||||
* No checksum offloading support | |||||
*/ | |||||
break; | |||||
} | |||||
} | |||||
/* | |||||
* Check if packet fits MTU or if hardware will fragment for us | * Check if packet fits MTU or if hardware will fragment for us | ||||
*/ | */ | ||||
if (ro.ro_rt->rt_mtu) | if (ro.ro_rt->rt_mtu) | ||||
mtu = min(ro.ro_rt->rt_mtu, ifp->if_mtu); | mtu = min(ro.ro_rt->rt_mtu, ifp->if_mtu); | ||||
else | else | ||||
mtu = ifp->if_mtu; | mtu = ifp->if_mtu; | ||||
if (ip_len <= mtu) { | if (ip_len <= mtu) { | ||||
▲ Show 20 Lines • Show All 73 Lines • Show Last 20 Lines |