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;
