[PATCH 1/4] factor out rtnl_link_fill_info()
Cong Wang
xiyou.wangcong at gmail.com
Fri Nov 1 19:58:46 EDT 2013
Signed-off-by: Cong Wang <xiyou.wangcong at gmail.com>
---
include/netlink/route/link.h | 1 +
lib/route/link.c | 35 +++++++++++++++++++++++------------
2 files changed, 24 insertions(+), 12 deletions(-)
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;
--
1.8.1.4
More information about the libnl
mailing list