Page MenuHomeFreeBSD

D27188.diff
No OneTemporary

D27188.diff

Index: head/sys/net/ieee8023ad_lacp.h
===================================================================
--- head/sys/net/ieee8023ad_lacp.h
+++ head/sys/net/ieee8023ad_lacp.h
@@ -292,8 +292,10 @@
#define LACP_LOCK_ASSERT(_lsc) mtx_assert(&(_lsc)->lsc_mtx, MA_OWNED)
struct mbuf *lacp_input(struct lagg_port *, struct mbuf *);
-struct lagg_port *lacp_select_tx_port(struct lagg_softc *, struct mbuf *);
-struct lagg_port *lacp_select_tx_port_by_hash(struct lagg_softc *, uint32_t, uint8_t);
+struct lagg_port *lacp_select_tx_port(struct lagg_softc *, struct mbuf *,
+ int *);
+struct lagg_port *lacp_select_tx_port_by_hash(struct lagg_softc *, uint32_t,
+ uint8_t, int *);
void lacp_attach(struct lagg_softc *);
void lacp_detach(void *);
void lacp_init(struct lagg_softc *);
Index: head/sys/net/ieee8023ad_lacp.c
===================================================================
--- head/sys/net/ieee8023ad_lacp.c
+++ head/sys/net/ieee8023ad_lacp.c
@@ -832,7 +832,8 @@
}
struct lagg_port *
-lacp_select_tx_port_by_hash(struct lagg_softc *sc, uint32_t hash, uint8_t numa_domain)
+lacp_select_tx_port_by_hash(struct lagg_softc *sc, uint32_t hash,
+ uint8_t numa_domain, int *err)
{
struct lacp_softc *lsc = LACP_SOFTC(sc);
struct lacp_portmap *pm;
@@ -842,12 +843,14 @@
if (__predict_false(lsc->lsc_suppress_distributing)) {
LACP_DPRINTF((NULL, "%s: waiting transit\n", __func__));
+ *err = ENOBUFS;
return (NULL);
}
pm = &lsc->lsc_pmap[lsc->lsc_activemap];
if (pm->pm_count == 0) {
LACP_DPRINTF((NULL, "%s: no active aggregator\n", __func__));
+ *err = ENETDOWN;
return (NULL);
}
@@ -879,7 +882,7 @@
}
struct lagg_port *
-lacp_select_tx_port(struct lagg_softc *sc, struct mbuf *m)
+lacp_select_tx_port(struct lagg_softc *sc, struct mbuf *m, int *err)
{
struct lacp_softc *lsc = LACP_SOFTC(sc);
uint32_t hash;
@@ -892,7 +895,7 @@
hash = m_ether_tcpip_hash(sc->sc_flags, m, lsc->lsc_hashkey);
numa_domain = m->m_pkthdr.numa_domain;
- return (lacp_select_tx_port_by_hash(sc, hash, numa_domain));
+ return (lacp_select_tx_port_by_hash(sc, hash, numa_domain, err));
}
/*
Index: head/sys/net/if_lagg.c
===================================================================
--- head/sys/net/if_lagg.c
+++ head/sys/net/if_lagg.c
@@ -1763,6 +1763,7 @@
struct lagg_port *lp;
struct lagg_lb *lb;
uint32_t hash, p;
+ int err;
sc = ifp->if_softc;
@@ -1783,7 +1784,7 @@
flowtype == M_HASHTYPE_NONE)
return (NULL);
hash = flowid >> sc->flowid_shift;
- return (lacp_select_tx_port_by_hash(sc, hash, numa_domain));
+ return (lacp_select_tx_port_by_hash(sc, hash, numa_domain, &err));
default:
return (NULL);
}
@@ -2580,12 +2581,13 @@
lagg_lacp_start(struct lagg_softc *sc, struct mbuf *m)
{
struct lagg_port *lp;
+ int err;
- lp = lacp_select_tx_port(sc, m);
+ lp = lacp_select_tx_port(sc, m, &err);
if (lp == NULL) {
if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1);
m_freem(m);
- return (ENETDOWN);
+ return (err);
}
/* Send mbuf */

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 7, 11:05 AM (9 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31027367
Default Alt Text
D27188.diff (2 KB)

Event Timeline