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 *);
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];
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;