[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