diff options
author | andre <andre@FreeBSD.org> | 2005-11-18 16:23:26 +0000 |
---|---|---|
committer | andre <andre@FreeBSD.org> | 2005-11-18 16:23:26 +0000 |
commit | 60a2f6f1b5fce62c2014376e7a2ae593e17077d6 (patch) | |
tree | 25a910c43a490725f1198d01cf3404dc591746ff /sys/netinet/ip_output.c | |
parent | ae7b5c1a181cb1af58ea52a40b2a76757c338cb8 (diff) | |
download | FreeBSD-src-60a2f6f1b5fce62c2014376e7a2ae593e17077d6.zip FreeBSD-src-60a2f6f1b5fce62c2014376e7a2ae593e17077d6.tar.gz |
Purge layer specific mbuf flags on layer crossings to avoid confusing
upper or lower layers.
Sponsored by: TCP/IP Optimization Fundraise 2005
Diffstat (limited to 'sys/netinet/ip_output.c')
-rw-r--r-- | sys/netinet/ip_output.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index 0e210ac..edd49e1 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -773,6 +773,12 @@ passout: if (mbuf_frag_size && m->m_pkthdr.len > mbuf_frag_size) m = m_fragment(m, M_DONTWAIT, mbuf_frag_size); #endif + /* + * Reset layer specific mbuf flags + * to avoid confusing lower layers. + */ + m->m_flags &= ~(M_PROTOFLAGS); + error = (*ifp->if_output)(ifp, m, (struct sockaddr *)dst, ro->ro_rt); goto done; @@ -815,7 +821,12 @@ passout: ia->ia_ifa.if_opackets++; ia->ia_ifa.if_obytes += m->m_pkthdr.len; } - + /* + * Reset layer specific mbuf flags + * to avoid confusing upper layers. + */ + m->m_flags &= ~(M_PROTOFLAGS); + error = (*ifp->if_output)(ifp, m, (struct sockaddr *)dst, ro->ro_rt); } else |