blob: a52c553f765a09e96a2c80e64e86ef8d2c5d1380 [file] [log] [blame]
/*
* lib/nl_updates.h - Updates to libnl which are not synced from kernel yet
* Copyright (C) 2012-2015 Jiri Pirko <jiri@resnulli.us>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _NL_UPDATES_H_
#define _NL_UPDATES_H_
#include <netlink/netlink.h>
#ifndef NLA_BINARY
#define NLA_BINARY 11
#endif
#ifndef NLA_S8
#define NLA_S8 12
#endif
#ifndef NLA_PUT_S8
/**
* Add 8 bit signed 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.
*/
static inline int nla_put_s8(struct nl_msg *msg, int attrtype, int8_t value)
{
return nla_put(msg, attrtype, sizeof(int8_t), &value);
}
/**
* Add 8 bit signed integer attribute to netlink message.
* @arg msg Netlink message.
* @arg attrtype Attribute type.
* @arg value Numeric value.
*/
#define NLA_PUT_S8(msg, attrtype, value) \
NLA_PUT_TYPE(msg, int8_t, attrtype, value)
/**
* Return value of 8 bit signed integer attribute.
* @arg nla 8 bit signed integer attribute
*
* @return Payload as 8 bit signed integer.
*/
static inline int8_t nla_get_s8(struct nlattr *nla)
{
return *(int8_t *) nla_data(nla);
}
#endif /* NLA_S8 */
#ifndef NLA_S16
#define NLA_S16 13
#endif
#ifndef NLA_PUT_S16
/**
* Add 16 bit signed 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.
*/
static inline int nla_put_s16(struct nl_msg *msg, int attrtype, int16_t value)
{
return nla_put(msg, attrtype, sizeof(int16_t), &value);
}
/**
* Add 16 bit signed integer attribute to netlink message.
* @arg msg Netlink message.
* @arg attrtype Attribute type.
* @arg value Numeric value.
*/
#define NLA_PUT_S16(msg, attrtype, value) \
NLA_PUT_TYPE(msg, int16_t, attrtype, value)
/**
* Return payload of 16 bit signed integer attribute.
* @arg nla 16 bit signed integer attribute
*
* @return Payload as 16 bit signed integer.
*/
static inline int16_t nla_get_s16(struct nlattr *nla)
{
return *(int16_t *) nla_data(nla);
}
#endif /* NLA_S16 */
#ifndef NLA_S32
#define NLA_S32 14
#endif
#ifndef NLA_PUT_S32
/**
* Add 32 bit signed 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.
*/
static inline int nla_put_s32(struct nl_msg *msg, int attrtype, int32_t value)
{
return nla_put(msg, attrtype, sizeof(int32_t), &value);
}
/**
* Add 32 bit signed 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)
/**
* Return payload of 32 bit signed integer attribute.
* @arg nla 32 bit signed integer attribute.
*
* @return Payload as 32 bit signed integer.
*/
static inline int32_t nla_get_s32(struct nlattr *nla)
{
return *(int32_t *) nla_data(nla);
}
#endif /* NLA_S32 */
#ifndef NLA_S64
#define NLA_S64 15
#endif
#ifndef NLA_PUT_S64
/**
* Add 64 bit signed 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.
*/
static inline int nla_put_s64(struct nl_msg *msg, int attrtype, int64_t value)
{
return nla_put(msg, attrtype, sizeof(int64_t), &value);
}
/**
* Add 64 bit signed integer attribute to netlink message.
* @arg msg Netlink message.
* @arg attrtype Attribute type.
* @arg value Numeric value.
*/
#define NLA_PUT_S64(msg, attrtype, value) \
NLA_PUT_TYPE(msg, int64_t, attrtype, value)
/**
* Return payload of u64 attribute
* @arg nla u64 netlink attribute
*
* @return Payload as 64 bit signed integer.
*/
static inline int64_t nla_get_s64(struct nlattr *nla)
{
int64_t tmp;
nla_memcpy(&tmp, nla, sizeof(tmp));
return tmp;
}
#endif /* NLA_S64 */
#endif /* _NL_UPDATES_H_ */