From patchwork Fri Nov 4 06:20:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joerg Vehlow X-Patchwork-Id: 1699337 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.openwrt.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=ijZkgtXY; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=jv-coder.de header.i=@jv-coder.de header.a=rsa-sha256 header.s=dkim header.b=eNqtx9U+; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4N3Vwn4p3Cz23lK for ; Fri, 4 Nov 2022 17:25:13 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qinYLlUYRNU3PBy+cysxT0LJKLFcSLtb3HVeyeEs014=; b=ijZkgtXYgromS8 k4FIrtFAiqGJpgMZ3/jZN2yov28Gy1GpSmABrmARz+GwNAJmlt0on7/hQ6RIRUR2upFaCkkb64Hah eGb2YquKNbsg4txcVf4xBqr7bqaGgTViaAj0YXycnB/wvBFVWC3eLzCTP92UhYH3iZ41dt38VwFJ6 Xyrl8T0ATwYZ2vSLThVQp8HvZT25fwWCpOJZiAj48J8NXilH5fFA9BrhoAgMry0nBqwaRqjoAF2KT P0UrpSUtOsjr16EpDtkiAV6f4a+9VLmob6lv812oS5rrAAGYf0YWil4YxuvqmmMH7j0k0kJgMoc9/ KYLdd/fj5RJu2mOvxkAw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oqq69-002W8T-5R; Fri, 04 Nov 2022 06:22:37 +0000 Received: from mail.jv-coder.de ([5.9.79.73]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oqq4l-002VlI-97 for openwrt-devel@lists.openwrt.org; Fri, 04 Nov 2022 06:21:13 +0000 Received: from ubuntu.localdomain (unknown [188.192.100.83]) by mail.jv-coder.de (Postfix) with ESMTPSA id 3D54BA0A59; Fri, 4 Nov 2022 06:21:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jv-coder.de; s=dkim; t=1667542863; bh=8Y7aMajN5QK4t7FR/ET4w+IFmiqQ5nmea1bOi5WBb+0=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=eNqtx9U+lBf6owZuSd/uTvM3NQReT7976ZEE+mMVze+Oo0qdVsOYSxonjZeXS/Kdl X4LmEgxzLqleZfwyQJGcDCIX68my5T+uUMa+hVn5fcLuj2xhHqW8UlRoAITnULgvXY DnRkYyOqISF4YJ+DtzeYe0KO5gWHNUxecd3ctoYI= From: Joerg Vehlow To: openwrt-devel@lists.openwrt.org Cc: Joerg Vehlow Subject: [PATCH 5/6] add device setting for ipv6 hop limit Date: Fri, 4 Nov 2022 07:20:52 +0100 Message-Id: <20221104062053.1236988-6-lkml@jv-coder.de> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221104062053.1236988-1-lkml@jv-coder.de> References: <20221104062053.1236988-1-lkml@jv-coder.de> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,UNPARSEABLE_RELAY autolearn=disabled version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mail X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221103_232111_638739_B2EFDD6D X-CRM114-Status: GOOD ( 13.24 ) X-Spam-Score: -0.2 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Joerg Vehlow --- device.c | 9 +++++++++ device.h | 3 +++ system-linux.c | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/device.c b/device.c index 0860c55..80fa359 100644 --- a/device.c +++ b/device.c @@ -68,6 +68,7 @@ static const struct blobmsg_policy dev_attrs[__DEV_ATTR_MAX] = { [DEV_ATTR_IP6_FORWARDING [...] Content analysis details: (-0.2 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "openwrt-devel" Errors-To: openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org From: Joerg Vehlow --- device.c | 9 +++++++++ device.h | 3 +++ system-linux.c | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/device.c b/device.c index 0860c55..80fa359 100644 --- a/device.c +++ b/device.c @@ -68,6 +68,7 @@ static const struct blobmsg_policy dev_attrs[__DEV_ATTR_MAX] = { [DEV_ATTR_IP6_FORWARDING] = { .name = "ip6_forwarding", .type = BLOBMSG_TYPE_BOOL}, [DEV_ATTR_ARP] = { .name = "arp", .type = BLOBMSG_TYPE_BOOL}, [DEV_ATTR_IP6_ACCEPT_ROUTING_HEADER] = { .name = "ip6_accept_routing_header", .type = BLOBMSG_TYPE_STRING }, + [DEV_ATTR_IP6_HOP_LIMIT] = { .name = "ip6_hop_limit", .type = BLOBMSG_TYPE_INT32}, }; const struct uci_blob_param_list device_attr_list = { @@ -289,6 +290,7 @@ device_merge_settings(struct device *dev, struct device_settings *n) n->ip6_forwarding = s->flags & DEV_OPT_IP6_FORWARDING ? s->ip6_forwarding : os->ip6_forwarding; n->arp = s->flags & DEV_OPT_ARP ? s->arp : os->arp; n->accept_routing_header = s->flags & DEV_OPT_IP6_ACCEPT_ROUTING_HEADER ? s->accept_routing_header : os->accept_routing_header; + n->hop_limit = s->flags & DEV_OPT_IP6_HOP_LIMIT ? s->hop_limit : os->hop_limit; n->flags = s->flags | os->flags | os->valid_flags; } @@ -504,6 +506,11 @@ device_init_settings(struct device *dev, struct blob_attr **tb) } } + if ((cur = tb[DEV_ATTR_IP6_HOP_LIMIT])) { + s->hop_limit = blobmsg_get_u32(cur); + s->flags |= DEV_OPT_IP6_HOP_LIMIT; + } + device_set_disabled(dev, disabled); } @@ -1266,6 +1273,8 @@ device_dump_status(struct blob_buf *b, struct device *dev) blobmsg_add_string(b, "ip6_accept_routing_header", val); } + if (st.flags & DEV_OPT_IP6_HOP_LIMIT) + blobmsg_add_u32(b, "ip6_hop_limit", st.hop_limit); } s = blobmsg_open_table(b, "statistics"); diff --git a/device.h b/device.h index c94a32f..63be0ae 100644 --- a/device.h +++ b/device.h @@ -66,6 +66,7 @@ enum { DEV_ATTR_IP6_FORWARDING, DEV_ATTR_ARP, DEV_ATTR_IP6_ACCEPT_ROUTING_HEADER, + DEV_ATTR_IP6_HOP_LIMIT, __DEV_ATTR_MAX, }; @@ -134,6 +135,7 @@ enum { DEV_OPT_IP6_FORWARDING = (1ULL << 33), DEV_OPT_ARP = (1ULL << 34), DEV_OPT_IP6_ACCEPT_ROUTING_HEADER = (1ULL << 35), + DEV_OPT_IP6_HOP_LIMIT = (1ULL << 36), }; /* events broadcasted to all users of a device */ @@ -215,6 +217,7 @@ struct device_settings { bool ip6_forwarding; bool arp; int accept_routing_header; + int hop_limit; }; /* diff --git a/system-linux.c b/system-linux.c index 66470b6..462a8cc 100644 --- a/system-linux.c +++ b/system-linux.c @@ -477,6 +477,11 @@ static void system_set_ip6_forwarding(struct device *dev, const char *val) system_set_dev_sysctl("ipv6/conf", "forwarding", dev->ifname, val); } +static void system_set_ip6_hop_limit(struct device *dev, const char *val) +{ + system_set_dev_sysctl("ipv6/conf", "hop_limit", dev->ifname, val); +} + static void system_set_ip6_accept_source_route(struct device *dev, int val) { char sval[10]; @@ -663,6 +668,12 @@ static int system_get_accept_source_route(struct device *dev, char *buf, const s dev->ifname, buf, buf_sz); } +static int system_get_ip6_hop_limit(struct device *dev, char *buf, const size_t buf_sz) +{ + return system_get_dev_sysctl("ipv6/conf", "hop_limit", + dev->ifname, buf, buf_sz); +} + /* Evaluate netlink messages */ static int cb_rtnl_event(struct nl_msg *msg, void *arg) { @@ -1855,6 +1866,11 @@ system_if_get_settings(struct device *dev, struct device_settings *s) s->accept_routing_header = strtoul(buf, NULL, 0); s->flags |= DEV_OPT_IP6_ACCEPT_ROUTING_HEADER; } + + if (!system_get_ip6_hop_limit(dev, buf, sizeof(buf))) { + s->hop_limit = strtoul(buf, NULL, 0); + s->flags |= DEV_OPT_IP6_HOP_LIMIT; + } } void @@ -1964,6 +1980,11 @@ system_if_apply_settings(struct device *dev, struct device_settings *s, uint64_t if (apply_mask & DEV_OPT_IP6_ACCEPT_ROUTING_HEADER) system_set_ip6_accept_source_route(dev, s->accept_routing_header); + if (apply_mask & DEV_OPT_IP6_HOP_LIMIT) { + snprintf(buf, sizeof(buf), "%d", s->hop_limit); + system_set_ip6_hop_limit(dev, buf); + } + system_set_ethtool_settings(dev, s); }