From 702211ac5439f49b6dee6ec95f3eac6ad1a268a7 Mon Sep 17 00:00:00 2001 From: David Bauer <mail@david-bauer.net> Date: Sun, 24 Dec 2023 00:17:36 +0100 Subject: [PATCH] routing: remove noflood Patch needs a rebase. Remove in the meantime. Signed-off-by: David Bauer <mail@david-bauer.net> --- .../files/lib/netifd/proto/gluon_bat0.sh | 1 - ...batman-adv-Introduce-no-noflood-mark.patch | 176 ------------- ...0003-batctl-Add-noflood_mark-command.patch | 240 ------------------ 3 files changed, 417 deletions(-) delete mode 100644 patches/packages/routing/0002-batman-adv-Introduce-no-noflood-mark.patch delete mode 100644 patches/packages/routing/0003-batctl-Add-noflood_mark-command.patch diff --git a/package/gluon-mesh-batman-adv/files/lib/netifd/proto/gluon_bat0.sh b/package/gluon-mesh-batman-adv/files/lib/netifd/proto/gluon_bat0.sh index 91ea0d356..8424050f6 100755 --- a/package/gluon-mesh-batman-adv/files/lib/netifd/proto/gluon_bat0.sh +++ b/package/gluon-mesh-batman-adv/files/lib/netifd/proto/gluon_bat0.sh @@ -47,7 +47,6 @@ proto_gluon_bat0_setup() { batctl orig_interval 5000 batctl hop_penalty "$(lookup_uci 'gluon.mesh_batman_adv.hop_penalty' 15)" - batctl noflood_mark 0x4/0x4 case "$gw_mode" in server) diff --git a/patches/packages/routing/0002-batman-adv-Introduce-no-noflood-mark.patch b/patches/packages/routing/0002-batman-adv-Introduce-no-noflood-mark.patch deleted file mode 100644 index 60a56752c..000000000 --- a/patches/packages/routing/0002-batman-adv-Introduce-no-noflood-mark.patch +++ /dev/null @@ -1,176 +0,0 @@ -From: Linus Lüssing <linus.luessing@c0d3.blue> -Date: Sat, 1 May 2021 22:19:03 +0200 -Subject: batman-adv: Introduce no noflood mark - -This mark prevents a multicast packet being flooded through the whole -mesh. The advantage of marking certain multicast packets via e.g. -ebtables instead of dropping is then the following: - -This allows an administrator to let specific multicast packets pass as -long as they are forwarded to a limited number of nodes only and are -therefore creating no burdon to unrelated nodes. - -Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue> - -diff --git a/batman-adv/patches/0034-batman-adv-Introduce-no-noflood-mark.patch b/batman-adv/patches/0034-batman-adv-Introduce-no-noflood-mark.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..8dbde75343f04fb3a643e300856ecfac7dc23e32 ---- /dev/null -+++ b/batman-adv/patches/0034-batman-adv-Introduce-no-noflood-mark.patch -@@ -0,0 +1,156 @@ -+From 25b21382238c783298c0d8defc8c739126c1b54d Mon Sep 17 00:00:00 2001 -+From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@c0d3.blue> -+Date: Sat, 31 Mar 2018 03:36:19 +0200 -+Subject: [PATCH] batman-adv: Introduce no noflood mark -+MIME-Version: 1.0 -+Content-Type: text/plain; charset=UTF-8 -+Content-Transfer-Encoding: 8bit -+ -+This mark prevents a multicast packet being flooded through the whole -+mesh. The advantage of marking certain multicast packets via e.g. -+ebtables instead of dropping is then the following: -+ -+This allows an administrator to let specific multicast packets pass as -+long as they are forwarded to a limited number of nodes only and are -+therefore creating no burdon to unrelated nodes. -+ -+Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue> -+ -+--- -+ -+https://www.open-mesh.org/projects/batman-adv/wiki/Noflood-broadcast-prevention -+ -+Changelog v2: -+ -+* rebased to master -+* sysfs -> netlink -+--- -+ include/uapi/linux/batman_adv.h | 12 ++++++++++++ -+ net/batman-adv/netlink.c | 22 ++++++++++++++++++++++ -+ net/batman-adv/soft-interface.c | 20 ++++++++++++++++++++ -+ net/batman-adv/types.h | 12 ++++++++++++ -+ 4 files changed, 66 insertions(+) -+ -+--- a/include/uapi/linux/batman_adv.h -++++ b/include/uapi/linux/batman_adv.h -+@@ -481,6 +481,18 @@ enum batadv_nl_attrs { -+ */ -+ BATADV_ATTR_MULTICAST_FANOUT, -+ -++ /** -++ * @BATADV_ATTR_NOFLOOD_MARK: the noflood mark which allows to tag -++ * frames which should never be broadcast flooded through the mesh. -++ */ -++ BATADV_ATTR_NOFLOOD_MARK, -++ -++ /** -++ * @BATADV_ATTR_NOFLOOD_MASK: the noflood (bit)mask which allows to tag -++ * frames which should never be broadcast flooded through the mesh. -++ */ -++ BATADV_ATTR_NOFLOOD_MASK, -++ -+ /* add attributes above here, update the policy in netlink.c */ -+ -+ /** -+--- a/net/batman-adv/netlink.c -++++ b/net/batman-adv/netlink.c -+@@ -134,6 +134,8 @@ static const struct nla_policy batadv_ne -+ [BATADV_ATTR_AP_ISOLATION_ENABLED] = { .type = NLA_U8 }, -+ [BATADV_ATTR_ISOLATION_MARK] = { .type = NLA_U32 }, -+ [BATADV_ATTR_ISOLATION_MASK] = { .type = NLA_U32 }, -++ [BATADV_ATTR_NOFLOOD_MARK] = { .type = NLA_U32 }, -++ [BATADV_ATTR_NOFLOOD_MASK] = { .type = NLA_U32 }, -+ [BATADV_ATTR_BONDING_ENABLED] = { .type = NLA_U8 }, -+ [BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED] = { .type = NLA_U8 }, -+ [BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED] = { .type = NLA_U8 }, -+@@ -286,6 +288,14 @@ static int batadv_netlink_mesh_fill(stru -+ bat_priv->isolation_mark_mask)) -+ goto nla_put_failure; -+ -++ if (nla_put_u32(msg, BATADV_ATTR_NOFLOOD_MARK, -++ bat_priv->noflood_mark)) -++ goto nla_put_failure; -++ -++ if (nla_put_u32(msg, BATADV_ATTR_NOFLOOD_MASK, -++ bat_priv->noflood_mark_mask)) -++ goto nla_put_failure; -++ -+ if (nla_put_u8(msg, BATADV_ATTR_BONDING_ENABLED, -+ !!atomic_read(&bat_priv->bonding))) -+ goto nla_put_failure; -+@@ -466,6 +476,18 @@ static int batadv_netlink_set_mesh(struc -+ bat_priv->isolation_mark_mask = nla_get_u32(attr); -+ } -+ -++ if (info->attrs[BATADV_ATTR_NOFLOOD_MARK]) { -++ attr = info->attrs[BATADV_ATTR_NOFLOOD_MARK]; -++ -++ bat_priv->noflood_mark = nla_get_u32(attr); -++ } -++ -++ if (info->attrs[BATADV_ATTR_NOFLOOD_MASK]) { -++ attr = info->attrs[BATADV_ATTR_NOFLOOD_MASK]; -++ -++ bat_priv->noflood_mark_mask = nla_get_u32(attr); -++ } -++ -+ if (info->attrs[BATADV_ATTR_BONDING_ENABLED]) { -+ attr = info->attrs[BATADV_ATTR_BONDING_ENABLED]; -+ -+--- a/net/batman-adv/soft-interface.c -++++ b/net/batman-adv/soft-interface.c -+@@ -175,6 +175,23 @@ static void batadv_interface_set_rx_mode -+ { -+ } -+ -++/** -++ * batadv_send_skb_has_noflood_mark() - check if packet has a noflood mark -++ * @bat_priv: the bat priv with all the soft interface information -++ * @skb: the packet to check -++ * -++ * Return: True if the skb's mark matches a configured noflood mark and -++ * noflood mark mask. False otherwise. -++ */ -++static bool -++batadv_skb_has_noflood_mark(struct batadv_priv *bat_priv, struct sk_buff *skb) -++{ -++ u32 match_mark = skb->mark & bat_priv->noflood_mark_mask; -++ -++ return bat_priv->noflood_mark_mask && -++ match_mark == bat_priv->noflood_mark; -++} -++ -+ static netdev_tx_t batadv_interface_tx(struct sk_buff *skb, -+ struct net_device *soft_iface) -+ { -+@@ -325,6 +342,9 @@ send: -+ if (batadv_dat_snoop_outgoing_arp_request(bat_priv, skb)) -+ brd_delay = msecs_to_jiffies(ARP_REQ_DELAY); -+ -++ if (batadv_skb_has_noflood_mark(bat_priv, skb)) -++ goto dropped; -++ -+ if (batadv_skb_head_push(skb, sizeof(*bcast_packet)) < 0) -+ goto dropped; -+ -+--- a/net/batman-adv/types.h -++++ b/net/batman-adv/types.h -+@@ -1635,6 +1635,18 @@ struct batadv_priv { -+ */ -+ u32 isolation_mark_mask; -+ -++ /** -++ * @noflood_mark: the skb->mark value used to allow directed targeting -++ * only -++ */ -++ u32 noflood_mark; -++ -++ /** -++ * @noflood_mark_mask: bitmask identifying the bits in skb->mark to be -++ * used for the noflood mark -++ */ -++ u32 noflood_mark_mask; -++ -+ /** @bcast_seqno: last sent broadcast packet sequence number */ -+ atomic_t bcast_seqno; -+ diff --git a/patches/packages/routing/0003-batctl-Add-noflood_mark-command.patch b/patches/packages/routing/0003-batctl-Add-noflood_mark-command.patch deleted file mode 100644 index 6659bc319..000000000 --- a/patches/packages/routing/0003-batctl-Add-noflood_mark-command.patch +++ /dev/null @@ -1,240 +0,0 @@ -From: Linus Lüssing <linus.luessing@c0d3.blue> -Date: Sat, 1 May 2021 22:19:41 +0200 -Subject: batctl: Add noflood_mark command - -Adds support for the new 'noflood_mark' setting in batman-adv. - -Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue> - -diff --git a/batctl/patches/0012-batctl-Add-noflood_mark-command.patch b/batctl/patches/0012-batctl-Add-noflood_mark-command.patch -new file mode 100644 -index 0000000000000000000000000000000000000000..1234c56cc0be080de8142f3a563cf4e070c4840a ---- /dev/null -+++ b/batctl/patches/0012-batctl-Add-noflood_mark-command.patch -@@ -0,0 +1,226 @@ -+From c14abebbeb4af76600cd6eb508e5e4e38a436b2f Mon Sep 17 00:00:00 2001 -+From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@c0d3.blue> -+Date: Fri, 26 Apr 2019 19:27:38 +0200 -+Subject: [PATCH] batctl: Add noflood_mark command -+MIME-Version: 1.0 -+Content-Type: text/plain; charset=UTF-8 -+Content-Transfer-Encoding: 8bit -+ -+Adds support for the new 'noflood_mark' setting in batman-adv. -+ -+Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue> -+--- -+Changelog v3: -+* changed command from a noflood tri-state option -+ to a value/mask one similar to the isolation mark -+* noflood.c -> noflood_mark.c -+ -+Changelog v2: -+* added noflood.c -+--- -+ Makefile | 1 + -+ README.rst | 15 ++++++ -+ batman_adv.h | 12 +++++ -+ man/batctl.8 | 23 ++++++++ -+ noflood_mark.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++ -+ 5 files changed, 192 insertions(+) -+ create mode 100644 noflood_mark.c -+ -+--- a/Makefile -++++ b/Makefile -+@@ -69,6 +69,7 @@ $(eval $(call add_command,multicast_mode -+ $(eval $(call add_command,neighbors,y)) -+ $(eval $(call add_command,neighbors_json,y)) -+ $(eval $(call add_command,network_coding,y)) -++$(eval $(call add_command,noflood_mark,y)) -+ $(eval $(call add_command,orig_interval,y)) -+ $(eval $(call add_command,originators,y)) -+ $(eval $(call add_command,originators_json,y)) -+--- a/README.rst -++++ b/README.rst -+@@ -419,6 +419,21 @@ Example:: -+ -+ -+ -++batctl noflood_mark -++======================= -++ -++display or modify noflood_mark setting -++ -++Usage:: -++ -++ batctl noflood_mark|nf $value[/0x$mask] -++ -++* Example 1: ``batctl nf 0x00000001/0xffffffff`` -++* Example 2: ``batctl nf 0x00040000/0xffff0000`` -++* Example 3: ``batctl nf 16`` -++* Example 4: ``batctl nf 0x0f`` -++ -++ -+ batctl translocal -+ ----------------- -+ -+--- a/batman_adv.h -++++ b/batman_adv.h -+@@ -481,6 +481,18 @@ enum batadv_nl_attrs { -+ */ -+ BATADV_ATTR_MULTICAST_FANOUT, -+ -++ /** -++ * @BATADV_ATTR_NOFLOOD_MARK: the noflood mark which allows to tag -++ * frames which should never be broadcast flooded through the mesh. -++ */ -++ BATADV_ATTR_NOFLOOD_MARK, -++ -++ /** -++ * @BATADV_ATTR_NOFLOOD_MASK: the noflood (bit)mask which allows to tag -++ * frames which should never be broadcast flooded through the mesh. -++ */ -++ BATADV_ATTR_NOFLOOD_MASK, -++ -+ /* add attributes above here, update the policy in netlink.c */ -+ -+ /** -+--- /dev/null -++++ b/noflood_mark.c -+@@ -0,0 +1,140 @@ -++// SPDX-License-Identifier: GPL-2.0 -++/* Copyright (C) 2009-2019 B.A.T.M.A.N. contributors: -++ * -++ * Antonio Quartulli <a@unstable.cc> -++ * Linus Lüssing <linus.luessing@c0d3.blue> -++ * -++ * License-Filename: LICENSES/preferred/GPL-2.0 -++ */ -++ -++#include <errno.h> -++#include <stddef.h> -++#include <stdint.h> -++#include <string.h> -++ -++#include "main.h" -++#include "sys.h" -++ -++static struct noflood_mark_data { -++ uint32_t noflood_mark; -++ uint32_t noflood_mask; -++} noflood_mark; -++ -++static int parse_noflood_mark(struct state *state, int argc, char *argv[]) -++{ -++ struct settings_data *settings = state->cmd->arg; -++ struct noflood_mark_data *data = settings->data; -++ char *mask_ptr; -++ char buff[256]; -++ uint32_t mark; -++ uint32_t mask; -++ char *endptr; -++ -++ if (argc != 2) { -++ fprintf(stderr, "Error - incorrect number of arguments (expected 1)\n"); -++ return -EINVAL; -++ } -++ -++ strncpy(buff, argv[1], sizeof(buff)); -++ buff[sizeof(buff) - 1] = '\0'; -++ -++ /* parse the mask if it has been specified, otherwise assume the mask is -++ * the biggest possible -++ */ -++ mask = 0xFFFFFFFF; -++ mask_ptr = strchr(buff, '/'); -++ if (mask_ptr) { -++ *mask_ptr = '\0'; -++ mask_ptr++; -++ -++ /* the mask must be entered in hex base as it is going to be a -++ * bitmask and not a prefix length -++ */ -++ mask = strtoul(mask_ptr, &endptr, 16); -++ if (!endptr || *endptr != '\0') -++ goto inval_format; -++ } -++ -++ /* the mark can be entered in any base */ -++ mark = strtoul(buff, &endptr, 0); -++ if (!endptr || *endptr != '\0') -++ goto inval_format; -++ -++ data->noflood_mask = mask; -++ /* erase bits not covered by the mask */ -++ data->noflood_mark = mark & mask; -++ -++ return 0; -++ -++inval_format: -++ fprintf(stderr, "Error - incorrect number of arguments (expected 1)\n"); -++ fprintf(stderr, "The following formats for mark(/mask) are allowed:\n"); -++ fprintf(stderr, " * 0x12345678\n"); -++ fprintf(stderr, " * 0x12345678/0xabcdef09\n"); -++ return -EINVAL; -++} -++ -++static int print_noflood_mark(struct nl_msg *msg, void *arg) -++{ -++ struct nlattr *attrs[BATADV_ATTR_MAX + 1]; -++ struct nlmsghdr *nlh = nlmsg_hdr(msg); -++ struct genlmsghdr *ghdr; -++ int *result = arg; -++ -++ if (!genlmsg_valid_hdr(nlh, 0)) -++ return NL_OK; -++ -++ ghdr = nlmsg_data(nlh); -++ -++ if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0), -++ genlmsg_len(ghdr), batadv_netlink_policy)) { -++ return NL_OK; -++ } -++ -++ if (!attrs[BATADV_ATTR_NOFLOOD_MARK] || -++ !attrs[BATADV_ATTR_NOFLOOD_MASK]) -++ return NL_OK; -++ -++ printf("0x%08x/0x%08x\n", -++ nla_get_u32(attrs[BATADV_ATTR_NOFLOOD_MARK]), -++ nla_get_u32(attrs[BATADV_ATTR_NOFLOOD_MASK])); -++ -++ *result = 0; -++ return NL_STOP; -++} -++ -++static int get_noflood_mark(struct state *state) -++{ -++ return sys_simple_nlquery(state, BATADV_CMD_GET_MESH, -++ NULL, print_noflood_mark); -++} -++ -++static int set_attrs_noflood_mark(struct nl_msg *msg, void *arg) -++{ -++ struct state *state = arg; -++ struct settings_data *settings = state->cmd->arg; -++ struct noflood_mark_data *data = settings->data; -++ -++ nla_put_u32(msg, BATADV_ATTR_NOFLOOD_MARK, data->noflood_mark); -++ nla_put_u32(msg, BATADV_ATTR_NOFLOOD_MASK, data->noflood_mask); -++ -++ return 0; -++} -++ -++static int set_noflood_mark(struct state *state) -++{ -++ return sys_simple_nlquery(state, BATADV_CMD_SET_MESH, -++ set_attrs_noflood_mark, NULL); -++} -++ -++static struct settings_data batctl_settings_noflood_mark = { -++ .data = &noflood_mark, -++ .parse = parse_noflood_mark, -++ .netlink_get = get_noflood_mark, -++ .netlink_set = set_noflood_mark, -++}; -++ -++COMMAND_NAMED(SUBCOMMAND, noflood_mark, "nf", handle_sys_setting, -++ COMMAND_FLAG_MESH_IFACE | COMMAND_FLAG_NETLINK, -++ &batctl_settings_noflood_mark, -++ "[mark] \tdisplay or modify noflood_mark setting"); -- GitLab