From patchwork Tue Mar 26 18:28:59 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pravin B Shelar X-Patchwork-Id: 231509 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 69E042C0079 for ; Wed, 27 Mar 2013 05:29:26 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760067Ab3CZS3T (ORCPT ); Tue, 26 Mar 2013 14:29:19 -0400 Received: from na3sys009aog101.obsmtp.com ([74.125.149.67]:39982 "HELO na3sys009aog101.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1760058Ab3CZS3S (ORCPT ); Tue, 26 Mar 2013 14:29:18 -0400 Received: from mail-pd0-f200.google.com ([209.85.192.200]) (using TLSv1) by na3sys009aob101.postini.com ([74.125.148.12]) with SMTP ID DSNKUVHo/ZaNxSWNKllC00fSJkGEBjFrFBIS@postini.com; Tue, 26 Mar 2013 11:29:18 PDT Received: by mail-pd0-f200.google.com with SMTP id w10so6798033pde.3 for ; Tue, 26 Mar 2013 11:29:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-received:from:to:cc:subject:date:message-id:x-mailer :x-gm-message-state; bh=EUo0bXtsip9u8D3XmyHi8x4EYNJGjje8e1f+aGG7gas=; b=cmSTv7HLulJoWUPb3aXwqck1mldTJtQXWR9eGhI6/Ml5BD7vFCWXckmQUFq32OQe2/ rSMz4qgxvXV5djUa4JzFHZJ2rniAkapyXhY356puRBQojILWQjyxKteH+whA3zM9qXaO +lV6jjICvPT8pytHp4CfB/bWXLC4GRTIT8XB0KO6jHxC96UN3bljuVy75cUhWZaXBVwP j3MfPKtUaUNox5Lw01QU4VjpzEVwCTkc/d4FFnQP9VqMh/4TAsa7gws4aOwBGre7dbLB Jtv3xkUrdJleNrpsivq8w3piqrdReLOger8WmCQfvsMB0xRjcfjpnPrhi0Bf/lfTHBVe VFqw== X-Received: by 10.66.253.232 with SMTP id ad8mr25755581pad.119.1364322557380; Tue, 26 Mar 2013 11:29:17 -0700 (PDT) X-Received: by 10.66.253.232 with SMTP id ad8mr25755562pad.119.1364322557179; Tue, 26 Mar 2013 11:29:17 -0700 (PDT) Received: from localhost ([75.98.92.113]) by mx.google.com with ESMTPS id bs1sm7550321pbc.8.2013.03.26.11.29.15 (version=TLSv1.1 cipher=RC4-SHA bits=128/128); Tue, 26 Mar 2013 11:29:16 -0700 (PDT) From: Pravin B Shelar To: netdev@vger.kernel.org Cc: davem@davemloft.net, jesse@nicira.com, Pravin B Shelar , Stephen Hemminger Subject: [PATCH net-next] VXLAN: Precompute vin for VXLAN header. Date: Tue, 26 Mar 2013 11:28:59 -0700 Message-Id: <1364322539-27141-1-git-send-email-pshelar@nicira.com> X-Mailer: git-send-email 1.8.2.135.g7b592fa X-Gm-Message-State: ALoCoQluR73OCzpr4ySwLkzl9L8q+u/Tl6UYEn2GqpWeww1H4aNWVMwJQTfT3Wdh/69bm9bMKO3hb/Ophggdixbsyt0jBZUmTap5vnHY8jioa2bPEwsmODAskj4nJFPwKngvuMHN2XMNyei78XJ9CABYOOlokcGmBdU+XLO3hRRrDi1XeDwpEBU= Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Compute VXLAN vin at time of device create so that there is no need to translate it on packet send and receive. This patch do not change userspace interface. CC: Stephen Hemminger Signed-off-by: Pravin B Shelar --- drivers/net/vxlan.c | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 7624ab1..8faebf7 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -105,7 +105,7 @@ struct vxlan_fdb { struct vxlan_dev { struct hlist_node hlist; struct net_device *dev; - __u32 vni; /* virtual network id */ + __be32 vni; /* virtual network id */ __be32 gaddr; /* multicast group */ __be32 saddr; /* source address */ unsigned int link; /* link to multicast over */ @@ -133,15 +133,15 @@ struct vxlan_dev { /* salt for hash table */ static u32 vxlan_salt __read_mostly; -static inline struct hlist_head *vni_head(struct net *net, u32 id) +static inline struct hlist_head *vni_head(struct net *net, __be32 id) { struct vxlan_net *vn = net_generic(net, vxlan_net_id); - return &vn->vni_list[hash_32(id, VNI_HASH_BITS)]; + return &vn->vni_list[hash_32((__force u32)id, VNI_HASH_BITS)]; } /* Look up VNI in a per net namespace table */ -static struct vxlan_dev *vxlan_find_vni(struct net *net, u32 id) +static struct vxlan_dev *vxlan_find_vni(struct net *net, __be32 id) { struct vxlan_dev *vxlan; @@ -658,7 +658,6 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb) struct vxlanhdr *vxh; struct vxlan_dev *vxlan; struct pcpu_tstats *stats; - __u32 vni; int err; /* pop off outer UDP header */ @@ -680,10 +679,10 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb) __skb_pull(skb, sizeof(struct vxlanhdr)); /* Is this VNI defined? */ - vni = ntohl(vxh->vx_vni) >> 8; - vxlan = vxlan_find_vni(sock_net(sk), vni); + vxlan = vxlan_find_vni(sock_net(sk), vxh->vx_vni); if (!vxlan) { - netdev_dbg(skb->dev, "unknown vni %d\n", vni); + netdev_dbg(skb->dev, "unknown vni %d\n", + (ntohl(vxh->vx_vni) >> 8)); goto drop; } @@ -1006,7 +1004,7 @@ static netdev_tx_t vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev, vxh = (struct vxlanhdr *) __skb_push(skb, sizeof(*vxh)); vxh->vx_flags = htonl(VXLAN_FLAGS); - vxh->vx_vni = htonl(vni << 8); + vxh->vx_vni = vxlan->vni; __skb_push(skb, sizeof(*uh)); skb_reset_transport_header(skb); @@ -1359,15 +1357,17 @@ static int vxlan_newlink(struct net *net, struct net_device *dev, struct nlattr *tb[], struct nlattr *data[]) { struct vxlan_dev *vxlan = netdev_priv(dev); - __u32 vni; + __u32 id; + __be32 vni; int err; if (!data[IFLA_VXLAN_ID]) return -EINVAL; - vni = nla_get_u32(data[IFLA_VXLAN_ID]); + id = nla_get_u32(data[IFLA_VXLAN_ID]); + vni = htonl(id << 8); if (vxlan_find_vni(net, vni)) { - pr_info("duplicate VNI %u\n", vni); + pr_info("duplicate VNI %u\n", id); return -EEXIST; } vxlan->vni = vni; @@ -1478,7 +1478,7 @@ static int vxlan_fill_info(struct sk_buff *skb, const struct net_device *dev) .high = htons(vxlan->port_max), }; - if (nla_put_u32(skb, IFLA_VXLAN_ID, vxlan->vni)) + if (nla_put_u32(skb, IFLA_VXLAN_ID, (ntohl(vxlan->vni) >> 8))) goto nla_put_failure; if (vxlan->gaddr && nla_put_be32(skb, IFLA_VXLAN_GROUP, vxlan->gaddr))