diff options
author | Thomas Haller <thaller@redhat.com> | 2015-08-17 15:11:56 (GMT) |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-08-17 21:02:39 (GMT) |
commit | fa380b409a02fe17b2d5cfc9074a8913523dbb68 (patch) | |
tree | 856121029ebd5150a78c79fbe149dbb527cf3660 | |
parent | 8818a571e72c51bcda309d89bfaf93a2f5524d68 (diff) | |
parent | 2fc97e66e7f509e89f36aa601939c314bdfe6c08 (diff) | |
download | libnl-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.h | 2 | ||||
-rw-r--r-- | include/netlink/attr.h | 11 | ||||
-rw-r--r-- | include/netlink/route/link.h | 4 | ||||
-rw-r--r-- | lib/attr.c | 25 | ||||
-rw-r--r-- | lib/route/link.c | 10 | ||||
-rw-r--r-- | libnl-3.sym | 6 |
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 *); @@ -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; |