net: add LRO feature
authorRon Minnich <rminnich@gmail.com>
Sat, 17 Jan 2015 08:42:58 +0000 (00:42 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:29 +0000 (10:12 -0500)
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>
kern/drivers/net/bxe/bxe.c
kern/include/ip.h
kern/src/net/netif.c

index 57b3e63..cae14cb 100644 (file)
@@ -10577,8 +10577,7 @@ bxe_pf_init(struct bxe_adapter *sc)
      * 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);
index d090fb1..fc359f5 100644 (file)
@@ -933,6 +933,7 @@ struct netaddr {
 #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 @@ enum {
        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
index c445b5d..90f7ce0 100644 (file)
@@ -287,6 +287,8 @@ netifread(struct netif *nif, struct chan *c, void *a, long n, uint32_t offset)
                                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);