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.durr...@citrix.com> Cc: Ian Campbell <ian.campb...@citrix.com> Cc: Wei Liu <wei.l...@citrix.com> --- drivers/net/xen-netback/netback.c | 25 +++++++++++++++++++++++++ drivers/net/xen-netback/xenbus.c | 8 ++++++++ 2 files changed, 33 insertions(+) diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index 9f0c9f5..3799b5a 100644 --- a/drivers/net/xen-netback/netback.c +++ b/drivers/net/xen-netback/netback.c @@ -1383,6 +1383,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); @@ -1416,6 +1438,9 @@ static void xenvif_tx_build_gops(struct xenvif_queue *queue, if (extras[XEN_NETIF_EXTRA_TYPE_GSO - 1].type) queue->pending_tx_info[pending_idx].extra_count++; + if (extras[XEN_NETIF_EXTRA_TYPE_HASH - 1].type) + queue->pending_tx_info[pending_idx].extra_count++; + queue->pending_cons++; gop = xenvif_get_requests(queue, skb, txfrags, gop, diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c index 929a6e7..2fa8a16 100644 --- a/drivers/net/xen-netback/xenbus.c +++ b/drivers/net/xen-netback/xenbus.c @@ -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); -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html