From patchwork Thu Mar 1 00:11:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 879504 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; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ahY2Q8c4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsCYB0N1Zz9s3F for ; Thu, 1 Mar 2018 11:12:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965253AbeCAAML (ORCPT ); Wed, 28 Feb 2018 19:12:11 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:38470 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965242AbeCAAMI (ORCPT ); Wed, 28 Feb 2018 19:12:08 -0500 Received: by mail-pg0-f67.google.com with SMTP id l24so1605264pgc.5 for ; Wed, 28 Feb 2018 16:12:08 -0800 (PST) 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=+lbihLpbYKpTLf8rpS6iUDDZqhypXpONlIxW+t/eLeA=; b=ahY2Q8c4gHm9yx6eJ5sH+vyHJzEg4TdJYMgAtDpIm/1lSaSiLFxDItjd6C6i+1hOAp kIu1934Hs8BuPflXmnsRBBlhsGlIbdSbj7K2IojgkEtCsyoKDmzym6q06EUyKCXxIAtP 4nIDCztB9eejjQA61wx8P/s6yab9mAOnaOiK7qHRzaasbqYBRXBarSkLVvC1uNRVkyHU KomvNOPyX/tc3g25nYwaViVmucZOHiDRRU8WIKf+XcHxLo3kSPgVitPG9cO3UVHM5Ck5 GL14fbl+m8ThMhydteA+DXp9KiXcck9RDktN6XrO21W0rxK4pqmOjXKI9ttkHgr4UN3+ Z7TA== 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=+lbihLpbYKpTLf8rpS6iUDDZqhypXpONlIxW+t/eLeA=; b=RiM+vzu2IwpK249r+0d5lI+rAk8qI9dwFggjDsmYY+WZnez2oah6pxadnImJ7luG8U lRPcs3LNH3u33yqrQ+gHzJZhLhhOdGWN9YQanVKClXarf+S1JS6NPqiyGa0wNVdTMam1 p4qdDohDMRkYdnAL02yh9/Ga7dfrReAvC9BXSANuKuF76y2Artkwp+8RnX8DT3oPGco2 U6X6cRToY4ukBS7cN1uH98Yf7MRpeaNuMn3oMrYXDko4Mlt2vA4G8YS6g4JZvCoQqFBT iQJlZV1ncm3fqK4Z78rWE6nV+HnQjy8bYu9Coh6jx8l3T9N+OB9k9nuUP1fCVkpYblsp Tuyw== X-Gm-Message-State: APf1xPAtFMh9BkpOKczPlsy3IFHb3T0jkpHhv2eQJ+r+sfSewklvRg3K XUM0MHg4mp5PyW2fXq4U406sp2UG X-Google-Smtp-Source: AG47ELtV0/qVihOYvboSKR/OejHCvxawc5a8NfUdc/bhd0jZT5b1u/NYyAdxyq/GOcNdq1U+8e5kLw== X-Received: by 10.98.178.17 with SMTP id x17mr10199624pfe.2.1519863128053; Wed, 28 Feb 2018 16:12:08 -0800 (PST) Received: from sc9-mailhost3.vmware.com ([66.170.99.2]) by smtp.gmail.com with ESMTPSA id u133sm4158057pgc.93.2018.02.28.16.12.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 28 Feb 2018 16:12:07 -0800 (PST) From: William Tu To: netdev@vger.kernel.org Cc: daniel@iogearbox.net, ast@kernel.org Subject: [PATCH net-next 1/2] gre: add sequence number for collect md mode. Date: Wed, 28 Feb 2018 16:11:40 -0800 Message-Id: <1519863101-112083-2-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1519863101-112083-1-git-send-email-u9012063@gmail.com> References: <1519863101-112083-1-git-send-email-u9012063@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently GRE sequence number can only be used in native tunnel mode. This patch adds sequence number support for gre collect metadata mode. RFC2890 defines GRE sequence number to be specific to the traffic flow identified by the key. However, this patch does not implement per-key seqno. The sequence number is shared in the same tunnel device. That is, different tunnel keys using the same collect_md tunnel share single sequence number. Signed-off-by: William Tu --- include/uapi/linux/bpf.h | 1 + net/core/filter.c | 4 +++- net/ipv4/ip_gre.c | 7 +++++-- net/ipv6/ip6_gre.c | 13 ++++++++----- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index db6bdc375126..2c6dd942953d 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -800,6 +800,7 @@ enum bpf_func_id { /* BPF_FUNC_skb_set_tunnel_key flags. */ #define BPF_F_ZERO_CSUM_TX (1ULL << 1) #define BPF_F_DONT_FRAGMENT (1ULL << 2) +#define BPF_F_GRE_SEQ (1ULL << 3) /* BPF_FUNC_perf_event_output, BPF_FUNC_perf_event_read and * BPF_FUNC_perf_event_read_value flags. diff --git a/net/core/filter.c b/net/core/filter.c index 0c121adbdbaa..010305e0791a 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2991,7 +2991,7 @@ BPF_CALL_4(bpf_skb_set_tunnel_key, struct sk_buff *, skb, struct ip_tunnel_info *info; if (unlikely(flags & ~(BPF_F_TUNINFO_IPV6 | BPF_F_ZERO_CSUM_TX | - BPF_F_DONT_FRAGMENT))) + BPF_F_DONT_FRAGMENT | BPF_F_GRE_SEQ))) return -EINVAL; if (unlikely(size != sizeof(struct bpf_tunnel_key))) { switch (size) { @@ -3025,6 +3025,8 @@ BPF_CALL_4(bpf_skb_set_tunnel_key, struct sk_buff *, skb, info->key.tun_flags |= TUNNEL_DONT_FRAGMENT; if (flags & BPF_F_ZERO_CSUM_TX) info->key.tun_flags &= ~TUNNEL_CSUM; + if (flags & BPF_F_GRE_SEQ) + info->key.tun_flags |= TUNNEL_SEQ; info->key.tun_id = cpu_to_be64(from->tunnel_id); info->key.tos = from->tunnel_tos; diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index 0fe1d69b5df4..95fd225f402e 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -522,6 +522,7 @@ static struct rtable *prepare_fb_xmit(struct sk_buff *skb, static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev, __be16 proto) { + struct ip_tunnel *tunnel = netdev_priv(dev); struct ip_tunnel_info *tun_info; const struct ip_tunnel_key *key; struct rtable *rt = NULL; @@ -545,9 +546,11 @@ static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev, if (gre_handle_offloads(skb, !!(tun_info->key.tun_flags & TUNNEL_CSUM))) goto err_free_rt; - flags = tun_info->key.tun_flags & (TUNNEL_CSUM | TUNNEL_KEY); + flags = tun_info->key.tun_flags & + (TUNNEL_CSUM | TUNNEL_KEY | TUNNEL_SEQ); gre_build_header(skb, tunnel_hlen, flags, proto, - tunnel_id_to_key32(tun_info->key.tun_id), 0); + tunnel_id_to_key32(tun_info->key.tun_id), + (flags | TUNNEL_SEQ) ? htonl(tunnel->o_seqno++) : 0); df = key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index 4f150a394387..16c5dfcbd195 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -695,9 +695,6 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb, else fl6->daddr = tunnel->parms.raddr; - if (tunnel->parms.o_flags & TUNNEL_SEQ) - tunnel->o_seqno++; - /* Push GRE header. */ protocol = (dev->type == ARPHRD_ETHER) ? htons(ETH_P_TEB) : proto; @@ -720,14 +717,20 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb, fl6->flowi6_uid = sock_net_uid(dev_net(dev), NULL); dsfield = key->tos; - flags = key->tun_flags & (TUNNEL_CSUM | TUNNEL_KEY); + flags = key->tun_flags & + (TUNNEL_CSUM | TUNNEL_KEY | TUNNEL_SEQ); tunnel->tun_hlen = gre_calc_hlen(flags); gre_build_header(skb, tunnel->tun_hlen, flags, protocol, - tunnel_id_to_key32(tun_info->key.tun_id), 0); + tunnel_id_to_key32(tun_info->key.tun_id), + (flags | TUNNEL_SEQ) ? htonl(tunnel->o_seqno++) + : 0); } else { + if (tunnel->parms.o_flags & TUNNEL_SEQ) + tunnel->o_seqno++; + gre_build_header(skb, tunnel->tun_hlen, tunnel->parms.o_flags, protocol, tunnel->parms.o_key, htonl(tunnel->o_seqno)); From patchwork Thu Mar 1 00:11:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 879505 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; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="H7xFI2OU"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsCYG27WRz9s1B for ; Thu, 1 Mar 2018 11:12:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965257AbeCAAMQ (ORCPT ); Wed, 28 Feb 2018 19:12:16 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:43959 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965166AbeCAAMJ (ORCPT ); Wed, 28 Feb 2018 19:12:09 -0500 Received: by mail-pg0-f65.google.com with SMTP id e9so1595623pgs.10 for ; Wed, 28 Feb 2018 16:12:09 -0800 (PST) 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=DJddU88zV9AD5cKlzfr5Tp+wEOhddq6Hge23SlWmFns=; b=H7xFI2OUv7doziykGEh07BOV+U9QsvpcrrA+lYKjCC2l6M+qCsRXJhXPBAIEYVcJXg vHgT4HMqeSCmKySNYVE4rNh4plg6+VehVu8j+/utyu5ANlalLAFA83smNANUzqcAQo+u Rax1CyGFfhDI5rQUPNvLowZ/7j5sWZaESH5XHTE1/iswadjCbg5WBeDrmL3kkDWCwVMa FELb0K3Ew7P+9ZpoLPjAa/l4QSSn6q0lwKLjkK5kVIIMuWFmP6dBBYhTYAF+mmUj/FE0 d2EmHELy4aanH1NOwPOgf3t4XOdz4YUq2YvnN6RqaM/lHNhxS8mzdykgxSDO6hwjacPb WKyA== 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=DJddU88zV9AD5cKlzfr5Tp+wEOhddq6Hge23SlWmFns=; b=C67GLmnmlNPPr1Kt0UN5K3QdNnwiu6CJFMsf7knhUafpMLZKv3vIB7I4I1LXY/jvyw jSxpdOmljguFBP5fCs+x6k4ioDLG/aZpz7GZegiFuE3Ow7O9kF1BnL32t8L2vYQZpEI0 aWK5xUbVCXCreq8QDLoiBOfQTDr6th/VYY2f0uHwR1idXSx9JLhbVMg7m+n1g4i7776G BFMn9bPESltrZ3XN5zK5VVwXqWyfTe9zQJR+TIN69fpA0QuIyjhPCq4NmnSXJHuuG7n6 eJ8SNHJymX1GJuVvY8Vf4cOvNaGZJxZz8rOcL7ncsJjk2qriJazAHN/+IKRVanSkRL9D UVoA== X-Gm-Message-State: APf1xPBGE3/J2hFmODwPCWaVEfrRAa1gJM+m+rLcSIGeFp025CwPjWYK 92o52pice8lichdFq/5O1+z8VTxs X-Google-Smtp-Source: AH8x2276HGkImhcBmg+nd0vseaaorHbBvvTZEX+QwddMgvWXqvd0rC9LA7iou8MUEwFyOBqpLlmHeg== X-Received: by 10.98.102.82 with SMTP id a79mr19525095pfc.138.1519863129007; Wed, 28 Feb 2018 16:12:09 -0800 (PST) Received: from sc9-mailhost3.vmware.com ([66.170.99.2]) by smtp.gmail.com with ESMTPSA id u133sm4158057pgc.93.2018.02.28.16.12.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 28 Feb 2018 16:12:08 -0800 (PST) From: William Tu To: netdev@vger.kernel.org Cc: daniel@iogearbox.net, ast@kernel.org Subject: [PATCH net-next 2/2] samples/bpf: add gre sequence number test. Date: Wed, 28 Feb 2018 16:11:41 -0800 Message-Id: <1519863101-112083-3-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1519863101-112083-1-git-send-email-u9012063@gmail.com> References: <1519863101-112083-1-git-send-email-u9012063@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The patch adds tests for GRE sequence number support for metadata mode tunnel. Signed-off-by: William Tu --- samples/bpf/tcbpf2_kern.c | 6 ++++-- samples/bpf/test_tunnel_bpf.sh | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/samples/bpf/tcbpf2_kern.c b/samples/bpf/tcbpf2_kern.c index efdc16d195ff..f9d0db2be21b 100644 --- a/samples/bpf/tcbpf2_kern.c +++ b/samples/bpf/tcbpf2_kern.c @@ -52,7 +52,8 @@ int _gre_set_tunnel(struct __sk_buff *skb) key.tunnel_tos = 0; key.tunnel_ttl = 64; - ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key), BPF_F_ZERO_CSUM_TX); + ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key), + BPF_F_ZERO_CSUM_TX | BPF_F_GRE_SEQ); if (ret < 0) { ERROR(ret); return TC_ACT_SHOT; @@ -92,7 +93,8 @@ int _ip6gretap_set_tunnel(struct __sk_buff *skb) key.tunnel_label = 0xabcde; ret = bpf_skb_set_tunnel_key(skb, &key, sizeof(key), - BPF_F_TUNINFO_IPV6 | BPF_F_ZERO_CSUM_TX); + BPF_F_TUNINFO_IPV6 | BPF_F_ZERO_CSUM_TX | + BPF_F_GRE_SEQ); if (ret < 0) { ERROR(ret); return TC_ACT_SHOT; diff --git a/samples/bpf/test_tunnel_bpf.sh b/samples/bpf/test_tunnel_bpf.sh index 43ce049996ee..01a07fb9efa9 100755 --- a/samples/bpf/test_tunnel_bpf.sh +++ b/samples/bpf/test_tunnel_bpf.sh @@ -23,7 +23,7 @@ function config_device { function add_gre_tunnel { # in namespace ip netns exec at_ns0 \ - ip link add dev $DEV_NS type $TYPE key 2 local 172.16.1.100 remote 172.16.1.200 + ip link add dev $DEV_NS type $TYPE seq key 2 local 172.16.1.100 remote 172.16.1.200 ip netns exec at_ns0 ip link set dev $DEV_NS up ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24 @@ -43,7 +43,7 @@ function add_ip6gretap_tunnel { # in namespace ip netns exec at_ns0 \ - ip link add dev $DEV_NS type $TYPE flowlabel 0xbcdef key 2 \ + ip link add dev $DEV_NS type $TYPE seq flowlabel 0xbcdef key 2 \ local ::11 remote ::22 ip netns exec at_ns0 ip addr add dev $DEV_NS 10.1.1.100/24