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));
/** @} */
-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);
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;