diff options
author | Andrew Thompson <thompsa@FreeBSD.org> | 2007-12-31 01:16:35 +0000 |
---|---|---|
committer | Andrew Thompson <thompsa@FreeBSD.org> | 2007-12-31 01:16:35 +0000 |
commit | af0084c92ec09637036f4f0301c9a6fb1a96cb59 (patch) | |
tree | 085e519c51963ef594607a3d43bba393ca3673f8 /sys/net | |
parent | 07aa172f11b5ba4279ee8e0369760af3b4b989f4 (diff) | |
download | src-af0084c92ec09637036f4f0301c9a6fb1a96cb59.tar.gz src-af0084c92ec09637036f4f0301c9a6fb1a96cb59.zip |
Pass any unmatched slowprotocols frames up the stack instead of dropping them,
there are more subtypes than just LACP.
Notes
Notes:
svn path=/head/; revision=175005
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 70ee7007a2c5..d4cf6757b896 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 b0a67e085ce8..1e74627843ea 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 27fef3f0d548..c863387ae9bb 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); } /* |