The branch main has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=79b679942352a7f10d759fdee1892aa251e0f439

commit 79b679942352a7f10d759fdee1892aa251e0f439
Author:     John Baldwin <[email protected]>
AuthorDate: 2022-11-30 22:38:51 +0000
Commit:     John Baldwin <[email protected]>
CommitDate: 2022-11-30 22:38:51 +0000

    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
---
 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 d92c49b6f39c..a42e15dda97a 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -890,11 +890,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.
@@ -922,6 +920,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;
 
@@ -934,11 +936,6 @@ discard:
        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;
        }

Reply via email to