summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-08-17 15:11:56 (GMT)
committerThomas Haller <thaller@redhat.com>2015-08-17 21:02:39 (GMT)
commitfa380b409a02fe17b2d5cfc9074a8913523dbb68 (patch)
tree856121029ebd5150a78c79fbe149dbb527cf3660
parent8818a571e72c51bcda309d89bfaf93a2f5524d68 (diff)
parent2fc97e66e7f509e89f36aa601939c314bdfe6c08 (diff)
downloadlibnl-fa380b409a02fe17b2d5cfc9074a8913523dbb68.zip
libnl-fa380b409a02fe17b2d5cfc9074a8913523dbb68.tar.gz
libnl-fa380b409a02fe17b2d5cfc9074a8913523dbb68.tar.bz2
route/link: merge support for 'netnsid' (fixes)
Fix previous patches to have link_netnsid as signed int32_t. http://lists.infradead.org/pipermail/libnl/2015-August/001941.html Signed-off-by: Thomas Haller <thaller@redhat.com>
-rw-r--r--include/netlink-private/types.h2
-rw-r--r--include/netlink/attr.h11
-rw-r--r--include/netlink/route/link.h4
-rw-r--r--lib/attr.c25
-rw-r--r--lib/route/link.c10
-rw-r--r--libnl-3.sym6
6 files changed, 50 insertions, 8 deletions
diff --git a/include/netlink-private/types.h b/include/netlink-private/types.h
index 2642c8d..5da8f59 100644
--- a/include/netlink-private/types.h
+++ b/include/netlink-private/types.h
@@ -166,7 +166,7 @@ struct rtnl_link
uint32_t l_change;
uint32_t l_mtu;
uint32_t l_link;
- uint32_t l_link_netnsid;
+ int32_t l_link_netnsid;
uint32_t l_txqlen;
uint32_t l_weight;
uint32_t l_master;
diff --git a/include/netlink/attr.h b/include/netlink/attr.h
index b84b62e..fd8e299 100644
--- a/include/netlink/attr.h
+++ b/include/netlink/attr.h
@@ -103,6 +103,8 @@ extern uint8_t nla_get_u8(const struct nlattr *);
extern int nla_put_u8(struct nl_msg *, int, uint8_t);
extern uint16_t nla_get_u16(const struct nlattr *);
extern int nla_put_u16(struct nl_msg *, int, uint16_t);
+extern int32_t nla_get_s32(const struct nlattr *);
+extern int nla_put_s32(struct nl_msg *, int, int32_t);
extern uint32_t nla_get_u32(const struct nlattr *);
extern int nla_put_u32(struct nl_msg *, int, uint32_t);
extern uint64_t nla_get_u64(const struct nlattr *);
@@ -188,6 +190,15 @@ extern int nla_is_nested(const struct nlattr *);
* @arg attrtype Attribute type.
* @arg value Numeric value.
*/
+#define NLA_PUT_S32(msg, attrtype, value) \
+ NLA_PUT_TYPE(msg, int32_t, attrtype, value)
+
+/**
+ * Add 32 bit integer attribute to netlink message.
+ * @arg msg Netlink message.
+ * @arg attrtype Attribute type.
+ * @arg value Numeric value.
+ */
#define NLA_PUT_U32(msg, attrtype, value) \
NLA_PUT_TYPE(msg, uint32_t, attrtype, value)
diff --git a/include/netlink/route/link.h b/include/netlink/route/link.h
index d8d4e82..f7303f2 100644
--- a/include/netlink/route/link.h
+++ b/include/netlink/route/link.h
@@ -202,8 +202,8 @@ extern uint8_t rtnl_link_get_operstate(struct rtnl_link *);
extern void rtnl_link_set_linkmode(struct rtnl_link *, uint8_t);
extern uint8_t rtnl_link_get_linkmode(struct rtnl_link *);
-int rtnl_link_set_link_netnsid(struct rtnl_link *link, uint32_t link_netnsid);
-int rtnl_link_get_link_netnsid(const struct rtnl_link *link, uint32_t *out_link_netnsid);
+int rtnl_link_set_link_netnsid(struct rtnl_link *link, int32_t link_netnsid);
+int rtnl_link_get_link_netnsid(const struct rtnl_link *link, int32_t *out_link_netnsid);
extern const char * rtnl_link_get_ifalias(struct rtnl_link *);
extern void rtnl_link_set_ifalias(struct rtnl_link *, const char *);
diff --git a/lib/attr.c b/lib/attr.c
index 838d0a9..86284ee 100644
--- a/lib/attr.c
+++ b/lib/attr.c
@@ -610,6 +610,31 @@ uint16_t nla_get_u16(const struct nlattr *nla)
* @see nla_put
* @return 0 on success or a negative error code.
*/
+int nla_put_s32(struct nl_msg *msg, int attrtype, int32_t value)
+{
+ return nla_put(msg, attrtype, sizeof(int32_t), &value);
+}
+
+/**
+ * Return payload of 32 bit integer attribute.
+ * @arg nla 32 bit integer attribute.
+ *
+ * @return Payload as 32 bit integer.
+ */
+int32_t nla_get_s32(const struct nlattr *nla)
+{
+ return *(const int32_t *) nla_data(nla);
+}
+
+/**
+ * Add 32 bit integer attribute to netlink message.
+ * @arg msg Netlink message.
+ * @arg attrtype Attribute type.
+ * @arg value Numeric value to store as payload.
+ *
+ * @see nla_put
+ * @return 0 on success or a negative error code.
+ */
int nla_put_u32(struct nl_msg *msg, int attrtype, uint32_t value)
{
return nla_put(msg, attrtype, sizeof(uint32_t), &value);
diff --git a/lib/route/link.c b/lib/route/link.c
index 550a071..81917d3 100644
--- a/lib/route/link.c
+++ b/lib/route/link.c
@@ -418,7 +418,7 @@ int rtnl_link_info_parse(struct rtnl_link *link, struct nlattr **tb)
}
if (tb[IFLA_LINK_NETNSID]) {
- link->l_link_netnsid = nla_get_u32(tb[IFLA_LINK_NETNSID]);
+ link->l_link_netnsid = nla_get_s32(tb[IFLA_LINK_NETNSID]);
link->ce_mask |= LINK_ATTR_LINK_NETNSID;
}
@@ -693,7 +693,7 @@ static void link_dump_line(struct nl_object *obj, struct nl_dump_params *p)
nl_dump(p, "slave-of %d ", link->l_link);
}
if (link->ce_mask & LINK_ATTR_LINK_NETNSID)
- nl_dump(p, "link-netnsid %u ", link->l_link_netnsid);
+ nl_dump(p, "link-netnsid %d ", link->l_link_netnsid);
if (link->ce_mask & LINK_ATTR_GROUP)
nl_dump(p, "group %u ", link->l_group);
@@ -1305,7 +1305,7 @@ int rtnl_link_fill_info(struct nl_msg *msg, struct rtnl_link *link)
NLA_PUT_U32(msg, IFLA_LINK, link->l_link);
if (link->ce_mask & LINK_ATTR_LINK_NETNSID)
- NLA_PUT_U32(msg, IFLA_LINK_NETNSID, link->l_link_netnsid);
+ NLA_PUT_S32(msg, IFLA_LINK_NETNSID, link->l_link_netnsid);
if (link->ce_mask & LINK_ATTR_MASTER)
NLA_PUT_U32(msg, IFLA_MASTER, link->l_master);
@@ -2007,7 +2007,7 @@ int rtnl_link_get_link(struct rtnl_link *link)
* Sets the IFLA_LINK_NETNSID attribute of the link
* @returns 0 on success
*/
-int rtnl_link_set_link_netnsid(struct rtnl_link *link, uint32_t link_netnsid)
+int rtnl_link_set_link_netnsid(struct rtnl_link *link, int32_t link_netnsid)
{
link->l_link_netnsid = link_netnsid;
link->ce_mask |= LINK_ATTR_LINK_NETNSID;
@@ -2024,7 +2024,7 @@ int rtnl_link_set_link_netnsid(struct rtnl_link *link, uint32_t link_netnsid)
*
* @returns 0 on success
*/
-int rtnl_link_get_link_netnsid(const struct rtnl_link *link, uint32_t *out_link_netnsid)
+int rtnl_link_get_link_netnsid(const struct rtnl_link *link, int32_t *out_link_netnsid)
{
if (!(link->ce_mask & LINK_ATTR_LINK_NETNSID))
return -NLE_INVAL;
diff --git a/libnl-3.sym b/libnl-3.sym
index 621bfe0..a467ab2 100644
--- a/libnl-3.sym
+++ b/libnl-3.sym
@@ -334,3 +334,9 @@ libnl_3_2_26 {
global:
nl_socket_set_fd;
} libnl_3;
+
+libnl_3_2_27 {
+global:
+ nla_get_s32;
+ nla_put_s32;
+} libnl_3_2_26;