]> xenbits.xensource.com Git - people/pauldu/linux.git/commitdiff
xen-netback: accept an L4 or L3 skb hash value from the frontend
authorPaul Durrant <paul.durrant@citrix.com>
Mon, 19 Oct 2015 12:28:38 +0000 (13:28 +0100)
committerPaul Durrant <paul.durrant@citrix.com>
Mon, 19 Oct 2015 14:11:36 +0000 (15:11 +0100)
This patch adds an indication that netback is capable of handling hash
values passed from the frontend (see netif.h for details), and the code
necessary to process the additional xen_netif_extra_info segment and
set a hash on the skb.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
drivers/net/xen-netback/netback.c
drivers/net/xen-netback/xenbus.c

index ac0db145270ea9b76f294c739f05e1704070daf0..f820f63b20bc3c73cb96bac1145e762b4ab02b1c 100644 (file)
@@ -1364,6 +1364,28 @@ static void xenvif_tx_build_gops(struct xenvif_queue *queue,
                        }
                }
 
+               if (extras[XEN_NETIF_EXTRA_TYPE_HASH - 1].type) {
+                       struct xen_netif_extra_info *extra;
+                       u32 hash = *(u32 *)extra->u.hash.value;
+
+                       extra = &extras[XEN_NETIF_EXTRA_TYPE_HASH - 1];
+
+                       switch (extra->u.hash.type) {
+                       case XEN_NETIF_HASH_TYPE_TCPV4:
+                       case XEN_NETIF_HASH_TYPE_TCPV6:
+                               skb_set_hash(skb, hash, PKT_HASH_TYPE_L4);
+                               break;
+
+                       case XEN_NETIF_HASH_TYPE_IPV4:
+                       case XEN_NETIF_HASH_TYPE_IPV6:
+                               skb_set_hash(skb, hash, PKT_HASH_TYPE_L3);
+                               break;
+
+                       default:
+                               break;
+                       }
+               }
+
                XENVIF_TX_CB(skb)->pending_idx = pending_idx;
 
                __skb_put(skb, data_len);
index 929a6e7e5ecfe9249569c0059516e531fb0b79eb..2fa8a16fcf0f2018c9d826fc5b87cac6c413e4c6 100644 (file)
@@ -335,6 +335,14 @@ static int netback_probe(struct xenbus_device *dev,
                        goto abort_transaction;
                }
 
+               /* We support hash values. */
+               err = xenbus_printf(xbt, dev->nodename,
+                                   "feature-hash", "%d", 1);
+               if (err) {
+                       message = "writing feature-hash";
+                       goto abort_transaction;
+               }
+
                err = xenbus_transaction_end(xbt, 0);
        } while (err == -EAGAIN);