From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8E7A2C2D0E4 for ; Fri, 13 Nov 2020 02:06:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 453EF20936 for ; Fri, 13 Nov 2020 02:06:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726249AbgKMCGp (ORCPT ); Thu, 12 Nov 2020 21:06:45 -0500 Received: from smtp.netregistry.net ([202.124.241.204]:46828 "EHLO smtp.netregistry.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726230AbgKMCGo (ORCPT ); Thu, 12 Nov 2020 21:06:44 -0500 Received: from 124-148-94-203.tpgi.com.au ([124.148.94.203]:42516 helo=192-168-1-16.tpgi.com.au) by smtp-1.servers.netregistry.net protocol: esmtpa (Exim 4.84_2 #1 (Debian)) id 1kdOU2-0006ji-UT for ; Fri, 13 Nov 2020 13:06:42 +1100 Date: Fri, 13 Nov 2020 12:06:37 +1000 From: Russell Strong To: netdev@vger.kernel.org Subject: [PATCH net-next] net: DSCP in IPv4 routing Message-ID: <20201113120637.39c45f3f@192-168-1-16.tpgi.com.au> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Authenticated-User: russell@strong.id.au Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org TOS handling in ipv4 routing does not support using dscp. This change widens masks to use the 6 DSCP bits in routing. Tested with ip rule add dsfield EF lookup main ip rule 0: from all lookup local 32765: from all tos EF lookup main 32766: from all lookup main 32767: from all lookup default and verified that lookups are indeed performed from the correct table. This now works instead of failing with "Error: Invalid tos." Signed-off-by: Russell Strong --- include/net/route.h | 2 +- include/uapi/linux/in_route.h | 2 +- include/uapi/linux/ip.h | 2 ++ net/ipv4/fib_rules.c | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/net/route.h b/include/net/route.h index ff021cab657e..519448ad37d0 100644 --- a/include/net/route.h +++ b/include/net/route.h @@ -255,7 +255,7 @@ static inline void ip_rt_put(struct rtable *rt) dst_release(&rt->dst); } -#define IPTOS_RT_MASK (IPTOS_TOS_MASK & ~3) +#define IPTOS_RT_MASK (IPTOS_DS_MASK & ~3) extern const __u8 ip_tos2prio[16]; diff --git a/include/uapi/linux/in_route.h b/include/uapi/linux/in_route.h index 0cc2c23b47f8..db5d236b9c50 100644 --- a/include/uapi/linux/in_route.h +++ b/include/uapi/linux/in_route.h @@ -28,6 +28,6 @@ #define RTCF_NAT (RTCF_DNAT|RTCF_SNAT) -#define RT_TOS(tos) ((tos)&IPTOS_TOS_MASK) +#define RT_TOS(tos) ((tos)&IPTOS_DS_MASK) #endif /* _LINUX_IN_ROUTE_H */ diff --git a/include/uapi/linux/ip.h b/include/uapi/linux/ip.h index e42d13b55cf3..fafd9470ae78 100644 --- a/include/uapi/linux/ip.h +++ b/include/uapi/linux/ip.h @@ -20,6 +20,8 @@ #include #include +#define IPTOS_DS_MASK 0xfc +#define IPTOS_DS(tos) ((tos)&IPTOS_DS_MASK) #define IPTOS_TOS_MASK 0x1E #define IPTOS_TOS(tos) ((tos)&IPTOS_TOS_MASK) #define IPTOS_LOWDELAY 0x10 diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index ce54a30c2ef1..1499105d1efd 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c @@ -229,7 +229,7 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb, int err = -EINVAL; struct fib4_rule *rule4 = (struct fib4_rule *) rule; - if (frh->tos & ~IPTOS_TOS_MASK) { + if (frh->tos & ~IPTOS_RT_MASK) { NL_SET_ERR_MSG(extack, "Invalid tos"); goto errout; } -- 2.26.2