Skip to content

Commit

Permalink
route/link: merge support for 'netnsid' (fixes)
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
thom311 committed Aug 17, 2015
2 parents 8818a57 + 2fc97e6 commit fa380b4
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 8 deletions.
2 changes: 1 addition & 1 deletion include/netlink-private/types.h
Expand Up @@ -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;
Expand Down
11 changes: 11 additions & 0 deletions include/netlink/attr.h
Expand Up @@ -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 *);
Expand Down Expand Up @@ -182,6 +184,15 @@ extern int nla_is_nested(const struct nlattr *);
#define NLA_PUT_U16(msg, attrtype, value) \
NLA_PUT_TYPE(msg, uint16_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_S32(msg, attrtype, value) \
NLA_PUT_TYPE(msg, int32_t, attrtype, value)

/**
* Add 32 bit integer attribute to netlink message.
* @arg msg Netlink message.
Expand Down
4 changes: 2 additions & 2 deletions include/netlink/route/link.h
Expand Up @@ -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 *);
Expand Down
25 changes: 25 additions & 0 deletions lib/attr.c
Expand Up @@ -601,6 +601,31 @@ uint16_t nla_get_u16(const struct nlattr *nla)
return *(const uint16_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_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.
Expand Down
10 changes: 5 additions & 5 deletions lib/route/link.c
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down
6 changes: 6 additions & 0 deletions libnl-3.sym
Expand Up @@ -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;

0 comments on commit fa380b4

Please sign in to comment.