From: Cong Wang Date: Fri, 1 Nov 2013 23:58:46 +0000 (-0700) Subject: factor out rtnl_link_fill_info() X-Git-Tag: libnl3_2_24rc1~38 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f3511c1d1974f6d028fc29d80ce8ba1cc054cad;p=libnl factor out rtnl_link_fill_info() Signed-off-by: Cong Wang Signed-off-by: Thomas Graf --- diff --git a/include/netlink/route/link.h b/include/netlink/route/link.h index e53f9b2..fd7dda1 100644 --- a/include/netlink/route/link.h +++ b/include/netlink/route/link.h @@ -222,6 +222,7 @@ extern int rtnl_link_enslave(struct nl_sock *, struct rtnl_link *, struct rtnl_link *); extern int rtnl_link_release_ifindex(struct nl_sock *, int); extern int rtnl_link_release(struct nl_sock *, struct rtnl_link *); +extern int rtnl_link_fill_info(struct nl_msg *, struct rtnl_link *); /* deprecated */ extern int rtnl_link_set_info_type(struct rtnl_link *, const char *) __attribute__((deprecated)); diff --git a/lib/route/link.c b/lib/route/link.c index a016899..37938aa 100644 --- a/lib/route/link.c +++ b/lib/route/link.c @@ -1213,19 +1213,8 @@ int rtnl_link_name2i(struct nl_cache *cache, const char *name) /** @} */ -static int build_link_msg(int cmd, struct ifinfomsg *hdr, - struct rtnl_link *link, int flags, struct nl_msg **result) +int rtnl_link_fill_info(struct nl_msg *msg, struct rtnl_link *link) { - struct nl_msg *msg; - struct nlattr *af_spec; - - msg = nlmsg_alloc_simple(cmd, flags); - if (!msg) - return -NLE_NOMEM; - - if (nlmsg_append(msg, hdr, sizeof(*hdr), NLMSG_ALIGNTO) < 0) - goto nla_put_failure; - if (link->ce_mask & LINK_ATTR_ADDR) NLA_PUT_ADDR(msg, IFLA_ADDRESS, link->l_addr); @@ -1271,6 +1260,28 @@ static int build_link_msg(int cmd, struct ifinfomsg *hdr, if (link->ce_mask & LINK_ATTR_GROUP) NLA_PUT_U32(msg, IFLA_GROUP, link->l_group); + return 0; + +nla_put_failure: + return -NLE_MSGSIZE; +} + +static int build_link_msg(int cmd, struct ifinfomsg *hdr, + struct rtnl_link *link, int flags, struct nl_msg **result) +{ + struct nl_msg *msg; + struct nlattr *af_spec; + + msg = nlmsg_alloc_simple(cmd, flags); + if (!msg) + return -NLE_NOMEM; + + if (nlmsg_append(msg, hdr, sizeof(*hdr), NLMSG_ALIGNTO) < 0) + goto nla_put_failure; + + if (rtnl_link_fill_info(msg, link)) + goto nla_put_failure; + if (link->ce_mask & LINK_ATTR_LINKINFO) { struct nlattr *info;