From ed19cb27bde8c87ece83e390b0fd40991abdc9b3 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Wed, 30 Nov 2022 14:38:51 -0800 Subject: [PATCH] ether_demux: Defer stripping the Ethernet header. This avoids having to undo it before invoking NetGraph's orphan input hook. Reviewed by: ae, melifaro Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D37510 (cherry picked from commit 79b679942352a7f10d759fdee1892aa251e0f439) --- sys/net/if_ethersubr.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c index 25daf13ccef..9a614fbe684 100644 --- a/sys/net/if_ethersubr.c +++ b/sys/net/if_ethersubr.c @@ -886,11 +886,9 @@ ether_demux(struct ifnet *ifp, struct mbuf *m) /* * Reset layer specific mbuf flags to avoid confusing upper layers. - * Strip off Ethernet header. */ m->m_flags &= ~M_VLANTAG; m_clrprotoflags(m); - m_adj(m, ETHER_HDR_LEN); /* * Dispatch frame to upper layer. @@ -918,6 +916,10 @@ ether_demux(struct ifnet *ifp, struct mbuf *m) default: goto discard; } + + /* Strip off Ethernet header. */ + m_adj(m, ETHER_HDR_LEN); + netisr_dispatch(isr, m); return; @@ -930,11 +932,6 @@ ether_demux(struct ifnet *ifp, struct mbuf *m) if (ifp->if_l2com != NULL) { KASSERT(ng_ether_input_orphan_p != NULL, ("ng_ether_input_orphan_p is NULL")); - /* - * Put back the ethernet header so netgraph has a - * consistent view of inbound packets. - */ - M_PREPEND(m, ETHER_HDR_LEN, M_NOWAIT); (*ng_ether_input_orphan_p)(ifp, m); return; } -- 2.45.0