[v2] batctl: Add per interface hop penalty command
Commit Message
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>
---
README.rst | 7 ++++++-
event.c | 4 ++++
hop_penalty.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
man/batctl.8 | 4 ++++
4 files changed, 61 insertions(+), 1 deletion(-)
Comments
On Thu, Jun 04, 2020 at 09:43:53PM +0200, Linus Lüssing wrote:
> 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>
> ---
> README.rst | 7 ++++++-
> event.c | 4 ++++
> hop_penalty.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
> man/batctl.8 | 4 ++++
> 4 files changed, 61 insertions(+), 1 deletion(-)
Changelog v2:
* merged if_hop_penalty.c into hop_penalty.c (saved some duplicate
code)
* added and tested hardif event monitor for the hop penalty
attribute
@@ -562,8 +562,13 @@ Usage::
Example::
- $ batctl penalty
+ $ 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
@@ -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]));
@@ -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");
@@ -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.