From patchwork Wed Jul 3 17:04:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Rose X-Patchwork-Id: 1126989 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="iVIMSQsN"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45f6t906nwz9sBp for ; Thu, 4 Jul 2019 03:05:04 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 29EB0E62; Wed, 3 Jul 2019 17:05:02 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 249AFE3F for ; Wed, 3 Jul 2019 17:05:01 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 69782836 for ; Wed, 3 Jul 2019 17:05:00 +0000 (UTC) Received: by mail-pf1-f195.google.com with SMTP id r7so1585299pfl.3 for ; Wed, 03 Jul 2019 10:05:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=gwjij1sw0YlXAc0y+XJuWRNb4H0isjeCV66VUK8BWvU=; b=iVIMSQsNkqi4I6YAOznio8ftCDWGsmvGYzlrdYgcJBP3wISx6RaSObaWe1a++DURIR tVyc6JgfiUaVOBgNrv9B0UPeLjOaNA/C6KkMqdXWK0OyLeWWamlECICp+c8xYwri5if9 1ueM8yc5gPQcGvr1ZtTTXd4+EC2w1x5Yxl3mu3YJOorJYTJoLMftYDTmcfntOG3+VGdI v87QcnbI42dwN7MXLDpKA1+qkWKcXZ9J9L02kyCvL/xUsz+SB4reVZBdXwyhs7ecB0aI HZzCTBpBXHJNNp8s7621Oe0TDOs2JaBZWT0DbNGOB55QQy6gtT9Rb9KxptpTRPiwN2O3 30HA== 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; bh=gwjij1sw0YlXAc0y+XJuWRNb4H0isjeCV66VUK8BWvU=; b=PO8Gg9F1Yxeu2sZChwPpSlzgJ0eCj7/9bw+bKu8tJIflnwLhw7tQgPACjKlgzm3VxL L6TvQSgeq9BsAeCAY+z82vrD12YBrB74OHwt1MMOrQGo2y1yHcvyrAwpVSt5aRaGXGZh b6bPURBlMflJn7g6l9gfdUG6uNopB+sma8WCiu2uaijNo3P9cCLoqxt+LhjPwPU59e5B q5QazPxGtdNS0gNDlqczrBlNef5GMM7iKCq2SbHwcJUfDRljnc4mva1dI5LFxU+Rquw6 kdcUDwpqaHCe/lXtHXe30n8DhtYW8cLfEk2j5gjzHlN3AsVTB2vV69BSk4yHILhKXEJd euLA== X-Gm-Message-State: APjAAAWUyZvPHbn0DKOP78zar02F6CecAPbUrgKbuqF+/dj5aZqlvbIJ u0oh6/oLmH6dv9ntLY1H5HDcRhBi X-Google-Smtp-Source: APXvYqy3XZmj2p38Hw0J9cst9Omyk7w0+uZvwq2zb3aXrcMXyJeoxzkGeqiPu6U4w2CKs+kdKyBmZA== X-Received: by 2002:a63:e5a:: with SMTP id 26mr9116754pgo.3.1562173499478; Wed, 03 Jul 2019 10:04:59 -0700 (PDT) Received: from gizo.domain (97-115-113-19.ptld.qwest.net. [97.115.113.19]) by smtp.gmail.com with ESMTPSA id a10sm2313061pgq.2.2019.07.03.10.04.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jul 2019 10:04:58 -0700 (PDT) From: Greg Rose To: dev@openvswitch.org Date: Wed, 3 Jul 2019 10:04:53 -0700 Message-Id: <1562173495-24586-1-git-send-email-gvrose8192@gmail.com> X-Mailer: git-send-email 1.8.3.1 X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH V2 1/3] compat: Remove duplicate metadata destination code X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org ip_gre.c and ip6_gre.c both had duplicate code for handling the tunnel metadata destinations. Move the duplicate code over into the right header file, dst_metadata.h. Signed-off-by: Greg Rose Acked-by: William Tu --- v1->v2 Remove unwanted comment left over from code reorg --- datapath/linux/compat/include/net/dst_metadata.h | 135 ++++++++++++++++++++++- datapath/linux/compat/ip6_gre.c | 99 ----------------- datapath/linux/compat/ip_gre.c | 82 +------------- 3 files changed, 133 insertions(+), 183 deletions(-) diff --git a/datapath/linux/compat/include/net/dst_metadata.h b/datapath/linux/compat/include/net/dst_metadata.h index 9a82b3c..4ffafcc 100644 --- a/datapath/linux/compat/include/net/dst_metadata.h +++ b/datapath/linux/compat/include/net/dst_metadata.h @@ -30,6 +30,137 @@ struct metadata_dst { } u; }; +#ifndef DST_METADATA +#define DST_METADATA 0x0080 +#endif + +extern struct dst_ops md_dst_ops; + +static void rpl__metadata_dst_init(struct metadata_dst *md_dst, + enum metadata_type type, u8 optslen) + +{ + struct dst_entry *dst; + + dst = &md_dst->dst; + dst_init(dst, &md_dst_ops, NULL, 1, DST_OBSOLETE_NONE, + DST_METADATA | DST_NOCOUNT); + +#if 0 + /* unused in OVS */ + dst->input = dst_md_discard; + dst->output = dst_md_discard_out; +#endif + memset(dst + 1, 0, sizeof(*md_dst) + optslen - sizeof(*dst)); + md_dst->type = type; +} + +static struct +metadata_dst *__rpl_metadata_dst_alloc(u8 optslen, + enum metadata_type type, + gfp_t flags) +{ + struct metadata_dst *md_dst; + + md_dst = kmalloc(sizeof(*md_dst) + optslen, flags); + if (!md_dst) + return NULL; + + rpl__metadata_dst_init(md_dst, type, optslen); + + return md_dst; +} +static inline struct metadata_dst *rpl_tun_rx_dst(int md_size) +{ + struct metadata_dst *tun_dst; + + tun_dst = __rpl_metadata_dst_alloc(md_size, METADATA_IP_TUNNEL, + GFP_ATOMIC); + if (!tun_dst) + return NULL; + + tun_dst->u.tun_info.options_len = 0; + tun_dst->u.tun_info.mode = 0; + return tun_dst; +} +static inline struct metadata_dst *rpl__ip_tun_set_dst(__be32 saddr, + __be32 daddr, + __u8 tos, __u8 ttl, + __be16 tp_dst, + __be16 flags, + __be64 tunnel_id, + int md_size) +{ + struct metadata_dst *tun_dst; + + tun_dst = rpl_tun_rx_dst(md_size); + if (!tun_dst) + return NULL; + + ip_tunnel_key_init(&tun_dst->u.tun_info.key, + saddr, daddr, tos, ttl, + 0, 0, tp_dst, tunnel_id, flags); + return tun_dst; +} + +static inline struct metadata_dst *rpl_ip_tun_rx_dst(struct sk_buff *skb, + __be16 flags, + __be64 tunnel_id, + int md_size) +{ + const struct iphdr *iph = ip_hdr(skb); + + return rpl__ip_tun_set_dst(iph->saddr, iph->daddr, iph->tos, iph->ttl, + 0, flags, tunnel_id, md_size); +} + +static inline +struct metadata_dst *rpl__ipv6_tun_set_dst(const struct in6_addr *saddr, + const struct in6_addr *daddr, + __u8 tos, __u8 ttl, + __be16 tp_dst, + __be32 label, + __be16 flags, + __be64 tunnel_id, + int md_size) +{ + struct metadata_dst *tun_dst; + struct ip_tunnel_info *info; + + tun_dst = rpl_tun_rx_dst(md_size); + if (!tun_dst) + return NULL; + + info = &tun_dst->u.tun_info; + info->mode = IP_TUNNEL_INFO_IPV6; + info->key.tun_flags = flags; + info->key.tun_id = tunnel_id; + info->key.tp_src = 0; + info->key.tp_dst = tp_dst; + + info->key.u.ipv6.src = *saddr; + info->key.u.ipv6.dst = *daddr; + + info->key.tos = tos; + info->key.ttl = ttl; + info->key.label = label; + + return tun_dst; +} + +static inline struct metadata_dst *rpl_ipv6_tun_rx_dst(struct sk_buff *skb, + __be16 flags, + __be64 tunnel_id, + int md_size) +{ + const struct ipv6hdr *ip6h = ipv6_hdr(skb); + + return rpl__ipv6_tun_set_dst(&ip6h->saddr, &ip6h->daddr, + ipv6_get_dsfield(ip6h), ip6h->hop_limit, + 0, ip6_flowlabel(ip6h), flags, tunnel_id, + md_size); +} + static void __metadata_dst_init(struct metadata_dst *md_dst, u8 optslen) { struct dst_entry *dst; @@ -127,10 +258,6 @@ rpl_metadata_dst_alloc(u8 optslen, enum metadata_type type, gfp_t flags) } #define metadata_dst_alloc rpl_metadata_dst_alloc -#ifndef DST_METADATA -#define DST_METADATA 0x0200 -#endif - static inline bool rpl_skb_valid_dst(const struct sk_buff *skb) { struct dst_entry *dst = skb_dst(skb); diff --git a/datapath/linux/compat/ip6_gre.c b/datapath/linux/compat/ip6_gre.c index ca4e661..850e703 100644 --- a/datapath/linux/compat/ip6_gre.c +++ b/datapath/linux/compat/ip6_gre.c @@ -520,105 +520,6 @@ static void ip6gre_err(struct sk_buff *skb, struct inet6_skb_parm *opt, #endif } -static struct dst_ops md_dst_ops = { - .family = AF_UNSPEC, -}; - -#ifndef DST_METADATA -#define DST_METADATA 0x0080 -#endif - -static void rpl__metadata_dst_init(struct metadata_dst *md_dst, - enum metadata_type type, u8 optslen) - -{ - struct dst_entry *dst; - - dst = &md_dst->dst; - dst_init(dst, &md_dst_ops, NULL, 1, DST_OBSOLETE_NONE, - DST_METADATA | DST_NOCOUNT); - -#if 0 - /* unused in OVS */ - dst->input = dst_md_discard; - dst->output = dst_md_discard_out; -#endif - memset(dst + 1, 0, sizeof(*md_dst) + optslen - sizeof(*dst)); - md_dst->type = type; -} - -static struct metadata_dst *erspan_rpl_metadata_dst_alloc(u8 optslen, enum metadata_type type, - gfp_t flags) -{ - struct metadata_dst *md_dst; - - md_dst = kmalloc(sizeof(*md_dst) + optslen, flags); - if (!md_dst) - return NULL; - - rpl__metadata_dst_init(md_dst, type, optslen); - - return md_dst; -} -static inline struct metadata_dst *rpl_tun_rx_dst(int md_size) -{ - struct metadata_dst *tun_dst; - - tun_dst = erspan_rpl_metadata_dst_alloc(md_size, METADATA_IP_TUNNEL, GFP_ATOMIC); - if (!tun_dst) - return NULL; - - tun_dst->u.tun_info.options_len = 0; - tun_dst->u.tun_info.mode = 0; - return tun_dst; -} -static inline -struct metadata_dst *rpl__ipv6_tun_set_dst(const struct in6_addr *saddr, - const struct in6_addr *daddr, - __u8 tos, __u8 ttl, - __be16 tp_dst, - __be32 label, - __be16 flags, - __be64 tunnel_id, - int md_size) -{ - struct metadata_dst *tun_dst; - struct ip_tunnel_info *info; - - tun_dst = rpl_tun_rx_dst(md_size); - if (!tun_dst) - return NULL; - - info = &tun_dst->u.tun_info; - info->mode = IP_TUNNEL_INFO_IPV6; - info->key.tun_flags = flags; - info->key.tun_id = tunnel_id; - info->key.tp_src = 0; - info->key.tp_dst = tp_dst; - - info->key.u.ipv6.src = *saddr; - info->key.u.ipv6.dst = *daddr; - - info->key.tos = tos; - info->key.ttl = ttl; - info->key.label = label; - - return tun_dst; -} - -static inline struct metadata_dst *rpl_ipv6_tun_rx_dst(struct sk_buff *skb, - __be16 flags, - __be64 tunnel_id, - int md_size) -{ - const struct ipv6hdr *ip6h = ipv6_hdr(skb); - - return rpl__ipv6_tun_set_dst(&ip6h->saddr, &ip6h->daddr, - ipv6_get_dsfield(ip6h), ip6h->hop_limit, - 0, ip6_flowlabel(ip6h), flags, tunnel_id, - md_size); -} - static int ip6gre_rcv(struct sk_buff *skb, const struct tnl_ptk_info *tpi) { const struct ipv6hdr *ipv6h; diff --git a/datapath/linux/compat/ip_gre.c b/datapath/linux/compat/ip_gre.c index cf8803b..77c5b47 100644 --- a/datapath/linux/compat/ip_gre.c +++ b/datapath/linux/compat/ip_gre.c @@ -95,89 +95,11 @@ static __be32 tunnel_id_to_key(__be64 x) #endif } -static struct dst_ops md_dst_ops = { +/* Normally in net/core/dst.c but move it here */ +struct dst_ops md_dst_ops = { .family = AF_UNSPEC, }; -#ifndef DST_METADATA -#define DST_METADATA 0x0080 -#endif - -static void rpl__metadata_dst_init(struct metadata_dst *md_dst, - enum metadata_type type, u8 optslen) - -{ - struct dst_entry *dst; - - dst = &md_dst->dst; - dst_init(dst, &md_dst_ops, NULL, 1, DST_OBSOLETE_NONE, - DST_METADATA | DST_NOCOUNT); - -#if 0 - /* unused in OVS */ - dst->input = dst_md_discard; - dst->output = dst_md_discard_out; -#endif - memset(dst + 1, 0, sizeof(*md_dst) + optslen - sizeof(*dst)); - md_dst->type = type; -} - -static struct metadata_dst *erspan_rpl_metadata_dst_alloc(u8 optslen, enum metadata_type type, - gfp_t flags) -{ - struct metadata_dst *md_dst; - - md_dst = kmalloc(sizeof(*md_dst) + optslen, flags); - if (!md_dst) - return NULL; - - rpl__metadata_dst_init(md_dst, type, optslen); - - return md_dst; -} -static inline struct metadata_dst *rpl_tun_rx_dst(int md_size) -{ - struct metadata_dst *tun_dst; - - tun_dst = erspan_rpl_metadata_dst_alloc(md_size, METADATA_IP_TUNNEL, GFP_ATOMIC); - if (!tun_dst) - return NULL; - - tun_dst->u.tun_info.options_len = 0; - tun_dst->u.tun_info.mode = 0; - return tun_dst; -} -static inline struct metadata_dst *rpl__ip_tun_set_dst(__be32 saddr, - __be32 daddr, - __u8 tos, __u8 ttl, - __be16 tp_dst, - __be16 flags, - __be64 tunnel_id, - int md_size) -{ - struct metadata_dst *tun_dst; - - tun_dst = rpl_tun_rx_dst(md_size); - if (!tun_dst) - return NULL; - - ip_tunnel_key_init(&tun_dst->u.tun_info.key, - saddr, daddr, tos, ttl, - 0, 0, tp_dst, tunnel_id, flags); - return tun_dst; -} - -static inline struct metadata_dst *rpl_ip_tun_rx_dst(struct sk_buff *skb, - __be16 flags, - __be64 tunnel_id, - int md_size) -{ - const struct iphdr *iph = ip_hdr(skb); - - return rpl__ip_tun_set_dst(iph->saddr, iph->daddr, iph->tos, iph->ttl, - 0, flags, tunnel_id, md_size); -} - static int erspan_rcv(struct sk_buff *skb, struct tnl_ptk_info *tpi, int gre_hdr_len) { From patchwork Wed Jul 3 17:04:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Rose X-Patchwork-Id: 1126990 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="LQLPQwJ8"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45f6ts6PMfz9s8m for ; Thu, 4 Jul 2019 03:05:41 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id EE031E82; Wed, 3 Jul 2019 17:05:02 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 1C871E3F for ; Wed, 3 Jul 2019 17:05:02 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id AB30F834 for ; Wed, 3 Jul 2019 17:05:01 +0000 (UTC) Received: by mail-pg1-f196.google.com with SMTP id o13so1538171pgp.12 for ; Wed, 03 Jul 2019 10:05:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0eA//77GaAsrmCUBbf+wg76ssgtR7oqOEg15TGkLIj4=; b=LQLPQwJ80LHIUj99WBGkHX6Xq3DnOGnmrerAlwRSIX8ydghGkpxv+sz2rcVhyCf9tY RHrZTYWes09KNfpG8EMIx28d2V8gtiv/TtBVQkywI9A4M3iQ/LQ7WUdo6E6N3ciVu4OH cduXND+CTAxhhc5Si4yvj21Usfqlb4H2b01wiqOVoQIIOvmoRwNwY8wpx0wEiLga+GbH 6MzelOf+1YGRtWk5H10MFRx7RHMsekCfiNqeZqqxtmo+At8ga9ttm6b2YFX8PuJ0C1C3 FaeIvhTEWiiD0wAWZVuGeekGD2QQiXXx/elhlZ8WRjMzBFC6nINIiZrgfMl7HW9Hrd5I DIUQ== 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=0eA//77GaAsrmCUBbf+wg76ssgtR7oqOEg15TGkLIj4=; b=LOobRZutqIsnpFvszFJJfWvwbP7lKpe/g2gYUeqfw0YmCJogtapZ9aZlR0JJ/LBZyj BoBQa/or0x6Wi5CcQs0p0fhQD4cdNEcKLp22vSZw2RNOaqHAkfz9W8LKD3KJh4SCVCKP dvmJnXHY2fP5fLSxKWrfnLECzp5+J8GNURqD6z8vv4D03yMA0waTDbVlvXin+MR1fCfR c2yN6X1VmOHxsXSxhL571t/smbjGb+hDkdJxf7yco6UottTwBkTUvrfdRaPsxKR8hxR3 nPYeUB7HqM2naG1qBLkWeKGwF4Qb81OOJftXCfAz050+MaMU9FO5d0cZswijfvQf0CeR KuDg== X-Gm-Message-State: APjAAAWW9qLkfRQqlo6x4Scs3ycDsnvlKhMgn463wDk+s+ReSunKYB5q M+TFXJ+q8+/5BV6mpkKvcVdmeHDf X-Google-Smtp-Source: APXvYqzs1B3mIADhV7Uo+sY+6M+a+uoAJIS6KPiYebfj9u6SztI0PGcj5buC1mdJO04IE9+jRHSKDQ== X-Received: by 2002:a17:90a:1c17:: with SMTP id s23mr14079685pjs.108.1562173500825; Wed, 03 Jul 2019 10:05:00 -0700 (PDT) Received: from gizo.domain (97-115-113-19.ptld.qwest.net. [97.115.113.19]) by smtp.gmail.com with ESMTPSA id a10sm2313061pgq.2.2019.07.03.10.04.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jul 2019 10:04:59 -0700 (PDT) From: Greg Rose To: dev@openvswitch.org Date: Wed, 3 Jul 2019 10:04:54 -0700 Message-Id: <1562173495-24586-2-git-send-email-gvrose8192@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1562173495-24586-1-git-send-email-gvrose8192@gmail.com> References: <1562173495-24586-1-git-send-email-gvrose8192@gmail.com> X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH V2 2/3] compat: Clean up gre_calc_hlen X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org It's proliferated throughout three .c files so let's pull them all together in gre.h where the inline function belongs. This requires some adjustments to the compat layer so that the various iterations of gre_calc_hlen and ip_gre_calc_hlen since the 3.10 kernel are handled correctly. Signed-off-by: Greg Rose Acked-by: William Tu --- acinclude.m4 | 4 ++++ datapath/linux/compat/gre.c | 15 --------------- datapath/linux/compat/include/net/gre.h | 21 +++++++++++++++++++++ datapath/linux/compat/ip6_gre.c | 14 -------------- datapath/linux/compat/ip_gre.c | 18 ++++-------------- 5 files changed, 29 insertions(+), 43 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 321a741..b8c9d6c 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -966,6 +966,10 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_helper.h], [nf_ct_helper_ext_add], [nf_conntrack_helper], [OVS_DEFINE([HAVE_NF_CT_HELPER_EXT_ADD_TAKES_HELPER])]) + OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [gre_calc_hlen], + [OVS_DEFINE([HAVE_GRE_CALC_HLEN])]) + OVS_GREP_IFELSE([$KSRC/include/net/gre.h], [ip_gre_calc_hlen], + [OVS_DEFINE([HAVE_IP_GRE_CALC_HLEN])]) if cmp -s datapath/linux/kcompat.h.new \ datapath/linux/kcompat.h >/dev/null 2>&1; then diff --git a/datapath/linux/compat/gre.c b/datapath/linux/compat/gre.c index 2b14c5a..e57528f 100644 --- a/datapath/linux/compat/gre.c +++ b/datapath/linux/compat/gre.c @@ -139,21 +139,6 @@ void rpl_gre_exit(void) } EXPORT_SYMBOL_GPL(rpl_gre_exit); -#define ip_gre_calc_hlen rpl_ip_gre_calc_hlen -#define gre_calc_hlen rpl_ip_gre_calc_hlen -static int rpl_ip_gre_calc_hlen(__be16 o_flags) -{ - int addend = 4; - - if (o_flags & TUNNEL_CSUM) - addend += 4; - if (o_flags & TUNNEL_KEY) - addend += 4; - if (o_flags & TUNNEL_SEQ) - addend += 4; - return addend; -} - void rpl_gre_build_header(struct sk_buff *skb, const struct tnl_ptk_info *tpi, int hdr_len) { diff --git a/datapath/linux/compat/include/net/gre.h b/datapath/linux/compat/include/net/gre.h index 58fa97a..57293b6 100644 --- a/datapath/linux/compat/include/net/gre.h +++ b/datapath/linux/compat/include/net/gre.h @@ -56,6 +56,27 @@ static inline struct net_device *rpl_gretap_fb_dev_create( #else #include_next +#ifndef HAVE_GRE_CALC_HLEN +static inline int gre_calc_hlen(__be16 o_flags) +{ + int addend = 4; + + if (o_flags & TUNNEL_CSUM) + addend += 4; + if (o_flags & TUNNEL_KEY) + addend += 4; + if (o_flags & TUNNEL_SEQ) + addend += 4; + return addend; +} + +#define ip_gre_calc_hlen gre_calc_hlen +#else +#ifdef HAVE_IP_GRE_CALC_HLEN +#define gre_calc_hlen ip_gre_calc_hlen +#endif +#endif + #define tnl_flags_to_gre_flags rpl_tnl_flags_to_gre_flags static inline __be16 rpl_tnl_flags_to_gre_flags(__be16 tflags) { diff --git a/datapath/linux/compat/ip6_gre.c b/datapath/linux/compat/ip6_gre.c index 850e703..a95c5f8 100644 --- a/datapath/linux/compat/ip6_gre.c +++ b/datapath/linux/compat/ip6_gre.c @@ -83,20 +83,6 @@ static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t); static void ip6gre_tnl_link_config(struct ip6_tnl *t, int set_mtu); static void ip6erspan_tnl_link_config(struct ip6_tnl *t, int set_mtu); -#define gre_calc_hlen rpl_ip_gre_calc_hlen -static int rpl_ip_gre_calc_hlen(__be16 o_flags) -{ - int addend = 4; - - if (o_flags & TUNNEL_CSUM) - addend += 4; - if (o_flags & TUNNEL_KEY) - addend += 4; - if (o_flags & TUNNEL_SEQ) - addend += 4; - return addend; -} - /* Tunnel hash table */ /* diff --git a/datapath/linux/compat/ip_gre.c b/datapath/linux/compat/ip_gre.c index 77c5b47..6766661 100644 --- a/datapath/linux/compat/ip_gre.c +++ b/datapath/linux/compat/ip_gre.c @@ -71,20 +71,6 @@ static void erspan_build_header(struct sk_buff *skb, static bool ip_gre_loaded = false; -#define ip_gre_calc_hlen rpl_ip_gre_calc_hlen -static int ip_gre_calc_hlen(__be16 o_flags) -{ - int addend = 4; - - if (o_flags & TUNNEL_CSUM) - addend += 4; - if (o_flags & TUNNEL_KEY) - addend += 4; - if (o_flags & TUNNEL_SEQ) - addend += 4; - return addend; -} - /* Returns the least-significant 32 bits of a __be64. */ static __be32 tunnel_id_to_key(__be64 x) { @@ -100,6 +86,10 @@ struct dst_ops md_dst_ops = { .family = AF_UNSPEC, }; +#ifndef ip_gre_calc_hlen +#define ip_gre_calc_hlen gre_calc_hlen +#endif + static int erspan_rcv(struct sk_buff *skb, struct tnl_ptk_info *tpi, int gre_hdr_len) { From patchwork Wed Jul 3 17:04:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Rose X-Patchwork-Id: 1126991 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="el9jscg+"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45f6vT6qzHz9s8m for ; Thu, 4 Jul 2019 03:06:13 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 99731E8E; Wed, 3 Jul 2019 17:05:03 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 0BFB0E88 for ; Wed, 3 Jul 2019 17:05:03 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id C0E03834 for ; Wed, 3 Jul 2019 17:05:02 +0000 (UTC) Received: by mail-pf1-f194.google.com with SMTP id p184so1574186pfp.7 for ; Wed, 03 Jul 2019 10:05:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6oK9xrrlpbJ13uG39WYAwaoHRC9Hu6jhpMeVyrooACo=; b=el9jscg+oPEYnqdY3tqdjfxjhqxGSopEx2KqtFQm8n7rd/vVnmUz35t9lOIZImkS8q YRAGtU7Ui79j99F+F/1QiG4xzUKxv/1PyJQA2OOkdREpZuDB6oYmc5us3x3/07zHFRkb V33MG/B7TU4RYm+nd+EWifYazRY4Pkry33TrPzTIYKlxH3NY1FcKvyz6Wj/a1br3+wPl P283ffb4EkO4j/+GxnBdD3ImvAlyVT4GEpEH3l1bfP6VXDD7rXEkCCeTmSBG/LxeE6MS hscUAuXxAKo3OLzvHuXf4lKXwElzdiMi4SAGDwfoQW5HSYGi3FHe4dbat4UPFw4kdYEo +DGw== 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=6oK9xrrlpbJ13uG39WYAwaoHRC9Hu6jhpMeVyrooACo=; b=V13k89Wzvpj4EZMAveg8VnXLlNKhQ6duXsuV48o8+0sYXdNzDCpBFAeQKvt4RAW9Jc JD7ljYMyAQuIAe43B5LWyb4eet1iAsSk8dz5JM3XmK698DHw1Oa6XskENTYxYRqCx+We i/KwD9jP1sC67DCb3eiVvt6IQ2yL0skZwYYf8FKOcUzNJKDxPUUa2DY+kcokqLWfVJ4D FWluMlIEd6C5GCa5AsQGV+HDwXmG8wvTMVYKENaXRGtBSSkIWGfsPwsCInqKFNBNBWVy Vnss9mJSbdpdBUA2bASrxmYcTXTDgEtg7nV11NBf0pgt3dPeIM12lntYf5FZF0aE+k+d zFGQ== X-Gm-Message-State: APjAAAXDpzclPdJyctAJQNlkCnZT/A7sl9cEJk5JjZD6fwYmMBaY9W6b XFtwsdUFcScEwLva4HEyCMn0QPV2 X-Google-Smtp-Source: APXvYqx+KnPcKtrhH6t8ogndtNKpM93sSoqIfRtyYse7fWj0Yd28TC8dP4zCfy/x/lK69/Wa8eLasw== X-Received: by 2002:a17:90a:a410:: with SMTP id y16mr14111447pjp.62.1562173501953; Wed, 03 Jul 2019 10:05:01 -0700 (PDT) Received: from gizo.domain (97-115-113-19.ptld.qwest.net. [97.115.113.19]) by smtp.gmail.com with ESMTPSA id a10sm2313061pgq.2.2019.07.03.10.05.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jul 2019 10:05:01 -0700 (PDT) From: Greg Rose To: dev@openvswitch.org Date: Wed, 3 Jul 2019 10:04:55 -0700 Message-Id: <1562173495-24586-3-git-send-email-gvrose8192@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1562173495-24586-1-git-send-email-gvrose8192@gmail.com> References: <1562173495-24586-1-git-send-email-gvrose8192@gmail.com> X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH V2 3/3] compat: Clean up tunnel_id_to_key X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org This function was just a duplicate of tunnel_id_to_key32 - I'm not sure why it was ever needed but let's dump it now. Signed-off-by: Greg Rose Acked-by: William Tu --- datapath/linux/compat/ip_gre.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/datapath/linux/compat/ip_gre.c b/datapath/linux/compat/ip_gre.c index 6766661..2015d59 100644 --- a/datapath/linux/compat/ip_gre.c +++ b/datapath/linux/compat/ip_gre.c @@ -71,16 +71,6 @@ static void erspan_build_header(struct sk_buff *skb, static bool ip_gre_loaded = false; -/* Returns the least-significant 32 bits of a __be64. */ -static __be32 tunnel_id_to_key(__be64 x) -{ -#ifdef __BIG_ENDIAN - return (__force __be32)x; -#else - return (__force __be32)((__force u64)x >> 32); -#endif -} - /* Normally in net/core/dst.c but move it here */ struct dst_ops md_dst_ops = { .family = AF_UNSPEC, @@ -474,7 +464,7 @@ netdev_tx_t rpl_gre_fb_xmit(struct sk_buff *skb) flags = tun_info->key.tun_flags & (TUNNEL_CSUM | TUNNEL_KEY); build_header(skb, tunnel_hlen, flags, htons(ETH_P_TEB), - tunnel_id_to_key(tun_info->key.tun_id), 0); + tunnel_id_to_key32(tun_info->key.tun_id), 0); df = key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; iptunnel_xmit(skb->sk, rt, skb, fl.saddr, key->u.ipv4.dst, IPPROTO_GRE,