Repository : ssh://git@diktynna/batctl
On branch : master
commit 7641a56409606f64aff1a088cb03823af339df99 Author: Linus L��ssing linus.luessing@c0d3.blue Date: Thu Jun 4 21:43:53 2020 +0200
batctl: Add per interface hop penalty command
This patch extends the hop penalty setting to be configurable not only on a node scope but also on a per hard interface basis.
Signed-off-by: Linus L��ssing linus.luessing@c0d3.blue Signed-off-by: Sven Eckelmann sven@narfation.org
7641a56409606f64aff1a088cb03823af339df99 README.rst | 5 +++++ event.c | 4 ++++ hop_penalty.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ man/batctl.8 | 4 ++++ 4 files changed, 60 insertions(+)
diff --git a/README.rst b/README.rst index 5ffba7f..4830347 100644 --- a/README.rst +++ b/README.rst @@ -564,6 +564,11 @@ Example::
$ batctl hop_penalty 30 + $ batctl hardif eth0 hop_penalty + 0 + $ batctl hardif eth0 hop_penalty 50 + $ batctl hardif eth0 hop_penalty + 50
batctl isolation_mark diff --git a/event.c b/event.c index cebb803..3fbc6cc 100644 --- a/event.c +++ b/event.c @@ -317,6 +317,10 @@ static void event_parse_set_hardif(struct nlattr **attrs)
printf("%s (%s): set hardif:\n", meshif_name, hardif_name);
+ if (attrs[BATADV_ATTR_HOP_PENALTY]) + printf("* hop_penalty %u\n", + nla_get_u8(attrs[BATADV_ATTR_HOP_PENALTY])); + if (attrs[BATADV_ATTR_ELP_INTERVAL]) printf("* elp_interval %u ms\n", nla_get_u32(attrs[BATADV_ATTR_ELP_INTERVAL])); diff --git a/hop_penalty.c b/hop_penalty.c index 1f8f1db..5f1aabc 100644 --- a/hop_penalty.c +++ b/hop_penalty.c @@ -70,6 +70,22 @@ static int get_hop_penalty(struct state *state) NULL, print_hop_penalty); }
+static int get_attrs_hop_penalty_if(struct nl_msg *msg, void *arg) +{ + struct state *state = arg; + + nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX, state->hif); + + return 0; +} + +static int get_hop_penalty_if(struct state *state) +{ + return sys_simple_nlquery(state, BATADV_CMD_GET_HARDIF, + get_attrs_hop_penalty_if, + print_hop_penalty); +} + static int set_attrs_hop_penalty(struct nl_msg *msg, void *arg) { struct state *state = arg; @@ -87,6 +103,24 @@ static int set_hop_penalty(struct state *state) set_attrs_hop_penalty, NULL); }
+static int set_attrs_hop_penalty_if(struct nl_msg *msg, void *arg) +{ + struct state *state = arg; + struct settings_data *settings = state->cmd->arg; + struct hop_penalty_data *data = settings->data; + + nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX, state->hif); + nla_put_u8(msg, BATADV_ATTR_HOP_PENALTY, data->hop_penalty); + + return 0; +} + +static int set_hop_penalty_if(struct state *state) +{ + return sys_simple_nlquery(state, BATADV_CMD_SET_HARDIF, + set_attrs_hop_penalty_if, NULL); +} + static struct settings_data batctl_settings_hop_penalty = { .sysfs_name = "hop_penalty", .data = &hop_penalty, @@ -95,7 +129,20 @@ static struct settings_data batctl_settings_hop_penalty = { .netlink_set = set_hop_penalty, };
+static struct settings_data batctl_settings_hop_penalty_if = { + .sysfs_name = NULL, + .data = &hop_penalty, + .parse = parse_hop_penalty, + .netlink_get = get_hop_penalty_if, + .netlink_set = set_hop_penalty_if, +}; + COMMAND_NAMED(SUBCOMMAND_MIF, hop_penalty, "hp", handle_sys_setting, COMMAND_FLAG_MESH_IFACE | COMMAND_FLAG_NETLINK, &batctl_settings_hop_penalty, "[penalty] \tdisplay or modify hop_penalty setting"); + +COMMAND_NAMED(SUBCOMMAND_HIF, hop_penalty, "hp", handle_sys_setting, + COMMAND_FLAG_MESH_IFACE | COMMAND_FLAG_NETLINK, + &batctl_settings_hop_penalty_if, + "[penalty] \tdisplay or modify hop_penalty setting"); diff --git a/man/batctl.8 b/man/batctl.8 index fedfb21..1737e17 100644 --- a/man/batctl.8 +++ b/man/batctl.8 @@ -109,6 +109,10 @@ disable fragmentation. If no parameter is given the current hop penalty setting is displayed. Otherwise the parameter is used to set the hop penalty. The penalty is can be 0-255 (255 sets originator message's TQ to zero when forwarded by this hop). .br +.IP "[\fBhardif <hardif>\fP] \fBhop_penalty\fP|\fBhp\fP [\fBpenalty\fP]" +If no parameter is given the current hop penalty setting of the hard interface is displayed. Otherwise the parameter is used to set the +hop penalty. The penalty can be 0-255 (255 sets originator message's TQ to zero when forwarded over this interface). +.br .IP "[\fBmeshif <netdev>\fP] \fBnetwork_coding\fP|\fBnc\fP [\fB0\fP|\fB1\fP]" If no parameter is given the current network coding mode setting is displayed. Otherwise the parameter is used to enable or disable network coding.