net: add LRO feature

Needed for lots of things, so let's just add it in.

is TSO the same as LRO? I did not think so but ... Andrew?

Signed-off-by: Ron Minnich <rminnich@gmail.com>
diff --git a/kern/drivers/net/bxe/bxe.c b/kern/drivers/net/bxe/bxe.c
index 57b3e63..cae14cb 100644
--- a/kern/drivers/net/bxe/bxe.c
+++ b/kern/drivers/net/bxe/bxe.c
@@ -10577,8 +10577,7 @@
      * This flag is relevant for E1x only.
      * E2 doesn't have a TPA configuration in a function level.
      */
-#warning "no getcapenable"
-//    flags |= (if_getcapenable(sc->ifp) & IFCAP_LRO) ? FUNC_FLG_TPA : 0;
+    flags |= (sc->ifp->feat & NETF_LRO) ? FUNC_FLG_TPA : 0;
 
     func_init.func_flgs = flags;
     func_init.pf_id     = SC_FUNC(sc);
diff --git a/kern/include/ip.h b/kern/include/ip.h
index d090fb1..fc359f5 100644
--- a/kern/include/ip.h
+++ b/kern/include/ip.h
@@ -933,6 +933,7 @@
 #define NETF_BASE_SHIFT		(NS_SHIFT_MAX + 1)
 #define NETF_PADMIN_SHIFT	(NETF_BASE_SHIFT + 0)
 #define NETF_SG_SHIFT		(NETF_BASE_SHIFT + 1)
+#define NETF_LRO_SHIFT		(NETF_BASE_SHIFT + 2)
 enum {
 	NETF_IPCK = (1 << NS_IPCK_SHIFT),	/* xmit ip checksum */
 	NETF_UDPCK = (1 << NS_UDPCK_SHIFT),	/* xmit udp checksum */
@@ -940,6 +941,7 @@
 	NETF_PADMIN = (1 << NETF_PADMIN_SHIFT),	/* device pads to mintu */
 	NETF_SG	= (1 << NETF_SG_SHIFT),		/* device can do scatter/gather */
 	NETF_TSO = (1 << NS_TSO_SHIFT),		/* device can do TSO */
+	NETF_LRO = (1 << NETF_LRO_SHIFT),	/* device can do LRO */
 };
 /*
  *  a network interface
diff --git a/kern/src/net/netif.c b/kern/src/net/netif.c
index c445b5d..90f7ce0 100644
--- a/kern/src/net/netif.c
+++ b/kern/src/net/netif.c
@@ -287,6 +287,8 @@
 				j += snprintf(p + j, READSTR - j, "sg ");
 			if (nif->feat & NETF_TSO)
 				j += snprintf(p + j, READSTR - j, "tso ");
+			if (nif->feat & NETF_LRO)
+				j += snprintf(p + j, READSTR - j, "lro ");
 			snprintf(p + j, READSTR - j, "\n");
 			n = readstr(offset, a, n, p);
 			kfree(p);