From: Sven Eckelmann <sven@narfation.org>
To: b.a.t.m.a.n@lists.open-mesh.org
Subject: Re: [B.A.T.M.A.N.] [PATCHv4 00/12] netns and netlink support
Date: Mon, 09 May 2016 20:29:21 +0200 [thread overview]
Message-ID: <1680132.z76VCK1c2R@bentobox> (raw)
In-Reply-To: <1462817239-18104-1-git-send-email-andrew@lunn.ch>
[-- Attachment #1.1: Type: text/plain, Size: 48822 bytes --]
=2D-nextPart1849581.vX7EfrdFzp
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="us-ascii"
On Monday 09 May 2016 20:07:07 Andrew Lunn wrote:
> This patchset completes netns support, by disabling debugfs entries
> when not in the default name space, and correctly handling interface
> stack loops when the parent is in a different name space.
>
> It additionally adds netlink support for most of the information found
> in debugfs, and is netns awaire.
Attached is a tarball with the v4 version rebased on the two initial patches
from=20the tp_meter patchset. The patches include many TODOs in the kernel-doc
which should be replaced with actual docs.
The batctl patch was not yet rebased.
I've removed following change in your v4 patchset:
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index 71b63e7..0455e54 100644
=2D-- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -1416,7 +1416,8 @@ int batadv_orig_dump(struct sk_buff *msg, struct netlink_callback *cb)
int ret;
int ifindex, hard_ifindex;
=2D ifindex = batadv_netlink_get_ifindex(cb->nlh, BATADV_ATTR_MESH_IFINDEX);
+ ifindex = batadv_netlink_get_ifindex(cb->nlh,
+ BATADV_ATTR_MESH_IFINDEX);
if (!ifindex)
return -EINVAL;
I've also added the diff between your patchset and the one attached tarball. I
hope you can see that nothing evil was done :)
Kind regards,
Sven
=2D-nextPart1849581.vX7EfrdFzp
Content-Disposition: attachment; filename="rebased_split_netlink.tar.gz"
Content-Transfer-Encoding: base64
Content-Type: application/x-compressed-tar; name="rebased_split_netlink.tar.gz"
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
H3LUswEA4AEA
=2D-nextPart1849581.vX7EfrdFzp
Content-Disposition: attachment; filename="andrew_netlink-ecsv_netlink.diff"
Content-Transfer-Encoding: 7Bit
Content-Type: text/x-patch; charset="UTF-8"; name="andrew_netlink-ecsv_netlink.diff"
diff --git a/MAINTAINERS b/MAINTAINERS
index 7e47274..ff0322d 100644
=2D-- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9,4 +9,5 @@ S: Maintained
F: Documentation/ABI/testing/sysfs-class-net-batman-adv
F: Documentation/ABI/testing/sysfs-class-net-mesh
F: Documentation/networking/batman-adv.txt
+F: include/uapi/linux/batman_adv.h
F: net/batman-adv/
diff --git a/include/uapi/linux/batman_adv.h b/include/uapi/linux/batman_adv.h
index 6a97a2c..4c8e526 100644
=2D-- a/include/uapi/linux/batman_adv.h
+++ b/include/uapi/linux/batman_adv.h
@@ -56,7 +56,44 @@ enum batadv_tt_client_flags {
BATADV_TT_CLIENT_TEMP = (1 << 11),
};
=2Denum {
+/**
+ * enum batadv_nl_attrs - batman-adv netlink attributes
+ *
+ * @BATADV_ATTR_UNSPEC: unspecified attribute to catch errors
+ * @BATADV_ATTR_VERSION: batman-adv version string
+ * @BATADV_ATTR_ALGO_NAME: name of routing algorithm
+ * @BATADV_ATTR_MESH_IFINDEX: index of the batman-adv interface
+ * @BATADV_ATTR_MESH_IFNAME: name of the batman-adv interface
+ * @BATADV_ATTR_MESH_ADDRESS: mac address of the batman-adv interface
+ * @BATADV_ATTR_HARD_IFINDEX: index of the non-batman-adv interface
+ * @BATADV_ATTR_HARD_IFNAME: name of the non-batman-adv interface
+ * @BATADV_ATTR_HARD_ADDRESS: mac address of the non-batman-adv interface
+ * @BATADV_ATTR_ACTIVE: TODO
+ * @BATADV_ATTR_ORIG_ADDRESS: TODO
+ * @BATADV_ATTR_TT_ADDRESS: TODO
+ * @BATADV_ATTR_TT_TTVN: TODO
+ * @BATADV_ATTR_TT_LAST_TTVN: TODO
+ * @BATADV_ATTR_TT_CRC32: TODO
+ * @BATADV_ATTR_TT_VID: TODO
+ * @BATADV_ATTR_TT_FLAGS: TODO
+ * @BATADV_ATTR_FLAG_BEST: TODO
+ * @BATADV_ATTR_LAST_SEEN_MSECS: TODO
+ * @BATADV_ATTR_NEIGH_ADDRESS: TODO
+ * @BATADV_ATTR_TQ: TODO
+ * @BATADV_ATTR_THROUGHPUT: TODO
+ * @BATADV_ATTR_BANDWIDTH_UP: TODO
+ * @BATADV_ATTR_BANDWIDTH_DOWN: TODO
+ * @BATADV_ATTR_ROUTER: TODO
+ * @BATADV_ATTR_BLA_OWN: TODO
+ * @BATADV_ATTR_BLA_ADDRESS: TODO
+ * @BATADV_ATTR_BLA_VID: TODO
+ * @BATADV_ATTR_BLA_BACKBONE: TODO
+ * @BATADV_ATTR_BLA_CRC: TODO
+ * @__BATADV_ATTR_AFTER_LAST: internal use
+ * @NUM_BATADV_ATTR: total number of batadv_nl_attrs available
+ * @BATADV_ATTR_MAX: highest attribute number currently defined
+ */
+enum batadv_nl_attrs {
BATADV_ATTR_UNSPEC,
BATADV_ATTR_VERSION,
BATADV_ATTR_ALGO_NAME,
@@ -87,15 +124,32 @@ enum {
BATADV_ATTR_BLA_VID,
BATADV_ATTR_BLA_BACKBONE,
BATADV_ATTR_BLA_CRC,
=2D __BATADV_ATTR_MAX,
+ /* add attributes above here, update the policy in netlink.c */
+ __BATADV_ATTR_AFTER_LAST,
+ NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST,
+ BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1
};
=2D#define BATADV_ATTR_MAX (__BATADV_ATTR_MAX - 1)
=2D
=2Denum {
+/**
+ * enum batadv_nl_commands - supported batman-adv netlink commands
+ *
+ * @BATADV_CMD_UNSPEC: unspecified command to catch errors
+ * @BATADV_CMD_GET_MESH_INFO: Query basic information about batman-adv device
+ * @BATADV_CMD_GET_ROUTING_ALGOS: TODO
+ * @BATADV_CMD_GET_HARDIFS: TODO
+ * @BATADV_CMD_GET_TRANSTABLE_LOCAL: TODO
+ * @BATADV_CMD_GET_TRANSTABLE_GLOBAL: TODO
+ * @BATADV_CMD_GET_ORIGINATORS: TODO
+ * @BATADV_CMD_GET_NEIGHBORS: TODO
+ * @BATADV_CMD_GET_GATEWAYS: TODO
+ * @BATADV_CMD_GET_BLA_CLAIM: TODO
+ * @__BATADV_CMD_AFTER_LAST: internal use
+ * @BATADV_CMD_MAX: highest used command number
+ */
+enum batadv_nl_commands {
BATADV_CMD_UNSPEC,
=2D BATADV_CMD_GET_ROUTING_ALGOS,
BATADV_CMD_GET_MESH_INFO,
+ BATADV_CMD_GET_ROUTING_ALGOS,
BATADV_CMD_GET_HARDIFS,
BATADV_CMD_GET_TRANSTABLE_LOCAL,
BATADV_CMD_GET_TRANSTABLE_GLOBAL,
@@ -103,9 +157,9 @@ enum {
BATADV_CMD_GET_NEIGHBORS,
BATADV_CMD_GET_GATEWAYS,
BATADV_CMD_GET_BLA_CLAIM,
=2D __BATADV_CMD_MAX,
+ /* add new commands above here */
+ __BATADV_CMD_AFTER_LAST,
+ BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1
};
=2D#define BATADV_CMD_MAX (__BATADV_CMD_MAX - 1)
=2D
#endif /* _UAPI_LINUX_BATMAN_ADV_H_ */
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
index 9abfdbb..0558ed2 100644
=2D-- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
@@ -1980,6 +1980,14 @@ next:
seq_puts(seq, "No batman nodes in range ...\n");
}
+/**
+ * batadv_iv_ogm_neigh_get_tq_avg - TODO
+ * @neigh_node: TODO
+ * @if_outgoing: TODO
+ * @tq_avg: TODO
+ *
+ * Return: TODO
+ */
static bool
batadv_iv_ogm_neigh_get_tq_avg(struct batadv_neigh_node *neigh_node,
struct batadv_hard_iface *if_outgoing,
@@ -1997,6 +2005,19 @@ batadv_iv_ogm_neigh_get_tq_avg(struct batadv_neigh_node *neigh_node,
return true;
}
+/**
+ * batadv_iv_ogm_orig_dump_subentry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @orig_node: TODO
+ * @neigh_node: TODO
+ * @best: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -2045,6 +2066,18 @@ batadv_iv_ogm_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_iv_ogm_orig_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @orig_node: TODO
+ * @sub_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -2093,6 +2126,19 @@ batadv_iv_ogm_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_iv_ogm_orig_dump_bucket - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @head: TODO
+ * @idx_s: TODO
+ * @sub: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -2122,6 +2168,13 @@ batadv_iv_ogm_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_iv_ogm_orig_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ */
static void
batadv_iv_ogm_orig_dump(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *bat_priv,
@@ -2202,6 +2255,15 @@ static void batadv_iv_neigh_print(struct batadv_priv *bat_priv,
seq_puts(seq, "No batman nodes in range ...\n");
}
+/**
+ * batadv_iv_ogm_neigh_dump_neigh - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @hardif_neigh: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_hardif_neigh_node *hardif_neigh)
@@ -2232,6 +2294,17 @@ batadv_iv_ogm_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_iv_ogm_neigh_dump_hardif - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @hard_iface: TODO
+ * @idx_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -2257,6 +2330,13 @@ batadv_iv_ogm_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_iv_ogm_neigh_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ * @bat_priv: TODO
+ * @single_hardif: TODO
+ */
static void
batadv_iv_ogm_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *bat_priv,
diff --git a/net/batman-adv/bat_v.c b/net/batman-adv/bat_v.c
index 5daa300..e244b5f 100644
=2D-- a/net/batman-adv/bat_v.c
+++ b/net/batman-adv/bat_v.c
@@ -212,6 +212,15 @@ static void batadv_v_neigh_print(struct batadv_priv *bat_priv,
seq_puts(seq, "No batman nodes in range ...\n");
}
+/**
+ * batadv_v_neigh_dump_neigh - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @hardif_neigh: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_hardif_neigh_node *hardif_neigh)
@@ -246,6 +255,17 @@ batadv_v_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_v_neigh_dump_hardif - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @hard_iface: TODO
+ * @idx_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -270,6 +290,13 @@ batadv_v_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_v_neigh_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ * @bat_priv: TODO
+ * @single_hardif: TODO
+ */
static void
batadv_v_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *bat_priv,
@@ -380,6 +407,19 @@ next:
seq_puts(seq, "No batman nodes in range ...\n");
}
+/**
+ * batadv_v_orig_dump_subentry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @orig_node: TODO
+ * @neigh_node: TODO
+ * @best: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -434,6 +474,18 @@ batadv_v_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_v_orig_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @orig_node: TODO
+ * @sub_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -473,6 +525,19 @@ batadv_v_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_v_orig_dump_bucket - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @head: TODO
+ * @idx_s: TODO
+ * @sub: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -501,6 +566,13 @@ batadv_v_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_v_orig_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ */
static void
batadv_v_orig_dump(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *bat_priv,
diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
index 7f38aea..dedf89e 100644
=2D-- a/net/batman-adv/gateway_client.c
+++ b/net/batman-adv/gateway_client.c
@@ -670,6 +670,16 @@ out:
return 0;
}
+/**
+ * batadv_gw_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @gw_node: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -732,6 +742,13 @@ out:
return ret;
}
+/**
+ * batadv_gw_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
int batadv_gw_dump(struct sk_buff *msg, struct netlink_callback *cb)
{
struct batadv_hard_iface *primary_if = NULL;
diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
index 3127d28..7683da4 100644
=2D-- a/net/batman-adv/main.c
+++ b/net/batman-adv/main.c
@@ -615,6 +615,15 @@ int batadv_algo_seq_print_text(struct seq_file *seq, void *offset)
return 0;
}
+/**
+ * batadv_algo_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_algo_ops: TODO
+ *
+ * Return: TODO
+ */
static int batadv_algo_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_algo_ops *bat_algo_ops)
{
@@ -636,6 +645,13 @@ static int batadv_algo_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_algo_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
int batadv_algo_dump(struct sk_buff *msg, struct netlink_callback *cb)
{
int portid = NETLINK_CB(cb->skb).portid;
diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c
index 671d5b6..c68497f 100644
=2D-- a/net/batman-adv/netlink.c
+++ b/net/batman-adv/netlink.c
@@ -20,6 +20,7 @@
#include <linux/errno.h>
#include <linux/fs.h>
+#include <linux/genetlink.h>
#include <linux/if_ether.h>
#include <linux/init.h>
#include <linux/netdevice.h>
@@ -30,6 +31,8 @@
#include <linux/skbuff.h>
#include <linux/stddef.h>
#include <linux/types.h>
+#include <net/genetlink.h>
+#include <net/netlink.h>
#include <net/sock.h>
#include <uapi/linux/batman_adv.h>
@@ -49,13 +52,51 @@ struct genl_family batadv_netlink_family = {
.netnsok = true,
};
+static struct nla_policy batadv_netlink_policy[NUM_BATADV_ATTR] = {
+ [BATADV_ATTR_VERSION] = { .type = NLA_STRING },
+ [BATADV_ATTR_ALGO_NAME] = { .type = NLA_STRING },
+ [BATADV_ATTR_MESH_IFINDEX] = { .type = NLA_U32 },
+ [BATADV_ATTR_MESH_IFNAME] = { .type = NLA_STRING },
+ [BATADV_ATTR_MESH_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_HARD_IFINDEX] = { .type = NLA_U32 },
+ [BATADV_ATTR_HARD_IFNAME] = { .type = NLA_STRING },
+ [BATADV_ATTR_HARD_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_ACTIVE] = { .type = NLA_FLAG },
+ [BATADV_ATTR_ORIG_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_TT_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_TT_TTVN] = { .type = NLA_U8 },
+ [BATADV_ATTR_TT_LAST_TTVN] = { .type = NLA_U8 },
+ [BATADV_ATTR_TT_CRC32] = { .type = NLA_U32 },
+ [BATADV_ATTR_TT_VID] = { .type = NLA_U16 },
+ [BATADV_ATTR_TT_FLAGS] = { .type = NLA_U32 },
+ [BATADV_ATTR_FLAG_BEST] = { .type = NLA_FLAG },
+ [BATADV_ATTR_LAST_SEEN_MSECS] = { .type = NLA_U32 },
+ [BATADV_ATTR_NEIGH_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_TQ] = { .type = NLA_U8 },
+ [BATADV_ATTR_BANDWIDTH_UP] = { .type = NLA_U32 },
+ [BATADV_ATTR_BANDWIDTH_DOWN] = { .type = NLA_U32 },
+ [BATADV_ATTR_ROUTER] = { .len = ETH_ALEN },
+ [BATADV_ATTR_BLA_OWN] = { .type = NLA_FLAG },
+ [BATADV_ATTR_BLA_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_BLA_VID] = { .type = NLA_U16 },
+ [BATADV_ATTR_BLA_BACKBONE] = { .len = ETH_ALEN },
+ [BATADV_ATTR_BLA_CRC] = { .type = NLA_U16 },
+};
+
+/**
+ * batadv_netlink_mesh_info_put - Fill generic information about mesh interface
+ * @msg: netlink message to be sent back
+ * @soft_iface: interface for which the data should be taken
+ *
+ * Return: 0 on success, < 0 on error
+ */
static int
batadv_netlink_mesh_info_put(struct sk_buff *msg, struct net_device *soft_iface)
{
=2D int ret = -ENOBUFS;
struct batadv_priv *bat_priv = netdev_priv(soft_iface);
struct batadv_hard_iface *primary_if = NULL;
struct net_device *hard_iface;
+ int ret = -ENOBUFS;
if (nla_put_string(msg, BATADV_ATTR_VERSION, BATADV_SOURCE_VERSION) ||
nla_put_string(msg, BATADV_ATTR_ALGO_NAME,
@@ -88,15 +129,22 @@ batadv_netlink_mesh_info_put(struct sk_buff *msg, struct net_device *soft_iface)
return ret;
}
+/**
+ * batadv_netlink_mesh_info_put - Handle BATADV_CMD_GET_MESH_INFO
+ * @skb: received netlink message
+ * @info: receiver information
+ *
+ * Return: 0 on success, < 0 on error
+ */
static int
batadv_netlink_get_mesh_info(struct sk_buff *skb, struct genl_info *info)
{
struct net *net = genl_info_net(info);
=2D int ret;
+ struct net_device *soft_iface;
struct sk_buff *msg = NULL;
void *msg_head;
int ifindex;
=2D struct net_device *soft_iface;
+ int ret;
if (!info->attrs[BATADV_ATTR_MESH_IFINDEX])
return -EINVAL;
@@ -141,6 +189,15 @@ batadv_netlink_get_mesh_info(struct sk_buff *skb, struct genl_info *info)
return genlmsg_reply(msg, info);
}
+/**
+ * batadv_netlink_dump_hardif_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @hard_iface: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_netlink_dump_hardif_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_hard_iface *hard_iface)
@@ -174,6 +231,13 @@ batadv_netlink_dump_hardif_entry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_netlink_dump_hardifs - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_netlink_dump_hardifs(struct sk_buff *msg, struct netlink_callback *cb)
{
@@ -224,23 +288,18 @@ batadv_netlink_dump_hardifs(struct sk_buff *msg, struct netlink_callback *cb)
return msg->len;
}
=2Dstatic struct nla_policy batadv_netlink_policy[BATADV_ATTR_MAX + 1] = {
=2D [BATADV_ATTR_MESH_IFINDEX] = { .type = NLA_U32 },
=2D [BATADV_ATTR_HARD_IFINDEX] = { .type = NLA_U32 },
=2D};
=2D
static struct genl_ops batadv_netlink_ops[] = {
{
=2D .cmd = BATADV_CMD_GET_ROUTING_ALGOS,
+ .cmd = BATADV_CMD_GET_MESH_INFO,
.flags = GENL_ADMIN_PERM,
.policy = batadv_netlink_policy,
=2D .dumpit = batadv_algo_dump,
+ .doit = batadv_netlink_get_mesh_info,
},
{
=2D .cmd = BATADV_CMD_GET_MESH_INFO,
+ .cmd = BATADV_CMD_GET_ROUTING_ALGOS,
.flags = GENL_ADMIN_PERM,
.policy = batadv_netlink_policy,
=2D .doit = batadv_netlink_get_mesh_info,
+ .dumpit = batadv_algo_dump,
},
{
.cmd = BATADV_CMD_GET_HARDIFS,
@@ -286,6 +345,9 @@ static struct genl_ops batadv_netlink_ops[] = {
},
};
+/**
+ * batadv_netlink_register - Register batadv genl netlink family
+ */
void __init batadv_netlink_register(void)
{
int ret;
@@ -296,6 +358,9 @@ void __init batadv_netlink_register(void)
pr_warn("unable to register netlink family");
}
+/**
+ * batadv_netlink_unregister - Unregister batadv genl netlink family
+ */
void batadv_netlink_unregister(void)
{
genl_unregister_family(&batadv_netlink_family);
diff --git a/net/batman-adv/netlink.h b/net/batman-adv/netlink.h
index ae0eeb9..89b7c5b 100644
=2D-- a/net/batman-adv/netlink.h
+++ b/net/batman-adv/netlink.h
@@ -28,6 +28,13 @@ struct nlmsghdr;
void batadv_netlink_register(void);
void batadv_netlink_unregister(void);
+/**
+ * batadv_netlink_get_ifindex - TODO
+ * @nlh: TODO
+ * @attrtype: TODO
+ *
+ * Return: TODO
+ */
static inline int
batadv_netlink_get_ifindex(const struct nlmsghdr *nlh, int attrtype)
{
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index 0455e54..71b63e7 100644
=2D-- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -1416,8 +1416,7 @@ int batadv_orig_dump(struct sk_buff *msg, struct netlink_callback *cb)
int ret;
int ifindex, hard_ifindex;
=2D ifindex = batadv_netlink_get_ifindex(cb->nlh,
=2D BATADV_ATTR_MESH_IFINDEX);
+ ifindex = batadv_netlink_get_ifindex(cb->nlh, BATADV_ATTR_MESH_IFINDEX);
if (!ifindex)
return -EINVAL;
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index be42b12..6a1eba3 100644
=2D-- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -1063,6 +1063,16 @@ out:
return 0;
}
+/**
+ * batadv_tt_local_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @common: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_local_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -1111,6 +1121,17 @@ batadv_tt_local_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_tt_local_dump_bucket - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @head: TODO
+ * @idx_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_local_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -1137,6 +1158,13 @@ batadv_tt_local_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_tt_local_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
int batadv_tt_local_dump(struct sk_buff *msg, struct netlink_callback *cb)
{
struct net *net = sock_net(cb->skb->sk);
@@ -1841,6 +1869,17 @@ out:
return 0;
}
+/**
+ * batadv_tt_global_dump_subentry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @common: TODO
+ * @orig: TODO
+ * @best: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_global_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_tt_common_entry *common,
@@ -1890,6 +1929,17 @@ batadv_tt_global_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_tt_global_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @common: TODO
+ * @sub_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_global_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -1922,6 +1972,18 @@ batadv_tt_global_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_tt_global_dump_bucket - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @head: TODO
+ * @idx_s: TODO
+ * @sub: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_global_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -1949,6 +2011,13 @@ batadv_tt_global_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_tt_global_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
int batadv_tt_global_dump(struct sk_buff *msg, struct netlink_callback *cb)
{
struct net *net = sock_net(cb->skb->sk);
=2D-nextPart1849581.vX7EfrdFzp--
This is a multi-part message in MIME format.
[-- Attachment #1.2: Type: text/plain, Size: 1299 bytes --]
On Monday 09 May 2016 20:07:07 Andrew Lunn wrote:
> This patchset completes netns support, by disabling debugfs entries
> when not in the default name space, and correctly handling interface
> stack loops when the parent is in a different name space.
>
> It additionally adds netlink support for most of the information found
> in debugfs, and is netns awaire.
Attached is a tarball with the v4 version rebased on the two initial patches
from the tp_meter patchset. The patches include many TODOs in the kernel-doc
which should be replaced with actual docs.
The batctl patch was not yet rebased.
I've removed following change in your v4 patchset:
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index 71b63e7..0455e54 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -1416,7 +1416,8 @@ int batadv_orig_dump(struct sk_buff *msg, struct netlink_callback *cb)
int ret;
int ifindex, hard_ifindex;
- ifindex = batadv_netlink_get_ifindex(cb->nlh, BATADV_ATTR_MESH_IFINDEX);
+ ifindex = batadv_netlink_get_ifindex(cb->nlh,
+ BATADV_ATTR_MESH_IFINDEX);
if (!ifindex)
return -EINVAL;
I've also added the diff between your patchset and the one attached tarball. I
hope you can see that nothing evil was done :)
Kind regards,
Sven
[-- Attachment #1.3: rebased_split_netlink.tar.gz --]
[-- Type: application/x-compressed-tar, Size: 19104 bytes --]
[-- Attachment #1.4: andrew_netlink-ecsv_netlink.diff --]
[-- Type: text/x-patch, Size: 21008 bytes --]
diff --git a/MAINTAINERS b/MAINTAINERS
index 7e47274..ff0322d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9,4 +9,5 @@ S: Maintained
F: Documentation/ABI/testing/sysfs-class-net-batman-adv
F: Documentation/ABI/testing/sysfs-class-net-mesh
F: Documentation/networking/batman-adv.txt
+F: include/uapi/linux/batman_adv.h
F: net/batman-adv/
diff --git a/include/uapi/linux/batman_adv.h b/include/uapi/linux/batman_adv.h
index 6a97a2c..4c8e526 100644
--- a/include/uapi/linux/batman_adv.h
+++ b/include/uapi/linux/batman_adv.h
@@ -56,7 +56,44 @@ enum batadv_tt_client_flags {
BATADV_TT_CLIENT_TEMP = (1 << 11),
};
-enum {
+/**
+ * enum batadv_nl_attrs - batman-adv netlink attributes
+ *
+ * @BATADV_ATTR_UNSPEC: unspecified attribute to catch errors
+ * @BATADV_ATTR_VERSION: batman-adv version string
+ * @BATADV_ATTR_ALGO_NAME: name of routing algorithm
+ * @BATADV_ATTR_MESH_IFINDEX: index of the batman-adv interface
+ * @BATADV_ATTR_MESH_IFNAME: name of the batman-adv interface
+ * @BATADV_ATTR_MESH_ADDRESS: mac address of the batman-adv interface
+ * @BATADV_ATTR_HARD_IFINDEX: index of the non-batman-adv interface
+ * @BATADV_ATTR_HARD_IFNAME: name of the non-batman-adv interface
+ * @BATADV_ATTR_HARD_ADDRESS: mac address of the non-batman-adv interface
+ * @BATADV_ATTR_ACTIVE: TODO
+ * @BATADV_ATTR_ORIG_ADDRESS: TODO
+ * @BATADV_ATTR_TT_ADDRESS: TODO
+ * @BATADV_ATTR_TT_TTVN: TODO
+ * @BATADV_ATTR_TT_LAST_TTVN: TODO
+ * @BATADV_ATTR_TT_CRC32: TODO
+ * @BATADV_ATTR_TT_VID: TODO
+ * @BATADV_ATTR_TT_FLAGS: TODO
+ * @BATADV_ATTR_FLAG_BEST: TODO
+ * @BATADV_ATTR_LAST_SEEN_MSECS: TODO
+ * @BATADV_ATTR_NEIGH_ADDRESS: TODO
+ * @BATADV_ATTR_TQ: TODO
+ * @BATADV_ATTR_THROUGHPUT: TODO
+ * @BATADV_ATTR_BANDWIDTH_UP: TODO
+ * @BATADV_ATTR_BANDWIDTH_DOWN: TODO
+ * @BATADV_ATTR_ROUTER: TODO
+ * @BATADV_ATTR_BLA_OWN: TODO
+ * @BATADV_ATTR_BLA_ADDRESS: TODO
+ * @BATADV_ATTR_BLA_VID: TODO
+ * @BATADV_ATTR_BLA_BACKBONE: TODO
+ * @BATADV_ATTR_BLA_CRC: TODO
+ * @__BATADV_ATTR_AFTER_LAST: internal use
+ * @NUM_BATADV_ATTR: total number of batadv_nl_attrs available
+ * @BATADV_ATTR_MAX: highest attribute number currently defined
+ */
+enum batadv_nl_attrs {
BATADV_ATTR_UNSPEC,
BATADV_ATTR_VERSION,
BATADV_ATTR_ALGO_NAME,
@@ -87,15 +124,32 @@ enum {
BATADV_ATTR_BLA_VID,
BATADV_ATTR_BLA_BACKBONE,
BATADV_ATTR_BLA_CRC,
- __BATADV_ATTR_MAX,
+ /* add attributes above here, update the policy in netlink.c */
+ __BATADV_ATTR_AFTER_LAST,
+ NUM_BATADV_ATTR = __BATADV_ATTR_AFTER_LAST,
+ BATADV_ATTR_MAX = __BATADV_ATTR_AFTER_LAST - 1
};
-#define BATADV_ATTR_MAX (__BATADV_ATTR_MAX - 1)
-
-enum {
+/**
+ * enum batadv_nl_commands - supported batman-adv netlink commands
+ *
+ * @BATADV_CMD_UNSPEC: unspecified command to catch errors
+ * @BATADV_CMD_GET_MESH_INFO: Query basic information about batman-adv device
+ * @BATADV_CMD_GET_ROUTING_ALGOS: TODO
+ * @BATADV_CMD_GET_HARDIFS: TODO
+ * @BATADV_CMD_GET_TRANSTABLE_LOCAL: TODO
+ * @BATADV_CMD_GET_TRANSTABLE_GLOBAL: TODO
+ * @BATADV_CMD_GET_ORIGINATORS: TODO
+ * @BATADV_CMD_GET_NEIGHBORS: TODO
+ * @BATADV_CMD_GET_GATEWAYS: TODO
+ * @BATADV_CMD_GET_BLA_CLAIM: TODO
+ * @__BATADV_CMD_AFTER_LAST: internal use
+ * @BATADV_CMD_MAX: highest used command number
+ */
+enum batadv_nl_commands {
BATADV_CMD_UNSPEC,
- BATADV_CMD_GET_ROUTING_ALGOS,
BATADV_CMD_GET_MESH_INFO,
+ BATADV_CMD_GET_ROUTING_ALGOS,
BATADV_CMD_GET_HARDIFS,
BATADV_CMD_GET_TRANSTABLE_LOCAL,
BATADV_CMD_GET_TRANSTABLE_GLOBAL,
@@ -103,9 +157,9 @@ enum {
BATADV_CMD_GET_NEIGHBORS,
BATADV_CMD_GET_GATEWAYS,
BATADV_CMD_GET_BLA_CLAIM,
- __BATADV_CMD_MAX,
+ /* add new commands above here */
+ __BATADV_CMD_AFTER_LAST,
+ BATADV_CMD_MAX = __BATADV_CMD_AFTER_LAST - 1
};
-#define BATADV_CMD_MAX (__BATADV_CMD_MAX - 1)
-
#endif /* _UAPI_LINUX_BATMAN_ADV_H_ */
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
index 9abfdbb..0558ed2 100644
--- a/net/batman-adv/bat_iv_ogm.c
+++ b/net/batman-adv/bat_iv_ogm.c
@@ -1980,6 +1980,14 @@ next:
seq_puts(seq, "No batman nodes in range ...\n");
}
+/**
+ * batadv_iv_ogm_neigh_get_tq_avg - TODO
+ * @neigh_node: TODO
+ * @if_outgoing: TODO
+ * @tq_avg: TODO
+ *
+ * Return: TODO
+ */
static bool
batadv_iv_ogm_neigh_get_tq_avg(struct batadv_neigh_node *neigh_node,
struct batadv_hard_iface *if_outgoing,
@@ -1997,6 +2005,19 @@ batadv_iv_ogm_neigh_get_tq_avg(struct batadv_neigh_node *neigh_node,
return true;
}
+/**
+ * batadv_iv_ogm_orig_dump_subentry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @orig_node: TODO
+ * @neigh_node: TODO
+ * @best: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -2045,6 +2066,18 @@ batadv_iv_ogm_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_iv_ogm_orig_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @orig_node: TODO
+ * @sub_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -2093,6 +2126,19 @@ batadv_iv_ogm_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_iv_ogm_orig_dump_bucket - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @head: TODO
+ * @idx_s: TODO
+ * @sub: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -2122,6 +2168,13 @@ batadv_iv_ogm_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_iv_ogm_orig_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ */
static void
batadv_iv_ogm_orig_dump(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *bat_priv,
@@ -2202,6 +2255,15 @@ static void batadv_iv_neigh_print(struct batadv_priv *bat_priv,
seq_puts(seq, "No batman nodes in range ...\n");
}
+/**
+ * batadv_iv_ogm_neigh_dump_neigh - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @hardif_neigh: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_hardif_neigh_node *hardif_neigh)
@@ -2232,6 +2294,17 @@ batadv_iv_ogm_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_iv_ogm_neigh_dump_hardif - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @hard_iface: TODO
+ * @idx_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_iv_ogm_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -2257,6 +2330,13 @@ batadv_iv_ogm_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_iv_ogm_neigh_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ * @bat_priv: TODO
+ * @single_hardif: TODO
+ */
static void
batadv_iv_ogm_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *bat_priv,
diff --git a/net/batman-adv/bat_v.c b/net/batman-adv/bat_v.c
index 5daa300..e244b5f 100644
--- a/net/batman-adv/bat_v.c
+++ b/net/batman-adv/bat_v.c
@@ -212,6 +212,15 @@ static void batadv_v_neigh_print(struct batadv_priv *bat_priv,
seq_puts(seq, "No batman nodes in range ...\n");
}
+/**
+ * batadv_v_neigh_dump_neigh - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @hardif_neigh: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_hardif_neigh_node *hardif_neigh)
@@ -246,6 +255,17 @@ batadv_v_neigh_dump_neigh(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_v_neigh_dump_hardif - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @hard_iface: TODO
+ * @idx_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -270,6 +290,13 @@ batadv_v_neigh_dump_hardif(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_v_neigh_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ * @bat_priv: TODO
+ * @single_hardif: TODO
+ */
static void
batadv_v_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *bat_priv,
@@ -380,6 +407,19 @@ next:
seq_puts(seq, "No batman nodes in range ...\n");
}
+/**
+ * batadv_v_orig_dump_subentry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @orig_node: TODO
+ * @neigh_node: TODO
+ * @best: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -434,6 +474,18 @@ batadv_v_orig_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_v_orig_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @orig_node: TODO
+ * @sub_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -473,6 +525,19 @@ batadv_v_orig_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_v_orig_dump_bucket - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ * @head: TODO
+ * @idx_s: TODO
+ * @sub: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_v_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -501,6 +566,13 @@ batadv_v_orig_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_v_orig_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ * @bat_priv: TODO
+ * @if_outgoing: TODO
+ */
static void
batadv_v_orig_dump(struct sk_buff *msg, struct netlink_callback *cb,
struct batadv_priv *bat_priv,
diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
index 7f38aea..dedf89e 100644
--- a/net/batman-adv/gateway_client.c
+++ b/net/batman-adv/gateway_client.c
@@ -670,6 +670,16 @@ out:
return 0;
}
+/**
+ * batadv_gw_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @gw_node: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -732,6 +742,13 @@ out:
return ret;
}
+/**
+ * batadv_gw_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
int batadv_gw_dump(struct sk_buff *msg, struct netlink_callback *cb)
{
struct batadv_hard_iface *primary_if = NULL;
diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
index 3127d28..7683da4 100644
--- a/net/batman-adv/main.c
+++ b/net/batman-adv/main.c
@@ -615,6 +615,15 @@ int batadv_algo_seq_print_text(struct seq_file *seq, void *offset)
return 0;
}
+/**
+ * batadv_algo_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_algo_ops: TODO
+ *
+ * Return: TODO
+ */
static int batadv_algo_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_algo_ops *bat_algo_ops)
{
@@ -636,6 +645,13 @@ static int batadv_algo_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_algo_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
int batadv_algo_dump(struct sk_buff *msg, struct netlink_callback *cb)
{
int portid = NETLINK_CB(cb->skb).portid;
diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c
index 671d5b6..c68497f 100644
--- a/net/batman-adv/netlink.c
+++ b/net/batman-adv/netlink.c
@@ -20,6 +20,7 @@
#include <linux/errno.h>
#include <linux/fs.h>
+#include <linux/genetlink.h>
#include <linux/if_ether.h>
#include <linux/init.h>
#include <linux/netdevice.h>
@@ -30,6 +31,8 @@
#include <linux/skbuff.h>
#include <linux/stddef.h>
#include <linux/types.h>
+#include <net/genetlink.h>
+#include <net/netlink.h>
#include <net/sock.h>
#include <uapi/linux/batman_adv.h>
@@ -49,13 +52,51 @@ struct genl_family batadv_netlink_family = {
.netnsok = true,
};
+static struct nla_policy batadv_netlink_policy[NUM_BATADV_ATTR] = {
+ [BATADV_ATTR_VERSION] = { .type = NLA_STRING },
+ [BATADV_ATTR_ALGO_NAME] = { .type = NLA_STRING },
+ [BATADV_ATTR_MESH_IFINDEX] = { .type = NLA_U32 },
+ [BATADV_ATTR_MESH_IFNAME] = { .type = NLA_STRING },
+ [BATADV_ATTR_MESH_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_HARD_IFINDEX] = { .type = NLA_U32 },
+ [BATADV_ATTR_HARD_IFNAME] = { .type = NLA_STRING },
+ [BATADV_ATTR_HARD_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_ACTIVE] = { .type = NLA_FLAG },
+ [BATADV_ATTR_ORIG_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_TT_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_TT_TTVN] = { .type = NLA_U8 },
+ [BATADV_ATTR_TT_LAST_TTVN] = { .type = NLA_U8 },
+ [BATADV_ATTR_TT_CRC32] = { .type = NLA_U32 },
+ [BATADV_ATTR_TT_VID] = { .type = NLA_U16 },
+ [BATADV_ATTR_TT_FLAGS] = { .type = NLA_U32 },
+ [BATADV_ATTR_FLAG_BEST] = { .type = NLA_FLAG },
+ [BATADV_ATTR_LAST_SEEN_MSECS] = { .type = NLA_U32 },
+ [BATADV_ATTR_NEIGH_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_TQ] = { .type = NLA_U8 },
+ [BATADV_ATTR_BANDWIDTH_UP] = { .type = NLA_U32 },
+ [BATADV_ATTR_BANDWIDTH_DOWN] = { .type = NLA_U32 },
+ [BATADV_ATTR_ROUTER] = { .len = ETH_ALEN },
+ [BATADV_ATTR_BLA_OWN] = { .type = NLA_FLAG },
+ [BATADV_ATTR_BLA_ADDRESS] = { .len = ETH_ALEN },
+ [BATADV_ATTR_BLA_VID] = { .type = NLA_U16 },
+ [BATADV_ATTR_BLA_BACKBONE] = { .len = ETH_ALEN },
+ [BATADV_ATTR_BLA_CRC] = { .type = NLA_U16 },
+};
+
+/**
+ * batadv_netlink_mesh_info_put - Fill generic information about mesh interface
+ * @msg: netlink message to be sent back
+ * @soft_iface: interface for which the data should be taken
+ *
+ * Return: 0 on success, < 0 on error
+ */
static int
batadv_netlink_mesh_info_put(struct sk_buff *msg, struct net_device *soft_iface)
{
- int ret = -ENOBUFS;
struct batadv_priv *bat_priv = netdev_priv(soft_iface);
struct batadv_hard_iface *primary_if = NULL;
struct net_device *hard_iface;
+ int ret = -ENOBUFS;
if (nla_put_string(msg, BATADV_ATTR_VERSION, BATADV_SOURCE_VERSION) ||
nla_put_string(msg, BATADV_ATTR_ALGO_NAME,
@@ -88,15 +129,22 @@ batadv_netlink_mesh_info_put(struct sk_buff *msg, struct net_device *soft_iface)
return ret;
}
+/**
+ * batadv_netlink_mesh_info_put - Handle BATADV_CMD_GET_MESH_INFO
+ * @skb: received netlink message
+ * @info: receiver information
+ *
+ * Return: 0 on success, < 0 on error
+ */
static int
batadv_netlink_get_mesh_info(struct sk_buff *skb, struct genl_info *info)
{
struct net *net = genl_info_net(info);
- int ret;
+ struct net_device *soft_iface;
struct sk_buff *msg = NULL;
void *msg_head;
int ifindex;
- struct net_device *soft_iface;
+ int ret;
if (!info->attrs[BATADV_ATTR_MESH_IFINDEX])
return -EINVAL;
@@ -141,6 +189,15 @@ batadv_netlink_get_mesh_info(struct sk_buff *skb, struct genl_info *info)
return genlmsg_reply(msg, info);
}
+/**
+ * batadv_netlink_dump_hardif_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @hard_iface: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_netlink_dump_hardif_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_hard_iface *hard_iface)
@@ -174,6 +231,13 @@ batadv_netlink_dump_hardif_entry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_netlink_dump_hardifs - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_netlink_dump_hardifs(struct sk_buff *msg, struct netlink_callback *cb)
{
@@ -224,23 +288,18 @@ batadv_netlink_dump_hardifs(struct sk_buff *msg, struct netlink_callback *cb)
return msg->len;
}
-static struct nla_policy batadv_netlink_policy[BATADV_ATTR_MAX + 1] = {
- [BATADV_ATTR_MESH_IFINDEX] = { .type = NLA_U32 },
- [BATADV_ATTR_HARD_IFINDEX] = { .type = NLA_U32 },
-};
-
static struct genl_ops batadv_netlink_ops[] = {
{
- .cmd = BATADV_CMD_GET_ROUTING_ALGOS,
+ .cmd = BATADV_CMD_GET_MESH_INFO,
.flags = GENL_ADMIN_PERM,
.policy = batadv_netlink_policy,
- .dumpit = batadv_algo_dump,
+ .doit = batadv_netlink_get_mesh_info,
},
{
- .cmd = BATADV_CMD_GET_MESH_INFO,
+ .cmd = BATADV_CMD_GET_ROUTING_ALGOS,
.flags = GENL_ADMIN_PERM,
.policy = batadv_netlink_policy,
- .doit = batadv_netlink_get_mesh_info,
+ .dumpit = batadv_algo_dump,
},
{
.cmd = BATADV_CMD_GET_HARDIFS,
@@ -286,6 +345,9 @@ static struct genl_ops batadv_netlink_ops[] = {
},
};
+/**
+ * batadv_netlink_register - Register batadv genl netlink family
+ */
void __init batadv_netlink_register(void)
{
int ret;
@@ -296,6 +358,9 @@ void __init batadv_netlink_register(void)
pr_warn("unable to register netlink family");
}
+/**
+ * batadv_netlink_unregister - Unregister batadv genl netlink family
+ */
void batadv_netlink_unregister(void)
{
genl_unregister_family(&batadv_netlink_family);
diff --git a/net/batman-adv/netlink.h b/net/batman-adv/netlink.h
index ae0eeb9..89b7c5b 100644
--- a/net/batman-adv/netlink.h
+++ b/net/batman-adv/netlink.h
@@ -28,6 +28,13 @@ struct nlmsghdr;
void batadv_netlink_register(void);
void batadv_netlink_unregister(void);
+/**
+ * batadv_netlink_get_ifindex - TODO
+ * @nlh: TODO
+ * @attrtype: TODO
+ *
+ * Return: TODO
+ */
static inline int
batadv_netlink_get_ifindex(const struct nlmsghdr *nlh, int attrtype)
{
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index 0455e54..71b63e7 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -1416,8 +1416,7 @@ int batadv_orig_dump(struct sk_buff *msg, struct netlink_callback *cb)
int ret;
int ifindex, hard_ifindex;
- ifindex = batadv_netlink_get_ifindex(cb->nlh,
- BATADV_ATTR_MESH_IFINDEX);
+ ifindex = batadv_netlink_get_ifindex(cb->nlh, BATADV_ATTR_MESH_IFINDEX);
if (!ifindex)
return -EINVAL;
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index be42b12..6a1eba3 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -1063,6 +1063,16 @@ out:
return 0;
}
+/**
+ * batadv_tt_local_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @common: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_local_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -1111,6 +1121,17 @@ batadv_tt_local_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_tt_local_dump_bucket - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @head: TODO
+ * @idx_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_local_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -1137,6 +1158,13 @@ batadv_tt_local_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_tt_local_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
int batadv_tt_local_dump(struct sk_buff *msg, struct netlink_callback *cb)
{
struct net *net = sock_net(cb->skb->sk);
@@ -1841,6 +1869,17 @@ out:
return 0;
}
+/**
+ * batadv_tt_global_dump_subentry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @common: TODO
+ * @orig: TODO
+ * @best: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_global_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_tt_common_entry *common,
@@ -1890,6 +1929,17 @@ batadv_tt_global_dump_subentry(struct sk_buff *msg, u32 portid, u32 seq,
return -EMSGSIZE;
}
+/**
+ * batadv_tt_global_dump_entry - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @common: TODO
+ * @sub_s: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_global_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -1922,6 +1972,18 @@ batadv_tt_global_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_tt_global_dump_bucket - TODO
+ * @msg: TODO
+ * @portid: TODO
+ * @seq: TODO
+ * @bat_priv: TODO
+ * @head: TODO
+ * @idx_s: TODO
+ * @sub: TODO
+ *
+ * Return: TODO
+ */
static int
batadv_tt_global_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
struct batadv_priv *bat_priv,
@@ -1949,6 +2011,13 @@ batadv_tt_global_dump_bucket(struct sk_buff *msg, u32 portid, u32 seq,
return 0;
}
+/**
+ * batadv_tt_global_dump - TODO
+ * @msg: TODO
+ * @cb: TODO
+ *
+ * Return: TODO
+ */
int batadv_tt_global_dump(struct sk_buff *msg, struct netlink_callback *cb)
{
struct net *net = sock_net(cb->skb->sk);
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-05-09 18:29 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-09 18:07 [B.A.T.M.A.N.] [PATCHv4 00/12] netns and netlink support Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 01/12] batman-adv: Handle parent interfaces in a different netns Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 02/12] batman-adv: compat.h: Add workaround for get_link_net() Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 03/12] batman-adv: Suppress debugfs entries for netns's Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 04/12] batman-adv: add generic netlink query API to replace debugfs files Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 05/12] batman-adv: compat: Workarounds for previous patch Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 06/12] batman-adv: netlink: add translation table query Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 07/12] batman-adv: netlink: add originator and neighbor table queries Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 08/12] batman-adv: add B.A.T.M.A.N. IV bat_{orig, neigh}_dump implementations Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 09/12] batman-adv: add B.A.T.M.A.N. V " Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 10/12] batman-adv: Indicate netlink socket can be used with netns Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 11/12] batman-adv: add B.A.T.M.A.N. Dump gateways via netlink Andrew Lunn
2016-05-09 18:07 ` [B.A.T.M.A.N.] [PATCHv4 12/12] batman-adv: add B.A.T.M.A.N. Dump BLA claims " Andrew Lunn
2016-05-09 18:29 ` Sven Eckelmann [this message]
2016-05-09 18:50 ` [B.A.T.M.A.N.] [PATCHv4 00/12] netns and netlink support Sven Eckelmann
2016-05-09 19:06 ` Andrew Lunn
2016-05-10 7:00 ` Sven Eckelmann
2016-05-10 9:25 ` Sven Eckelmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1680132.z76VCK1c2R@bentobox \
--to=sven@narfation.org \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox