add new function to provide neighbour event parsing
the neighbour parsing function was previously not accessible, so custom callback functions had to handle the decoding itself. rtnl_neigh_parse is introduced and implemented in much the same way as rtnl_route_parse. Signed-off-by: Brett Ciphery <brett.ciphery@windriver.com> Signed-off-by: Thomas Graf <tgraf@redhat.com>
This commit is contained in:
parent
9cbcbca77d
commit
a39bb563ab
2 changed files with 20 additions and 1 deletions
|
@ -29,6 +29,8 @@ extern int rtnl_neigh_alloc_cache(struct nl_sock *, struct nl_cache **);
|
|||
extern struct rtnl_neigh *rtnl_neigh_get(struct nl_cache *, int,
|
||||
struct nl_addr *);
|
||||
|
||||
extern int rtnl_neigh_parse(struct nlmsghdr *, struct rtnl_neigh **);
|
||||
|
||||
extern char * rtnl_neigh_state2str(int, char *, size_t);
|
||||
extern int rtnl_neigh_str2state(const char *);
|
||||
|
||||
|
|
|
@ -252,6 +252,21 @@ static struct nla_policy neigh_policy[NDA_MAX+1] = {
|
|||
|
||||
static int neigh_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
|
||||
struct nlmsghdr *n, struct nl_parser_param *pp)
|
||||
{
|
||||
struct rtnl_neigh *neigh;
|
||||
int err;
|
||||
|
||||
if ((err = rtnl_neigh_parse(n, &neigh)) < 0)
|
||||
return err;
|
||||
|
||||
err = pp->pp_cb((struct nl_object *) neigh, pp);
|
||||
|
||||
rtnl_neigh_put(neigh);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int rtnl_neigh_parse(struct nlmsghdr *n, struct rtnl_neigh **result)
|
||||
{
|
||||
struct rtnl_neigh *neigh;
|
||||
struct nlattr *tb[NDA_MAX + 1];
|
||||
|
@ -317,7 +332,9 @@ static int neigh_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
|
|||
neigh->ce_mask |= NEIGH_ATTR_PROBES;
|
||||
}
|
||||
|
||||
err = pp->pp_cb((struct nl_object *) neigh, pp);
|
||||
*result = neigh;
|
||||
return 0;
|
||||
|
||||
errout:
|
||||
rtnl_neigh_put(neigh);
|
||||
return err;
|
||||
|
|
Loading…
Add table
Reference in a new issue