Page MenuHomeFreeBSD

if_lagg_rr.diff

Authored By
thompsa
Aug 6 2014, 12:56 AM
Size
1 KB
Referenced Files
None
Subscribers
None

if_lagg_rr.diff

Index: if_lagg.c
===================================================================
--- if_lagg.c (revision 269492)
+++ if_lagg.c (working copy)
@@ -187,6 +187,10 @@
SYSCTL_INT(_net_link_lagg, OID_AUTO, default_flowid_shift, CTLFLAG_RWTUN,
&def_flowid_shift, 0,
"Default setting for flowid shift for load sharing");
+static int lagg_rr_packets = 0; /* Default value for using rr_packets */
+SYSCTL_INT(_net_link_lagg, OID_AUTO, rr_packets, CTLFLAG_RW,
+ &lagg_rr_packets, 0,
+ "How many packets to be send per interface");
static int
lagg_modevent(module_t mod, int type, void *data)
@@ -1676,6 +1680,7 @@
sc->sc_port_create = NULL;
sc->sc_capabilities = IFCAP_LAGG_FULLDUPLEX;
sc->sc_seq = 0;
+ sc->sc_bkt = lagg_rr_packets;
return (0);
}
@@ -1692,7 +1697,15 @@
struct lagg_port *lp;
uint32_t p;
- p = atomic_fetchadd_32(&sc->sc_seq, 1);
+ if (lagg_rr_packets > 1) {
+ atomic_subtract_int(&sc->sc_bkt, 1);
+ if (atomic_cmpset_int(&sc->sc_bkt, 0, lagg_rr_packets))
+ p = atomic_fetchadd_32(&sc->sc_seq, 1);
+ else
+ p = sc->sc_seq;
+ } else {
+ p = atomic_fetchadd_32(&sc->sc_seq, 1);
+ }
p %= sc->sc_count;
lp = SLIST_FIRST(&sc->sc_ports);
while (p--)
Index: if_lagg.h
===================================================================
--- if_lagg.h (revision 269492)
+++ if_lagg.h (working copy)
@@ -199,6 +199,7 @@
struct ifmedia sc_media; /* media config */
caddr_t sc_psc; /* protocol data */
uint32_t sc_seq; /* sequence counter */
+ uint32_t sc_bkt; /* packet bucket */
uint32_t sc_flags;
counter_u64_t sc_ipackets;

File Metadata

Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
12261
Default Alt Text
if_lagg_rr.diff (1 KB)

Event Timeline