118 lines
4.9 KiB
Diff
118 lines
4.9 KiB
Diff
From: Sven Eckelmann <sven@narfation.org>
|
|
Date: Mon, 10 May 2021 15:05:42 +0200
|
|
Subject: batman-adv: Always send iface index+name in genlmsg
|
|
|
|
The batman-adv netlink messages often contain the interface index and
|
|
interface name in the same message. This makes it easy for the receiver to
|
|
operate on the incoming data when it either needs to print something or
|
|
needs to operate on the interface index.
|
|
|
|
But one of the attributes was missing for:
|
|
|
|
* neighbor table dumps
|
|
* originator table dumps
|
|
* gateway list dumps
|
|
* query of hardif information
|
|
* query of vid information
|
|
|
|
The userspace therefore had to implement special workarounds using
|
|
SIOCGIFNAME or SIOCGIFINDEX depending on what was actually provided.
|
|
Providing both information simplifies the userspace code massively without
|
|
adding a lot of extra overhead in the kernel portion.
|
|
|
|
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
|
Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/77c7d62618259f22f36427eaa62668e6e1c43090
|
|
|
|
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
|
|
index 789f257be24f36ace3e63628a3381a6d46dcccd9..680def809838097a9949de1dc9861923911f3d04 100644
|
|
--- a/net/batman-adv/bat_iv_ogm.c
|
|
+++ b/net/batman-adv/bat_iv_ogm.c
|
|
@@ -1849,6 +1849,8 @@ batadv_iv_ogm_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
|
|
orig_node->orig) ||
|
|
nla_put(msg, BATADV_ATTR_NEIGH_ADDRESS, ETH_ALEN,
|
|
neigh_node->addr) ||
|
|
+ nla_put_string(msg, BATADV_ATTR_HARD_IFNAME,
|
|
+ neigh_node->if_incoming->net_dev->name) ||
|
|
nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX,
|
|
neigh_node->if_incoming->net_dev->ifindex) ||
|
|
nla_put_u8(msg, BATADV_ATTR_TQ, tq_avg) ||
|
|
@@ -2078,6 +2080,8 @@ batadv_iv_ogm_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
|
|
|
|
if (nla_put(msg, BATADV_ATTR_NEIGH_ADDRESS, ETH_ALEN,
|
|
hardif_neigh->addr) ||
|
|
+ nla_put_string(msg, BATADV_ATTR_HARD_IFNAME,
|
|
+ hardif_neigh->if_incoming->net_dev->name) ||
|
|
nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX,
|
|
hardif_neigh->if_incoming->net_dev->ifindex) ||
|
|
nla_put_u32(msg, BATADV_ATTR_LAST_SEEN_MSECS,
|
|
@@ -2459,6 +2463,8 @@ static int batadv_iv_gw_dump_entry(struct sk_buff *msg, u32 portid,
|
|
router->addr) ||
|
|
nla_put_string(msg, BATADV_ATTR_HARD_IFNAME,
|
|
router->if_incoming->net_dev->name) ||
|
|
+ nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX,
|
|
+ router->if_incoming->net_dev->ifindex) ||
|
|
nla_put_u32(msg, BATADV_ATTR_BANDWIDTH_DOWN,
|
|
gw_node->bandwidth_down) ||
|
|
nla_put_u32(msg, BATADV_ATTR_BANDWIDTH_UP,
|
|
diff --git a/net/batman-adv/bat_v.c b/net/batman-adv/bat_v.c
|
|
index eeb3f6d00d8541b377c9703837ef76b05e8d061e..fd7f30f5f3033fd1a9e21518a71e66b557212374 100644
|
|
--- a/net/batman-adv/bat_v.c
|
|
+++ b/net/batman-adv/bat_v.c
|
|
@@ -145,6 +145,8 @@ batadv_v_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
|
|
|
|
if (nla_put(msg, BATADV_ATTR_NEIGH_ADDRESS, ETH_ALEN,
|
|
hardif_neigh->addr) ||
|
|
+ nla_put_string(msg, BATADV_ATTR_HARD_IFNAME,
|
|
+ hardif_neigh->if_incoming->net_dev->name) ||
|
|
nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX,
|
|
hardif_neigh->if_incoming->net_dev->ifindex) ||
|
|
nla_put_u32(msg, BATADV_ATTR_LAST_SEEN_MSECS,
|
|
@@ -297,6 +299,8 @@ batadv_v_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
|
|
if (nla_put(msg, BATADV_ATTR_ORIG_ADDRESS, ETH_ALEN, orig_node->orig) ||
|
|
nla_put(msg, BATADV_ATTR_NEIGH_ADDRESS, ETH_ALEN,
|
|
neigh_node->addr) ||
|
|
+ nla_put_string(msg, BATADV_ATTR_HARD_IFNAME,
|
|
+ neigh_node->if_incoming->net_dev->name) ||
|
|
nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX,
|
|
neigh_node->if_incoming->net_dev->ifindex) ||
|
|
nla_put_u32(msg, BATADV_ATTR_THROUGHPUT, throughput) ||
|
|
@@ -738,6 +742,12 @@ static int batadv_v_gw_dump_entry(struct sk_buff *msg, u32 portid,
|
|
goto out;
|
|
}
|
|
|
|
+ if (nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX,
|
|
+ router->if_incoming->net_dev->ifindex)) {
|
|
+ genlmsg_cancel(msg, hdr);
|
|
+ goto out;
|
|
+ }
|
|
+
|
|
if (nla_put_u32(msg, BATADV_ATTR_BANDWIDTH_DOWN,
|
|
gw_node->bandwidth_down)) {
|
|
genlmsg_cancel(msg, hdr);
|
|
diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c
|
|
index b6a703ddd8e97e6a02e8d73c5728802f090ab419..27f78f0c4aea025b964301e20f972031ab8ad478 100644
|
|
--- a/net/batman-adv/netlink.c
|
|
+++ b/net/batman-adv/netlink.c
|
|
@@ -813,6 +813,10 @@ static int batadv_netlink_hardif_fill(struct sk_buff *msg,
|
|
bat_priv->soft_iface->ifindex))
|
|
goto nla_put_failure;
|
|
|
|
+ if (nla_put_string(msg, BATADV_ATTR_MESH_IFNAME,
|
|
+ bat_priv->soft_iface->name))
|
|
+ goto nla_put_failure;
|
|
+
|
|
if (nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX,
|
|
net_dev->ifindex) ||
|
|
nla_put_string(msg, BATADV_ATTR_HARD_IFNAME,
|
|
@@ -1044,6 +1048,10 @@ static int batadv_netlink_vlan_fill(struct sk_buff *msg,
|
|
bat_priv->soft_iface->ifindex))
|
|
goto nla_put_failure;
|
|
|
|
+ if (nla_put_string(msg, BATADV_ATTR_MESH_IFNAME,
|
|
+ bat_priv->soft_iface->name))
|
|
+ goto nla_put_failure;
|
|
+
|
|
if (nla_put_u32(msg, BATADV_ATTR_VLANID, vlan->vid & VLAN_VID_MASK))
|
|
goto nla_put_failure;
|
|
|