Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp3874040iog; Tue, 28 Jun 2022 04:43:54 -0700 (PDT) X-Google-Smtp-Source: AGRyM1voj4I+SGzklPKCXST02jRazEqiorN0Fk+Jlu/9VO2k6HvZyECHiuF14oC1l/D7yPVJ+3TY X-Received: by 2002:a17:907:6d14:b0:726:34db:89fc with SMTP id sa20-20020a1709076d1400b0072634db89fcmr17261622ejc.406.1656416634355; Tue, 28 Jun 2022 04:43:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656416634; cv=none; d=google.com; s=arc-20160816; b=0++a75mq5W33GODuJc4HRJumcTKo+7IGB9vVmoLzFUqLOimzqay3RiW+pI+v5iXxXT OJX8jyH84f6qsWXrjEUzsn6PNV/YSmX3KJp0ZGo5JGEoijHWXAF5HaMdgK6GyqYrfqci lmv/sOWXaqnOU7BWsv0OOMQPxScQbVZbyrC0OUiwFs+kqF5ztt3LdJsgb0CiFTX6zLzr j3FHvsKnkQFRB1a9hdqZCCRxRnWMH09JZz+aOYTjOJoKU0zpTK3bqbipxP3htqy1NeTB ikrJXRm4lAZmFUP6e/XkAUO9D0Ob2MLJYXNmPSOBBTFO04EE3ggz99DyWC9H58xoWDcL xS9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=5lfcxJNO+F9xpa3SkJlSTyYjH97raLpnZA2sCpZX9j4=; b=mncMsbrM5/YKS1KT4nv38GRMrcPUp/elqaEDo9SPla0KRACCGcjLj3zXTnHCc+Jsyx DHSBAV+uXN45tjWNh6+0h3kkp/T6KDDf9hThMH8NRe416rsuE7k1YItCJgCw4OPzAbVk kvsDYBAcGhBkm4hDwWU0kY66CuHBs5eFBnzaLANpEPVHw8+98ZVyQyUAb7HWX+lX7Onz 0p2P1M0RMPX06fcFXZCskpPt21UAGe+YPr/pZ15UcUE9/0VCleW75xhqLHka2YJ6x25c tw6mJGbajRj9TB2wqjKoCSQEthMv2xng+AHNRuyx9BEQ0g5xmRAOWRGnLT1HMcLCDvEU 2r9A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=uniroma2.it Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j24-20020a17090686d800b0070b8869192asi13976808ejy.451.2022.06.28.04.43.28; Tue, 28 Jun 2022 04:43:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=uniroma2.it Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345434AbiF1LiL (ORCPT + 99 others); Tue, 28 Jun 2022 07:38:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345271AbiF1LiE (ORCPT ); Tue, 28 Jun 2022 07:38:04 -0400 Received: from smtp.uniroma2.it (smtp.uniroma2.it [160.80.6.16]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D4CE33345; Tue, 28 Jun 2022 04:38:01 -0700 (PDT) Received: from localhost.localdomain ([160.80.103.126]) by smtp-2015.uniroma2.it (8.14.4/8.14.4/Debian-8) with ESMTP id 25SBbSQW010288 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 28 Jun 2022 13:37:29 +0200 From: Andrea Mayer To: "David S. Miller" , Hideaki YOSHIFUJI , David Ahern , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Anton Makarov , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: Stefano Salsano , Paolo Lungaroni , Ahmed Abdelsalam , Andrea Mayer Subject: [net-next v3 2/4] seg6: add support for SRv6 H.L2Encaps.Red behavior Date: Tue, 28 Jun 2022 13:36:40 +0200 Message-Id: <20220628113642.3223-3-andrea.mayer@uniroma2.it> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220628113642.3223-1-andrea.mayer@uniroma2.it> References: <20220628113642.3223-1-andrea.mayer@uniroma2.it> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Virus-Scanned: clamav-milter 0.100.0 at smtp-2015 X-Virus-Status: Clean X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The SRv6 H.L2Encaps.Red behavior described in [1] is an optimization of the SRv6 H.L2Encaps behavior [2]. H.L2Encaps.Red reduces the length of the SRH by excluding the first segment (SID) in the SRH of the pushed IPv6 header. The first SID is only placed in the IPv6 Destination Address field of the pushed IPv6 header. When the SRv6 Policy only contains one SID the SRH is omitted, unless there is an HMAC TLV to be carried. [1] - https://datatracker.ietf.org/doc/html/rfc8986#section-5.4 [2] - https://datatracker.ietf.org/doc/html/rfc8986#section-5.3 Signed-off-by: Andrea Mayer Signed-off-by: Anton Makarov --- include/uapi/linux/seg6_iptunnel.h | 1 + net/ipv6/seg6_iptunnel.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/seg6_iptunnel.h b/include/uapi/linux/seg6_iptunnel.h index 538152a7b2c3..a9fa777f16de 100644 --- a/include/uapi/linux/seg6_iptunnel.h +++ b/include/uapi/linux/seg6_iptunnel.h @@ -36,6 +36,7 @@ enum { SEG6_IPTUN_MODE_ENCAP, SEG6_IPTUN_MODE_L2ENCAP, SEG6_IPTUN_MODE_ENCAP_RED, + SEG6_IPTUN_MODE_L2ENCAP_RED, }; #endif diff --git a/net/ipv6/seg6_iptunnel.c b/net/ipv6/seg6_iptunnel.c index 4942073650d3..335ed8788b6e 100644 --- a/net/ipv6/seg6_iptunnel.c +++ b/net/ipv6/seg6_iptunnel.c @@ -40,6 +40,7 @@ static size_t seg6_lwt_headroom(struct seg6_iptunnel_encap *tuninfo) head = sizeof(struct ipv6hdr); break; case SEG6_IPTUN_MODE_L2ENCAP: + case SEG6_IPTUN_MODE_L2ENCAP_RED: return 0; } @@ -407,6 +408,7 @@ static int seg6_do_srh(struct sk_buff *skb) skb->protocol = htons(ETH_P_IPV6); break; case SEG6_IPTUN_MODE_L2ENCAP: + case SEG6_IPTUN_MODE_L2ENCAP_RED: if (!skb_mac_header_was_set(skb)) return -EINVAL; @@ -416,7 +418,13 @@ static int seg6_do_srh(struct sk_buff *skb) skb_mac_header_rebuild(skb); skb_push(skb, skb->mac_len); - err = seg6_do_srh_encap(skb, tinfo->srh, IPPROTO_ETHERNET); + if (tinfo->mode == SEG6_IPTUN_MODE_L2ENCAP) + err = seg6_do_srh_encap(skb, tinfo->srh, + IPPROTO_ETHERNET); + else + err = seg6_do_srh_encap_red(skb, tinfo->srh, + IPPROTO_ETHERNET); + if (err) return err; @@ -638,6 +646,8 @@ static int seg6_build_state(struct net *net, struct nlattr *nla, break; case SEG6_IPTUN_MODE_ENCAP_RED: break; + case SEG6_IPTUN_MODE_L2ENCAP_RED: + break; default: return -EINVAL; } -- 2.20.1