summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_output.c
diff options
context:
space:
mode:
authorandre <andre@FreeBSD.org>2005-11-18 16:23:26 +0000
committerandre <andre@FreeBSD.org>2005-11-18 16:23:26 +0000
commit60a2f6f1b5fce62c2014376e7a2ae593e17077d6 (patch)
tree25a910c43a490725f1198d01cf3404dc591746ff /sys/netinet/ip_output.c
parentae7b5c1a181cb1af58ea52a40b2a76757c338cb8 (diff)
downloadFreeBSD-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.c13
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
OpenPOWER on IntegriCloud