From patchwork Sat Oct 28 00:09:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Herbert X-Patchwork-Id: 831551 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=quantonium-net.20150623.gappssmtp.com header.i=@quantonium-net.20150623.gappssmtp.com header.b="1RIUeNEV"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yP1NB3Jrlz9t4b for ; Sat, 28 Oct 2017 11:10:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751465AbdJ1AKM (ORCPT ); Fri, 27 Oct 2017 20:10:12 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:45999 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751326AbdJ1AKH (ORCPT ); Fri, 27 Oct 2017 20:10:07 -0400 Received: by mail-pg0-f65.google.com with SMTP id b192so6419097pga.2 for ; Fri, 27 Oct 2017 17:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quantonium-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KurM9DxJ1gf+MwdiMYfJN00MtSE0BxFlHdI4JpARNqk=; b=1RIUeNEVW6fz+YyXAjuONailxOP77i/X+2QOnNFvioNlMR5dyjFz6WT5t0WnY48NNV kTmnP/T2VuHXQkp2fsoYadbD5J6lKVx5Viabu3mds98vhwbGeFLZ5tbrEqLG6suxV45i KMJKlXzPHP3cacWffyMvlM+m53IYqD/u/1mNwHbe76VRw9Obl3ML8Hx4OFt7PkHmZrJ/ MCVoiD0fMhVGjbx7Ts2XK1KuSP6mwG8aWL652cinp/BLLXGgFFoXXch65riLv+vFr/iU zwX+24hGeOjzFR4GYBCIuJsaNvYaQFR4nytVofhk9l7b9SMrJitALtJqLX+avX+z5+8I 7kuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=KurM9DxJ1gf+MwdiMYfJN00MtSE0BxFlHdI4JpARNqk=; b=q6DV91b+P9P55Q6gtqhRClZqrWfZs4wDh+9A99bichgUwp2lc+jIaEe2iFIojo2uQA owbeUWQfDWibFKa9wwbbsjqkc7M0bLW9RHU8XLaYzFu23BDvonTfimjEgN0lU7xrslJT 65XG9EV147S7xXZKbTfxRub0hNz+x8ygdnzSP4CwS8/pkOEdiuuAWpeXnzALgLEy9n53 ZKGnHexG0P8sDl9Q2D2oFAlEy2cXmMrtNo0B7gCP9RqdbfLd8mBXMjWHGHIcV7azeSAu B5FQSwuYE0lPKDGimwg6HH+QRJmG6lKcOVifCPQPgOLi6HUqX0YcPhgrdhGhUaG+KaFi n6gg== X-Gm-Message-State: AMCzsaXvEWcKSDVcHBrpIOLlDFEkJV6qnsGqQJRmwnT1VqbevgwccvSJ xJaNSFNG98TnRAEC3SoeueYGpg== X-Google-Smtp-Source: ABhQp+Thl2pNEWc+j06MwXjiZN8m97RAfB/NIdQIUXnxKpS/U0PfJ/ZFDQbq3MAsXOzyCcamBoDL/g== X-Received: by 10.84.177.36 with SMTP id w33mr1594090plb.215.1509149406718; Fri, 27 Oct 2017 17:10:06 -0700 (PDT) Received: from localhost.localdomain (c-73-162-13-107.hsd1.ca.comcast.net. [73.162.13.107]) by smtp.gmail.com with ESMTPSA id 2sm9068398pgb.30.2017.10.27.17.10.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Oct 2017 17:10:05 -0700 (PDT) From: Tom Herbert To: davem@davemloft.net Cc: pablo@netfilter.org, laforge@gnumonks.org, aschultz@tpip.net, netdev@vger.kernel.org, rohit@quantonium.net, Tom Herbert Subject: [PATCH v7 net-next 03/13] vxlan: Call common functions to get tunnel routes Date: Fri, 27 Oct 2017 17:09:27 -0700 Message-Id: <20171028000937.2631-4-tom@quantonium.net> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171028000937.2631-1-tom@quantonium.net> References: <20171028000937.2631-1-tom@quantonium.net> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Call ip_tunnel_get_route and ip6_tnl_get_route to handle getting a route and dealing with the dst_cache. Signed-off-by: Tom Herbert --- drivers/net/vxlan.c | 84 ++++------------------------------------------------- 1 file changed, 5 insertions(+), 79 deletions(-) diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index a54dd3d2a824..5e5716052a95 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -1867,47 +1867,11 @@ static struct rtable *vxlan_get_route(struct vxlan_dev *vxlan, struct net_device struct dst_cache *dst_cache, const struct ip_tunnel_info *info) { - bool use_cache = ip_tunnel_dst_cache_usable(skb, info); - struct rtable *rt = NULL; - struct flowi4 fl4; - if (!sock4) return ERR_PTR(-EIO); - if (tos && !info) - use_cache = false; - if (use_cache) { - rt = dst_cache_get_ip4(dst_cache, saddr); - if (rt) - return rt; - } - - memset(&fl4, 0, sizeof(fl4)); - fl4.flowi4_oif = oif; - fl4.flowi4_tos = RT_TOS(tos); - fl4.flowi4_mark = skb->mark; - fl4.flowi4_proto = IPPROTO_UDP; - fl4.daddr = daddr; - fl4.saddr = *saddr; - fl4.fl4_dport = dport; - fl4.fl4_sport = sport; - - rt = ip_route_output_key(vxlan->net, &fl4); - if (likely(!IS_ERR(rt))) { - if (rt->dst.dev == dev) { - netdev_dbg(dev, "circular route to %pI4\n", &daddr); - ip_rt_put(rt); - return ERR_PTR(-ELOOP); - } - - *saddr = fl4.saddr; - if (use_cache) - dst_cache_set_ip4(dst_cache, &rt->dst, fl4.saddr); - } else { - netdev_dbg(dev, "no route to %pI4\n", &daddr); - return ERR_PTR(-ENETUNREACH); - } - return rt; + return ip_tunnel_get_route(dev, skb, IPPROTO_UDP, oif, tos, daddr, + saddr, dport, sport, dst_cache, info); } #if IS_ENABLED(CONFIG_IPV6) @@ -1922,50 +1886,12 @@ static struct dst_entry *vxlan6_get_route(struct vxlan_dev *vxlan, struct dst_cache *dst_cache, const struct ip_tunnel_info *info) { - bool use_cache = ip_tunnel_dst_cache_usable(skb, info); - struct dst_entry *ndst; - struct flowi6 fl6; - int err; - if (!sock6) return ERR_PTR(-EIO); - if (tos && !info) - use_cache = false; - if (use_cache) { - ndst = dst_cache_get_ip6(dst_cache, saddr); - if (ndst) - return ndst; - } - - memset(&fl6, 0, sizeof(fl6)); - fl6.flowi6_oif = oif; - fl6.daddr = *daddr; - fl6.saddr = *saddr; - fl6.flowlabel = ip6_make_flowinfo(RT_TOS(tos), label); - fl6.flowi6_mark = skb->mark; - fl6.flowi6_proto = IPPROTO_UDP; - fl6.fl6_dport = dport; - fl6.fl6_sport = sport; - - err = ipv6_stub->ipv6_dst_lookup(vxlan->net, - sock6->sock->sk, - &ndst, &fl6); - if (unlikely(err < 0)) { - netdev_dbg(dev, "no route to %pI6\n", daddr); - return ERR_PTR(-ENETUNREACH); - } - - if (unlikely(ndst->dev == dev)) { - netdev_dbg(dev, "circular route to %pI6\n", daddr); - dst_release(ndst); - return ERR_PTR(-ELOOP); - } - - *saddr = fl6.saddr; - if (use_cache) - dst_cache_set_ip6(dst_cache, ndst, saddr); - return ndst; + return ip6_tnl_get_route(dev, skb, sock6->sock->sk, IPPROTO_UDP, oif, + tos, label, daddr, saddr, dport, sport, + dst_cache, info); } #endif