From patchwork Sun Nov 5 18:35:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 834398 X-Patchwork-Delegate: shemminger@vyatta.com 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=gmail.com header.i=@gmail.com header.b="HWhvlNpQ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yVPX8651qz9s7c for ; Mon, 6 Nov 2017 05:35:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751257AbdKESfs (ORCPT ); Sun, 5 Nov 2017 13:35:48 -0500 Received: from mail-oi0-f65.google.com ([209.85.218.65]:50489 "EHLO mail-oi0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750748AbdKESfr (ORCPT ); Sun, 5 Nov 2017 13:35:47 -0500 Received: by mail-oi0-f65.google.com with SMTP id q4so5473168oic.7 for ; Sun, 05 Nov 2017 10:35:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=c56V/CkToZZa4YKcaA+PUMFUz0gt+0+4idy2He60Nb0=; b=HWhvlNpQKQop2HW0zJo+DmDBj7aVpDnHqgXrkLYWWux16zlSdbpdWYajKY+S/hDMiP VMawhDwwjrYNawlyZXh6vAhEBOvESpHGB1fXmEap7lE+pXH46L5a5knapa4mIeBKU0Xk GTvFomWY1BW7DqoK4RbYbds/LOai1sXedWWVhP4e9Lt+k9VYX7/M2bCOC4tU0U+z+X+j c+6S28A/hQSbUubDr6MXvm3Zf/J/L6c0TCPmddvW5R4sVcIsNu/ULm/aaZoHTV8P3xOP ij6fTx+PMTPxX9lMhFtZoWS5u4R0jbzoHuX+Ym0ysRM9K8yXoPDE7jw4rLhdkLLAGUfN joZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=c56V/CkToZZa4YKcaA+PUMFUz0gt+0+4idy2He60Nb0=; b=Qi6gXX3TAWtLvX1ORD0GsYR3qy2cfNxczYhGNS3v96j5DPuSBwO2hKBFhSCEalLhPT nPptC+ch9ikvKFrGGf2sAPrmYuMYwYPuj4SCy2jz5NRlPGtzWJY6IWNPvlyR7GLF4leE A5U4GbGr6h7ACTiO7jRP7h1NTmLYNReMg7W17orgsUeKAX9aaPJZx3U/c3Q/yfPhtupu kx/knuealcP2lM6nol2/zz//vGWFvOcXUVBi33M6RmPHHpxPsJCr9he79ykn7vQLbqtI NIKf4DWrnFLXgd46DuyxAGdtSatHTjfaiJ9hCHehV1UNfeJyNVsrCLlme7seWqMl/oVW bsVw== X-Gm-Message-State: AMCzsaVKErDVtkp4+8RMF8QyhYwwZ70BEqK5t6TvLN4nVdJMaKhiWJ17 MkRW2XLsWzyU9iEMsAHnXBuf36UT X-Google-Smtp-Source: ABhQp+T42SfBtoBHwQViQmGk62QiE0GPa1jXXZRWMYDbWjOw7jVqj/eHEx/NaMgzJrSDQ7PUp3SEqg== X-Received: by 10.202.114.203 with SMTP id p194mr8106084oic.327.1509906946223; Sun, 05 Nov 2017 10:35:46 -0800 (PST) Received: from sc9-mailhost3.vmware.com ([24.5.191.4]) by smtp.gmail.com with ESMTPSA id z6sm5177975ota.43.2017.11.05.10.35.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 05 Nov 2017 10:35:45 -0800 (PST) From: William Tu To: netdev@vger.kernel.org Subject: [PATCH net-next iproute2] ip6_gre: add support for ERSPAN tunnel Date: Sun, 5 Nov 2017 10:35:30 -0800 Message-Id: <1509906930-42639-1-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The patch adds ERSPAN type II tunnel support for IPv6. Signed-off-by: William Tu --- ip/ipaddress.c | 5 +++-- ip/iplink.c | 6 +++--- ip/link_gre6.c | 28 +++++++++++++++++++++++++++- man/man8/ip-address.8.in | 1 + man/man8/ip-link.8.in | 4 ++++ 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 9e9a7e0a6477..c0cd66538ea2 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -77,8 +77,9 @@ static void usage(void) fprintf(stderr, "LFT := forever | SECONDS\n"); fprintf(stderr, "TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | macvtap |\n"); fprintf(stderr, " bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |\n"); - fprintf(stderr, " gre | gretap | erspan | ip6gre | ip6gretap | vti | nlmon | can |\n"); - fprintf(stderr, " bond_slave | ipvlan | geneve | bridge_slave | vrf | hsr | macsec }\n"); + fprintf(stderr, " gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |\n"); + fprintf(stderr, " nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |\n"); + fprintf(stderr, " hsr | macsec\n"); exit(-1); } diff --git a/ip/iplink.c b/ip/iplink.c index 6a96ea9ff56a..be41749af036 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -112,9 +112,9 @@ void iplink_usage(void) "\n" "TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | macvtap |\n" " bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |\n" - " gre | gretap | erspan | ip6gre | ip6gretap | vti | nlmon |\n" - " team_slave | bond_slave | ipvlan | geneve | bridge_slave |\n" - " vrf | macsec }\n"); + " gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan |\n" + " vti | nlmon | team_slave | bond_slave | ipvlan | geneve |\n" + " bridge_slave | vrf | macsec }\n"); } exit(-1); } diff --git a/ip/link_gre6.c b/ip/link_gre6.c index 7d07932a60f0..a738739ff1e8 100644 --- a/ip/link_gre6.c +++ b/ip/link_gre6.c @@ -33,7 +33,7 @@ static void print_usage(FILE *f) { fprintf(f, - "Usage: ... { ip6gre | ip6gretap } [ remote ADDR ]\n" + "Usage: ... { ip6gre | ip6gretap | ip6erspan} [ remote ADDR ]\n" " [ local ADDR ]\n" " [ [i|o]seq ]\n" " [ [i|o]key KEY ]\n" @@ -52,6 +52,7 @@ static void print_usage(FILE *f) " [ [no]encap-csum ]\n" " [ [no]encap-csum6 ]\n" " [ [no]encap-remcsum ]\n" + " [ erspan IDX ]\n" "\n" "Where: ADDR := IPV6_ADDRESS\n" " TTL := { 0..255 } (default=%d)\n" @@ -106,6 +107,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv, __u16 encapdport = 0; int len; __u32 fwmark = 0; + __u32 erspan_idx = 0; if (!(n->nlmsg_flags & NLM_F_CREATE)) { if (rtnl_talk(&rth, &req.n, &req.n, sizeof(req)) < 0) { @@ -180,6 +182,9 @@ get_failed: if (greinfo[IFLA_GRE_FWMARK]) fwmark = rta_getattr_u32(greinfo[IFLA_GRE_FWMARK]); + + if (greinfo[IFLA_GRE_ERSPAN_INDEX]) + erspan_idx = rta_getattr_u32(greinfo[IFLA_GRE_ERSPAN_INDEX]); } while (argc > 0) { @@ -369,6 +374,12 @@ get_failed: encap_limit = uval; flags &= ~IP6_TNL_F_IGN_ENCAP_LIMIT; } + } else if (strcmp(*argv, "erspan") == 0) { + NEXT_ARG(); + if (get_u32(&erspan_idx, *argv, 0)) + invarg("invalid erspan index\n", *argv); + if (erspan_idx & ~((1<<20) - 1) || erspan_idx == 0) + invarg("erspan index must be > 0 and <= 20-bit\n", *argv); } else usage(); argc--; argv++; @@ -387,6 +398,8 @@ get_failed: addattr_l(n, 1024, IFLA_GRE_FLOWINFO, &flowinfo, 4); addattr32(n, 1024, IFLA_GRE_FLAGS, flags); addattr32(n, 1024, IFLA_GRE_FWMARK, fwmark); + if (erspan_idx != 0) + addattr32(n, 1024, IFLA_GRE_ERSPAN_INDEX, erspan_idx); addattr16(n, 1024, IFLA_GRE_ENCAP_TYPE, encaptype); addattr16(n, 1024, IFLA_GRE_ENCAP_FLAGS, encapflags); @@ -554,6 +567,11 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) } } + if (tb[IFLA_GRE_ERSPAN_INDEX]) { + __u32 erspan_idx = rta_getattr_u32(tb[IFLA_GRE_ERSPAN_INDEX]); + fprintf(f, "erspan_index %u ", erspan_idx); + } + if (tb[IFLA_GRE_ENCAP_TYPE] && rta_getattr_u16(tb[IFLA_GRE_ENCAP_TYPE]) != TUNNEL_ENCAP_NONE) { __u16 type = rta_getattr_u16(tb[IFLA_GRE_ENCAP_TYPE]); @@ -636,3 +654,11 @@ struct link_util ip6gretap_link_util = { .print_opt = gre_print_opt, .print_help = gre_print_help, }; + +struct link_util ip6erspan_link_util = { + .id = "ip6erspan", + .maxattr = IFLA_GRE_MAX, + .parse_opt = gre_parse_opt, + .print_opt = gre_print_opt, + .print_help = gre_print_help, +}; diff --git a/man/man8/ip-address.8.in b/man/man8/ip-address.8.in index 988a79652f6f..eaa179c6de91 100644 --- a/man/man8/ip-address.8.in +++ b/man/man8/ip-address.8.in @@ -123,6 +123,7 @@ ip-address \- protocol address management .BR erspan " |" .BR ip6gre " |" .BR ip6gretap " |" +.BR ip6erspan " |" .BR vti " |" .BR vrf " |" .BR nlmon " |" diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in index d96ee28815a7..e4c5346104aa 100644 --- a/man/man8/ip-link.8.in +++ b/man/man8/ip-link.8.in @@ -205,6 +205,7 @@ ip-link \- network device configuration .BR erspan " |" .BR ip6gre " |" .BR ip6gretap " |" +.BR ip6erspan " |" .BR vti " |" .BR nlmon " |" .BR ipvlan " |" @@ -308,6 +309,9 @@ Link types: .BR ip6gretap - Virtual L2 tunnel interface GRE over IPv6 .sp +.BR ip6erspan +- Encapsulated Remote SPAN over GRE and IPv6 +.sp .BR vti - Virtual tunnel interface .sp