libnetlink: Add filter function to rtnl_neighdump_req
Add filter function to rtnl_neighdump_req and a buffer to the request for the filter functions to append attributes. Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
66e8e73edc
commit
f255ab1225
|
|
@ -60,7 +60,8 @@ int rtnl_routedump_req(struct rtnl_handle *rth, int family,
|
||||||
__attribute__((warn_unused_result));
|
__attribute__((warn_unused_result));
|
||||||
int rtnl_ruledump_req(struct rtnl_handle *rth, int family)
|
int rtnl_ruledump_req(struct rtnl_handle *rth, int family)
|
||||||
__attribute__((warn_unused_result));
|
__attribute__((warn_unused_result));
|
||||||
int rtnl_neighdump_req(struct rtnl_handle *rth, int family)
|
int rtnl_neighdump_req(struct rtnl_handle *rth, int family,
|
||||||
|
req_filter_fn_t filter_fn)
|
||||||
__attribute__((warn_unused_result));
|
__attribute__((warn_unused_result));
|
||||||
int rtnl_neightbldump_req(struct rtnl_handle *rth, int family)
|
int rtnl_neightbldump_req(struct rtnl_handle *rth, int family)
|
||||||
__attribute__((warn_unused_result));
|
__attribute__((warn_unused_result));
|
||||||
|
|
|
||||||
|
|
@ -327,11 +327,13 @@ int rtnl_ruledump_req(struct rtnl_handle *rth, int family)
|
||||||
return send(rth->fd, &req, sizeof(req), 0);
|
return send(rth->fd, &req, sizeof(req), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtnl_neighdump_req(struct rtnl_handle *rth, int family)
|
int rtnl_neighdump_req(struct rtnl_handle *rth, int family,
|
||||||
|
req_filter_fn_t filter_fn)
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
struct nlmsghdr nlh;
|
struct nlmsghdr nlh;
|
||||||
struct ndmsg ndm;
|
struct ndmsg ndm;
|
||||||
|
char buf[256];
|
||||||
} req = {
|
} req = {
|
||||||
.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ndmsg)),
|
.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ndmsg)),
|
||||||
.nlh.nlmsg_type = RTM_GETNEIGH,
|
.nlh.nlmsg_type = RTM_GETNEIGH,
|
||||||
|
|
@ -340,6 +342,14 @@ int rtnl_neighdump_req(struct rtnl_handle *rth, int family)
|
||||||
.ndm.ndm_family = family,
|
.ndm.ndm_family = family,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (filter_fn) {
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = filter_fn(&req.nlh, sizeof(req));
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
return send(rth->fd, &req, sizeof(req), 0);
|
return send(rth->fd, &req, sizeof(req), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -424,7 +424,7 @@ static int do_one_request(struct nlmsghdr *n)
|
||||||
|
|
||||||
static void load_initial_table(void)
|
static void load_initial_table(void)
|
||||||
{
|
{
|
||||||
if (rtnl_neighdump_req(&rth, AF_INET) < 0) {
|
if (rtnl_neighdump_req(&rth, AF_INET, NULL) < 0) {
|
||||||
perror("dump request failed");
|
perror("dump request failed");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue