diff options
author | thompsa <thompsa@FreeBSD.org> | 2007-12-31 01:16:35 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2007-12-31 01:16:35 +0000 |
commit | 93319cc10273607712748c7127ef8b6b9c423f9d (patch) | |
tree | 085e519c51963ef594607a3d43bba393ca3673f8 /sys/net | |
parent | 1f55b95c0b8bf827067cd8af2a8bb21479ae5efb (diff) | |
download | FreeBSD-src-93319cc10273607712748c7127ef8b6b9c423f9d.zip FreeBSD-src-93319cc10273607712748c7127ef8b6b9c423f9d.tar.gz |
Pass any unmatched slowprotocols frames up the stack instead of dropping them,
there are more subtypes than just LACP.
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/ieee8023ad_lacp.c | 10 | ||||
-rw-r--r-- | sys/net/ieee8023ad_lacp.h | 2 | ||||
-rw-r--r-- | sys/net/if_lagg.c | 5 |
3 files changed, 9 insertions, 8 deletions
diff --git a/sys/net/ieee8023ad_lacp.c b/sys/net/ieee8023ad_lacp.c index 70ee700..d4cf675 100644 --- a/sys/net/ieee8023ad_lacp.c +++ b/sys/net/ieee8023ad_lacp.c @@ -213,7 +213,7 @@ static const lacp_timer_func_t lacp_timer_funcs[LACP_NTIMER] = { [LACP_TIMER_WAIT_WHILE] = lacp_sm_mux_timer, }; -void +struct mbuf * lacp_input(struct lagg_port *lgp, struct mbuf *m) { struct lagg_softc *sc = lgp->lp_softc; @@ -222,7 +222,7 @@ lacp_input(struct lagg_port *lgp, struct mbuf *m) if (m->m_pkthdr.len < sizeof(struct ether_header) + sizeof(subtype)) { m_freem(m); - return; + return (NULL); } m_copydata(m, sizeof(struct ether_header), sizeof(subtype), &subtype); @@ -237,10 +237,10 @@ lacp_input(struct lagg_port *lgp, struct mbuf *m) break; default: - /* Unknown LACP packet type */ - m_freem(m); - break; + /* Not a subtype we are interested in */ + return (m); } + return (NULL); } static void diff --git a/sys/net/ieee8023ad_lacp.h b/sys/net/ieee8023ad_lacp.h index b0a67e0..1e74627 100644 --- a/sys/net/ieee8023ad_lacp.h +++ b/sys/net/ieee8023ad_lacp.h @@ -260,7 +260,7 @@ struct lacp_softc { #define LACP_PORT(_lp) ((struct lacp_port *)(_lp)->lp_psc) #define LACP_SOFTC(_sc) ((struct lacp_softc *)(_sc)->sc_psc) -void lacp_input(struct lagg_port *, struct mbuf *); +struct mbuf *lacp_input(struct lagg_port *, struct mbuf *); struct lagg_port *lacp_select_tx_port(struct lagg_softc *, struct mbuf *); int lacp_attach(struct lagg_softc *); int lacp_detach(struct lagg_softc *); diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c index 27fef3f..c863387 100644 --- a/sys/net/if_lagg.c +++ b/sys/net/if_lagg.c @@ -1700,8 +1700,9 @@ lagg_lacp_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m) /* Tap off LACP control messages */ if (etype == ETHERTYPE_SLOW) { - lacp_input(lp, m); - return (NULL); + m = lacp_input(lp, m); + if (m == NULL) + return (NULL); } /* |