summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--src/attr.c110
-rw-r--r--src/callback.c6
-rw-r--r--src/internal.h5
-rw-r--r--src/nlmsg.c68
-rw-r--r--src/socket.c32
6 files changed, 136 insertions, 87 deletions
diff --git a/configure.ac b/configure.ac
index 82a6ce4..a9fde6c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -19,7 +19,7 @@ esac
regular_CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_REENTRANT"
regular_CFLAGS="-Wall -Waggregate-return -Wmissing-declarations \
- -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes \
+ -Wmissing-prototypes -Wshadow -Wstrict-prototypes \
-Wformat=2 -pipe"
AC_SUBST([regular_CPPFLAGS])
AC_SUBST([regular_CFLAGS])
diff --git a/src/attr.c b/src/attr.c
index 8f36791..c0ba938 100644
--- a/src/attr.c
+++ b/src/attr.c
@@ -36,10 +36,11 @@
*
* This function returns the attribute type.
*/
-EXPORT_SYMBOL uint16_t mnl_attr_get_type(const struct nlattr *attr)
+uint16_t mnl_attr_get_type(const struct nlattr *attr)
{
return attr->nla_type & NLA_TYPE_MASK;
}
+EXPORT_SYMBOL(mnl_attr_get_type);
/**
* mnl_attr_get_len - get length of netlink attribute
@@ -48,10 +49,11 @@ EXPORT_SYMBOL uint16_t mnl_attr_get_type(const struct nlattr *attr)
* This function returns the attribute length that is the attribute header
* plus the attribute payload.
*/
-EXPORT_SYMBOL uint16_t mnl_attr_get_len(const struct nlattr *attr)
+uint16_t mnl_attr_get_len(const struct nlattr *attr)
{
return attr->nla_len;
}
+EXPORT_SYMBOL(mnl_attr_get_len);
/**
* mnl_attr_get_payload_len - get the attribute payload-value length
@@ -59,10 +61,11 @@ EXPORT_SYMBOL uint16_t mnl_attr_get_len(const struct nlattr *attr)
*
* This function returns the attribute payload-value length.
*/
-EXPORT_SYMBOL uint16_t mnl_attr_get_payload_len(const struct nlattr *attr)
+uint16_t mnl_attr_get_payload_len(const struct nlattr *attr)
{
return attr->nla_len - MNL_ATTR_HDRLEN;
}
+EXPORT_SYMBOL(mnl_attr_get_payload_len);
/**
* mnl_attr_get_payload - get pointer to the attribute payload
@@ -70,10 +73,11 @@ EXPORT_SYMBOL uint16_t mnl_attr_get_payload_len(const struct nlattr *attr)
*
* This function return a pointer to the attribute payload.
*/
-EXPORT_SYMBOL void *mnl_attr_get_payload(const struct nlattr *attr)
+void *mnl_attr_get_payload(const struct nlattr *attr)
{
return (void *)attr + MNL_ATTR_HDRLEN;
}
+EXPORT_SYMBOL(mnl_attr_get_payload);
/**
* mnl_attr_ok - check if there is room for an attribute in a buffer
@@ -91,12 +95,13 @@ EXPORT_SYMBOL void *mnl_attr_get_payload(const struct nlattr *attr)
* The len parameter may be negative in the case of malformed messages during
* attribute iteration, that is why we use a signed integer.
*/
-EXPORT_SYMBOL bool mnl_attr_ok(const struct nlattr *attr, int len)
+bool mnl_attr_ok(const struct nlattr *attr, int len)
{
return len >= (int)sizeof(struct nlattr) &&
attr->nla_len >= sizeof(struct nlattr) &&
(int)attr->nla_len <= len;
}
+EXPORT_SYMBOL(mnl_attr_ok);
/**
* mnl_attr_next - get the next attribute in the payload of a netlink message
@@ -107,10 +112,11 @@ EXPORT_SYMBOL bool mnl_attr_ok(const struct nlattr *attr, int len)
* as parameter. You have to use mnl_attr_ok() to ensure that the next
* attribute is valid.
*/
-EXPORT_SYMBOL struct nlattr *mnl_attr_next(const struct nlattr *attr)
+struct nlattr *mnl_attr_next(const struct nlattr *attr)
{
return (struct nlattr *)((void *)attr + MNL_ALIGN(attr->nla_len));
}
+EXPORT_SYMBOL(mnl_attr_next);
/**
* mnl_attr_type_valid - check if the attribute type is valid
@@ -126,7 +132,7 @@ EXPORT_SYMBOL struct nlattr *mnl_attr_next(const struct nlattr *attr)
* This leads to backward compatibility breakages in user-space. Better check
* if you support an attribute, if not, skip it.
*/
-EXPORT_SYMBOL int mnl_attr_type_valid(const struct nlattr *attr, uint16_t max)
+int mnl_attr_type_valid(const struct nlattr *attr, uint16_t max)
{
if (mnl_attr_get_type(attr) > max) {
errno = EOPNOTSUPP;
@@ -134,6 +140,7 @@ EXPORT_SYMBOL int mnl_attr_type_valid(const struct nlattr *attr, uint16_t max)
}
return 1;
}
+EXPORT_SYMBOL(mnl_attr_type_valid);
static int __mnl_attr_validate(const struct nlattr *attr,
enum mnl_attr_data_type type, size_t exp_len)
@@ -205,8 +212,7 @@ static const size_t mnl_attr_data_type_len[MNL_TYPE_MAX] = {
* integers (u8, u16, u32 and u64) have enough room for them. This function
* returns -1 in case of error, and errno is explicitly set.
*/
-EXPORT_SYMBOL int
-mnl_attr_validate(const struct nlattr *attr, enum mnl_attr_data_type type)
+int mnl_attr_validate(const struct nlattr *attr, enum mnl_attr_data_type type)
{
int exp_len;
@@ -217,6 +223,7 @@ mnl_attr_validate(const struct nlattr *attr, enum mnl_attr_data_type type)
exp_len = mnl_attr_data_type_len[type];
return __mnl_attr_validate(attr, type, exp_len);
}
+EXPORT_SYMBOL(mnl_attr_validate);
/**
* mnl_attr_validate2 - validate netlink attribute (extended version)
@@ -228,7 +235,7 @@ mnl_attr_validate(const struct nlattr *attr, enum mnl_attr_data_type type)
* whose size is variable. If the size of the attribute is not what we expect,
* this functions returns -1 and errno is explicitly set.
*/
-EXPORT_SYMBOL int
+int
mnl_attr_validate2(const struct nlattr *attr, enum mnl_attr_data_type type,
size_t exp_len)
{
@@ -238,6 +245,7 @@ mnl_attr_validate2(const struct nlattr *attr, enum mnl_attr_data_type type,
}
return __mnl_attr_validate(attr, type, exp_len);
}
+EXPORT_SYMBOL(mnl_attr_validate2);
/**
* mnl_attr_parse - parse attributes
@@ -254,7 +262,7 @@ mnl_attr_validate2(const struct nlattr *attr, enum mnl_attr_data_type type,
* This function propagates the return value of the callback, which can be
* MNL_CB_ERROR, MNL_CB_OK or MNL_CB_STOP.
*/
-EXPORT_SYMBOL int
+int
mnl_attr_parse(const struct nlmsghdr *nlh, unsigned int offset,
mnl_attr_cb_t cb, void *data)
{
@@ -266,6 +274,7 @@ mnl_attr_parse(const struct nlmsghdr *nlh, unsigned int offset,
return ret;
return ret;
}
+EXPORT_SYMBOL(mnl_attr_parse);
/**
* mnl_attr_parse_nested - parse attributes inside a nest
@@ -281,7 +290,7 @@ mnl_attr_parse(const struct nlmsghdr *nlh, unsigned int offset,
* This function propagates the return value of the callback, which can be
* MNL_CB_ERROR, MNL_CB_OK or MNL_CB_STOP.
*/
-EXPORT_SYMBOL int
+int
mnl_attr_parse_nested(const struct nlattr *nested, mnl_attr_cb_t cb,
void *data)
{
@@ -293,6 +302,7 @@ mnl_attr_parse_nested(const struct nlattr *nested, mnl_attr_cb_t cb,
return ret;
return ret;
}
+EXPORT_SYMBOL(mnl_attr_parse_nested);
/**
* mnl_attr_get_u8 - returns 8-bit unsigned integer attribute payload
@@ -300,10 +310,11 @@ mnl_attr_parse_nested(const struct nlattr *nested, mnl_attr_cb_t cb,
*
* This function returns the 8-bit value of the attribute payload.
*/
-EXPORT_SYMBOL uint8_t mnl_attr_get_u8(const struct nlattr *attr)
+uint8_t mnl_attr_get_u8(const struct nlattr *attr)
{
return *((uint8_t *)mnl_attr_get_payload(attr));
}
+EXPORT_SYMBOL(mnl_attr_get_u8);
/**
* mnl_attr_get_u16 - returns 16-bit unsigned integer attribute payload
@@ -311,10 +322,11 @@ EXPORT_SYMBOL uint8_t mnl_attr_get_u8(const struct nlattr *attr)
*
* This function returns the 16-bit value of the attribute payload.
*/
-EXPORT_SYMBOL uint16_t mnl_attr_get_u16(const struct nlattr *attr)
+uint16_t mnl_attr_get_u16(const struct nlattr *attr)
{
return *((uint16_t *)mnl_attr_get_payload(attr));
}
+EXPORT_SYMBOL(mnl_attr_get_u16);
/**
* mnl_attr_get_u32 - returns 32-bit unsigned integer attribute payload
@@ -322,10 +334,11 @@ EXPORT_SYMBOL uint16_t mnl_attr_get_u16(const struct nlattr *attr)
*
* This function returns the 32-bit value of the attribute payload.
*/
-EXPORT_SYMBOL uint32_t mnl_attr_get_u32(const struct nlattr *attr)
+uint32_t mnl_attr_get_u32(const struct nlattr *attr)
{
return *((uint32_t *)mnl_attr_get_payload(attr));
}
+EXPORT_SYMBOL(mnl_attr_get_u32);
/**
* mnl_attr_get_u64 - returns 64-bit unsigned integer attribute.
@@ -335,12 +348,13 @@ EXPORT_SYMBOL uint32_t mnl_attr_get_u32(const struct nlattr *attr)
* function is align-safe, since accessing 64-bit Netlink attributes is a
* common source of alignment issues.
*/
-EXPORT_SYMBOL uint64_t mnl_attr_get_u64(const struct nlattr *attr)
+uint64_t mnl_attr_get_u64(const struct nlattr *attr)
{
uint64_t tmp;
memcpy(&tmp, mnl_attr_get_payload(attr), sizeof(tmp));
return tmp;
}
+EXPORT_SYMBOL(mnl_attr_get_u64);
/**
* mnl_attr_get_str - returns pointer to string attribute.
@@ -348,10 +362,11 @@ EXPORT_SYMBOL uint64_t mnl_attr_get_u64(const struct nlattr *attr)
*
* This function returns the payload of string attribute value.
*/
-EXPORT_SYMBOL const char *mnl_attr_get_str(const struct nlattr *attr)
+const char *mnl_attr_get_str(const struct nlattr *attr)
{
return mnl_attr_get_payload(attr);
}
+EXPORT_SYMBOL(mnl_attr_get_str);
/**
* mnl_attr_put - add an attribute to netlink message
@@ -363,7 +378,7 @@ EXPORT_SYMBOL const char *mnl_attr_get_str(const struct nlattr *attr)
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL void
+void
mnl_attr_put(struct nlmsghdr *nlh, uint16_t type, size_t len, const void *data)
{
struct nlattr *attr = mnl_nlmsg_get_payload_tail(nlh);
@@ -374,6 +389,7 @@ mnl_attr_put(struct nlmsghdr *nlh, uint16_t type, size_t len, const void *data)
memcpy(mnl_attr_get_payload(attr), data, len);
nlh->nlmsg_len += MNL_ALIGN(payload_len);
}
+EXPORT_SYMBOL(mnl_attr_put);
/**
* mnl_attr_put_u8 - add 8-bit unsigned integer attribute to netlink message
@@ -385,11 +401,11 @@ mnl_attr_put(struct nlmsghdr *nlh, uint16_t type, size_t len, const void *data)
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL void
-mnl_attr_put_u8(struct nlmsghdr *nlh, uint16_t type, uint8_t data)
+void mnl_attr_put_u8(struct nlmsghdr *nlh, uint16_t type, uint8_t data)
{
mnl_attr_put(nlh, type, sizeof(uint8_t), &data);
}
+EXPORT_SYMBOL(mnl_attr_put_u8);
/**
* mnl_attr_put_u16 - add 16-bit unsigned integer attribute to netlink message
@@ -400,11 +416,11 @@ mnl_attr_put_u8(struct nlmsghdr *nlh, uint16_t type, uint8_t data)
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL void
-mnl_attr_put_u16(struct nlmsghdr *nlh, uint16_t type, uint16_t data)
+void mnl_attr_put_u16(struct nlmsghdr *nlh, uint16_t type, uint16_t data)
{
mnl_attr_put(nlh, type, sizeof(uint16_t), &data);
}
+EXPORT_SYMBOL(mnl_attr_put_u16);
/**
* mnl_attr_put_u32 - add 32-bit unsigned integer attribute to netlink message
@@ -415,11 +431,11 @@ mnl_attr_put_u16(struct nlmsghdr *nlh, uint16_t type, uint16_t data)
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL void
-mnl_attr_put_u32(struct nlmsghdr *nlh, uint16_t type, uint32_t data)
+void mnl_attr_put_u32(struct nlmsghdr *nlh, uint16_t type, uint32_t data)
{
mnl_attr_put(nlh, type, sizeof(uint32_t), &data);
}
+EXPORT_SYMBOL(mnl_attr_put_u32);
/**
* mnl_attr_put_u64 - add 64-bit unsigned integer attribute to netlink message
@@ -430,11 +446,11 @@ mnl_attr_put_u32(struct nlmsghdr *nlh, uint16_t type, uint32_t data)
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL void
-mnl_attr_put_u64(struct nlmsghdr *nlh, uint16_t type, uint64_t data)
+void mnl_attr_put_u64(struct nlmsghdr *nlh, uint16_t type, uint64_t data)
{
mnl_attr_put(nlh, type, sizeof(uint64_t), &data);
}
+EXPORT_SYMBOL(mnl_attr_put_u64);
/**
* mnl_attr_put_str - add string attribute to netlink message
@@ -445,11 +461,11 @@ mnl_attr_put_u64(struct nlmsghdr *nlh, uint16_t type, uint64_t data)
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL void
-mnl_attr_put_str(struct nlmsghdr *nlh, uint16_t type, const char *data)
+void mnl_attr_put_str(struct nlmsghdr *nlh, uint16_t type, const char *data)
{
mnl_attr_put(nlh, type, strlen(data), data);
}
+EXPORT_SYMBOL(mnl_attr_put_str);
/**
* mnl_attr_put_strz - add string attribute to netlink message
@@ -463,11 +479,11 @@ mnl_attr_put_str(struct nlmsghdr *nlh, uint16_t type, const char *data)
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL void
-mnl_attr_put_strz(struct nlmsghdr *nlh, uint16_t type, const char *data)
+void mnl_attr_put_strz(struct nlmsghdr *nlh, uint16_t type, const char *data)
{
mnl_attr_put(nlh, type, strlen(data)+1, data);
}
+EXPORT_SYMBOL(mnl_attr_put_strz);
/**
* mnl_attr_nest_start - start an attribute nest
@@ -478,8 +494,7 @@ mnl_attr_put_strz(struct nlmsghdr *nlh, uint16_t type, const char *data)
* an attribute nest. This function always returns a valid pointer to the
* beginning of the nest.
*/
-EXPORT_SYMBOL struct nlattr *
-mnl_attr_nest_start(struct nlmsghdr *nlh, uint16_t type)
+struct nlattr *mnl_attr_nest_start(struct nlmsghdr *nlh, uint16_t type)
{
struct nlattr *start = mnl_nlmsg_get_payload_tail(nlh);
@@ -489,6 +504,7 @@ mnl_attr_nest_start(struct nlmsghdr *nlh, uint16_t type)
return start;
}
+EXPORT_SYMBOL(mnl_attr_nest_start);
/**
* mnl_attr_put_check - add an attribute to netlink message
@@ -504,7 +520,7 @@ mnl_attr_nest_start(struct nlmsghdr *nlh, uint16_t type)
* attribute. The function returns true if the attribute could be added
* to the message, otherwise false is returned.
*/
-EXPORT_SYMBOL bool
+bool
mnl_attr_put_check(struct nlmsghdr *nlh, size_t buflen,
uint16_t type, size_t len, const void *data)
{
@@ -513,6 +529,7 @@ mnl_attr_put_check(struct nlmsghdr *nlh, size_t buflen,
mnl_attr_put(nlh, type, len, data);
return true;
}
+EXPORT_SYMBOL(mnl_attr_put_check);
/**
* mnl_attr_put_u8_check - add 8-bit unsigned int attribute to netlink message
@@ -528,12 +545,13 @@ mnl_attr_put_check(struct nlmsghdr *nlh, size_t buflen,
* attribute. The function returns true if the attribute could be added
* to the message, otherwise false is returned.
*/
-EXPORT_SYMBOL bool
+bool
mnl_attr_put_u8_check(struct nlmsghdr *nlh, size_t buflen,
uint16_t type, uint8_t data)
{
return mnl_attr_put_check(nlh, buflen, type, sizeof(uint8_t), &data);
}
+EXPORT_SYMBOL(mnl_attr_put_u8_check);
/**
* mnl_attr_put_u16_check - add 16-bit unsigned int attribute to netlink message
@@ -550,12 +568,13 @@ mnl_attr_put_u8_check(struct nlmsghdr *nlh, size_t buflen,
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL bool
+bool
mnl_attr_put_u16_check(struct nlmsghdr *nlh, size_t buflen,
uint16_t type, uint16_t data)
{
return mnl_attr_put_check(nlh, buflen, type, sizeof(uint16_t), &data);
}
+EXPORT_SYMBOL(mnl_attr_put_u16_check);
/**
* mnl_attr_put_u32_check - add 32-bit unsigned int attribute to netlink message
@@ -572,12 +591,13 @@ mnl_attr_put_u16_check(struct nlmsghdr *nlh, size_t buflen,
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL bool
+bool
mnl_attr_put_u32_check(struct nlmsghdr *nlh, size_t buflen,
uint16_t type, uint32_t data)
{
return mnl_attr_put_check(nlh, buflen, type, sizeof(uint32_t), &data);
}
+EXPORT_SYMBOL(mnl_attr_put_u32_check);
/**
* mnl_attr_put_u64_check - add 64-bit unsigned int attribute to netlink message
@@ -594,12 +614,13 @@ mnl_attr_put_u32_check(struct nlmsghdr *nlh, size_t buflen,
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL bool
+bool
mnl_attr_put_u64_check(struct nlmsghdr *nlh, size_t buflen,
uint16_t type, uint64_t data)
{
return mnl_attr_put_check(nlh, buflen, type, sizeof(uint64_t), &data);
}
+EXPORT_SYMBOL(mnl_attr_put_u64_check);
/**
* mnl_attr_put_str_check - add string attribute to netlink message
@@ -616,12 +637,13 @@ mnl_attr_put_u64_check(struct nlmsghdr *nlh, size_t buflen,
* This function updates the length field of the Netlink message (nlmsg_len)
* by adding the size (header + payload) of the new attribute.
*/
-EXPORT_SYMBOL bool
+bool
mnl_attr_put_str_check(struct nlmsghdr *nlh, size_t buflen,
uint16_t type, const char *data)
{
return mnl_attr_put_check(nlh, buflen, type, strlen(data), data);
}
+EXPORT_SYMBOL(mnl_attr_put_str_check);
/**
* mnl_attr_put_strz_check - add string attribute to netlink message
@@ -639,12 +661,13 @@ mnl_attr_put_str_check(struct nlmsghdr *nlh, size_t buflen,
* attribute. The function returns true if the attribute could be added
* to the message, otherwise false is returned.
*/
-EXPORT_SYMBOL bool
+bool
mnl_attr_put_strz_check(struct nlmsghdr *nlh, size_t buflen,
uint16_t type, const char *data)
{
return mnl_attr_put_check(nlh, buflen, type, strlen(data)+1, data);
}
+EXPORT_SYMBOL(mnl_attr_put_strz_check);
/**
* mnl_attr_nest_start_check - start an attribute nest
@@ -656,13 +679,14 @@ mnl_attr_put_strz_check(struct nlmsghdr *nlh, size_t buflen,
* an attribute nest. If the nested attribute cannot be added then NULL,
* otherwise valid pointer to the beginning of the nest is returned.
*/
-EXPORT_SYMBOL struct nlattr *
+struct nlattr *
mnl_attr_nest_start_check(struct nlmsghdr *nlh, size_t buflen, uint16_t type)
{
if (nlh->nlmsg_len + MNL_ATTR_HDRLEN > buflen)
return NULL;
return mnl_attr_nest_start(nlh, type);
}
+EXPORT_SYMBOL(mnl_attr_nest_start_check);
/**
* mnl_attr_nest_end - end an attribute nest
@@ -671,11 +695,12 @@ mnl_attr_nest_start_check(struct nlmsghdr *nlh, size_t buflen, uint16_t type)
*
* This function updates the attribute header that identifies the nest.
*/
-EXPORT_SYMBOL void
+void
mnl_attr_nest_end(struct nlmsghdr *nlh, struct nlattr *start)
{
start->nla_len = mnl_nlmsg_get_payload_tail(nlh) - (void *)start;
}
+EXPORT_SYMBOL(mnl_attr_nest_end);
/**
* mnl_attr_nest_cancel - cancel an attribute nest
@@ -684,11 +709,12 @@ mnl_attr_nest_end(struct nlmsghdr *nlh, struct nlattr *start)
*
* This function updates the attribute header that identifies the nest.
*/
-EXPORT_SYMBOL void
+void
mnl_attr_nest_cancel(struct nlmsghdr *nlh, struct nlattr *start)
{
nlh->nlmsg_len -= mnl_nlmsg_get_payload_tail(nlh) - (void *)start;
}
+EXPORT_SYMBOL(mnl_attr_nest_cancel);
/**
* @}
diff --git a/src/callback.c b/src/callback.c
index 47fd0e7..6337acc 100644
--- a/src/callback.c
+++ b/src/callback.c
@@ -119,7 +119,7 @@ out:
* is set to ESRCH. If the sequence number is not the expected, errno is set
* to EPROTO.
*/
-EXPORT_SYMBOL int
+int
mnl_cb_run2(const void *buf, size_t numbytes, unsigned int seq,
unsigned int portid, mnl_cb_t cb_data, void *data,
mnl_cb_t *cb_ctl_array, unsigned int cb_ctl_array_len)
@@ -127,6 +127,7 @@ mnl_cb_run2(const void *buf, size_t numbytes, unsigned int seq,
return __mnl_cb_run(buf, numbytes, seq, portid, cb_data, data,
cb_ctl_array, cb_ctl_array_len);
}
+EXPORT_SYMBOL(mnl_cb_run2);
/**
* mnl_cb_run - callback runqueue for netlink messages (simplified version)
@@ -147,12 +148,13 @@ mnl_cb_run2(const void *buf, size_t numbytes, unsigned int seq,
*
* This function propagates the callback return value.
*/
-EXPORT_SYMBOL int
+int
mnl_cb_run(const void *buf, size_t numbytes, unsigned int seq,
unsigned int portid, mnl_cb_t cb_data, void *data)
{
return __mnl_cb_run(buf, numbytes, seq, portid, cb_data, data, NULL, 0);
}
+EXPORT_SYMBOL(mnl_cb_run);
/**
* @}
diff --git a/src/internal.h b/src/internal.h
index ed8028f..3a88d1a 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -3,9 +3,10 @@
#include "config.h"
#ifdef HAVE_VISIBILITY_HIDDEN
-# define EXPORT_SYMBOL __attribute__((visibility("default")))
+# define __visible __attribute__((visibility("default")))
+# define EXPORT_SYMBOL(x) typeof(x) (x) __visible
#else
# define EXPORT_SYMBOL
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/src/nlmsg.c b/src/nlmsg.c
index b2e3853..b398474 100644
--- a/src/nlmsg.c
+++ b/src/nlmsg.c
@@ -51,10 +51,11 @@
* This function returns the size of a netlink message (header plus payload)
* without alignment.
*/
-EXPORT_SYMBOL size_t mnl_nlmsg_size(size_t len)
+size_t mnl_nlmsg_size(size_t len)
{
return len + MNL_NLMSG_HDRLEN;
}
+EXPORT_SYMBOL(mnl_nlmsg_size);
/**
* mnl_nlmsg_get_payload_len - get the length of the Netlink payload
@@ -63,10 +64,11 @@ EXPORT_SYMBOL size_t mnl_nlmsg_size(size_t len)
* This function returns the Length of the netlink payload, ie. the length
* of the full message minus the size of the Netlink header.
*/
-EXPORT_SYMBOL size_t mnl_nlmsg_get_payload_len(const struct nlmsghdr *nlh)
+size_t mnl_nlmsg_get_payload_len(const struct nlmsghdr *nlh)
{
return nlh->nlmsg_len - MNL_NLMSG_HDRLEN;
}
+EXPORT_SYMBOL(mnl_nlmsg_get_payload_len);
/**
* mnl_nlmsg_put_header - reserve and prepare room for Netlink header
@@ -77,7 +79,7 @@ EXPORT_SYMBOL size_t mnl_nlmsg_get_payload_len(const struct nlmsghdr *nlh)
* initializes the nlmsg_len field to the size of the Netlink header. This
* function returns a pointer to the Netlink header structure.
*/
-EXPORT_SYMBOL struct nlmsghdr *mnl_nlmsg_put_header(void *buf)
+struct nlmsghdr *mnl_nlmsg_put_header(void *buf)
{
int len = MNL_ALIGN(sizeof(struct nlmsghdr));
struct nlmsghdr *nlh = buf;
@@ -86,6 +88,7 @@ EXPORT_SYMBOL struct nlmsghdr *mnl_nlmsg_put_header(void *buf)
nlh->nlmsg_len = len;
return nlh;
}
+EXPORT_SYMBOL(mnl_nlmsg_put_header);
/**
* mnl_nlmsg_put_extra_header - reserve and prepare room for an extra header
@@ -98,7 +101,7 @@ EXPORT_SYMBOL struct nlmsghdr *mnl_nlmsg_put_header(void *buf)
* you call this function. This function returns a pointer to the extra
* header.
*/
-EXPORT_SYMBOL void *
+void *
mnl_nlmsg_put_extra_header(struct nlmsghdr *nlh, size_t size)
{
char *ptr = (char *)nlh + nlh->nlmsg_len;
@@ -106,6 +109,7 @@ mnl_nlmsg_put_extra_header(struct nlmsghdr *nlh, size_t size)
memset(ptr, 0, size);
return ptr;
}
+EXPORT_SYMBOL(mnl_nlmsg_put_extra_header);
/**
* mnl_nlmsg_get_payload - get a pointer to the payload of the netlink message
@@ -113,10 +117,11 @@ mnl_nlmsg_put_extra_header(struct nlmsghdr *nlh, size_t size)
*
* This function returns a pointer to the payload of the netlink message.
*/
-EXPORT_SYMBOL void *mnl_nlmsg_get_payload(const struct nlmsghdr *nlh)
+void *mnl_nlmsg_get_payload(const struct nlmsghdr *nlh)
{
return (void *)nlh + MNL_NLMSG_HDRLEN;
}
+EXPORT_SYMBOL(mnl_nlmsg_get_payload);
/**
* mnl_nlmsg_get_payload_offset - get a pointer to the payload of the message
@@ -126,11 +131,12 @@ EXPORT_SYMBOL void *mnl_nlmsg_get_payload(const struct nlmsghdr *nlh)
* This function returns a pointer to the payload of the netlink message plus
* a given offset.
*/
-EXPORT_SYMBOL void *
+void *
mnl_nlmsg_get_payload_offset(const struct nlmsghdr *nlh, size_t offset)
{
return (void *)nlh + MNL_NLMSG_HDRLEN + MNL_ALIGN(offset);
}
+EXPORT_SYMBOL(mnl_nlmsg_get_payload_offset);
/**
* mnl_nlmsg_ok - check a there is room for netlink message
@@ -148,12 +154,13 @@ mnl_nlmsg_get_payload_offset(const struct nlmsghdr *nlh, size_t offset)
* The len parameter may become negative in malformed messages during message
* iteration, that is why we use a signed integer.
*/
-EXPORT_SYMBOL bool mnl_nlmsg_ok(const struct nlmsghdr *nlh, int len)
+bool mnl_nlmsg_ok(const struct nlmsghdr *nlh, int len)
{
return len >= (int)sizeof(struct nlmsghdr) &&
nlh->nlmsg_len >= sizeof(struct nlmsghdr) &&
(int)nlh->nlmsg_len <= len;
}
+EXPORT_SYMBOL(mnl_nlmsg_ok);
/**
* mnl_nlmsg_next - get the next netlink message in a multipart message
@@ -168,12 +175,13 @@ EXPORT_SYMBOL bool mnl_nlmsg_ok(const struct nlmsghdr *nlh, int len)
* You have to use mnl_nlmsg_ok() to check if the next Netlink message is
* valid.
*/
-EXPORT_SYMBOL struct nlmsghdr *
+struct nlmsghdr *
mnl_nlmsg_next(const struct nlmsghdr *nlh, int *len)
{
*len -= MNL_ALIGN(nlh->nlmsg_len);
return (struct nlmsghdr *)((void *)nlh + MNL_ALIGN(nlh->nlmsg_len));
}
+EXPORT_SYMBOL(mnl_nlmsg_next);
/**
* mnl_nlmsg_get_payload_tail - get the ending of the netlink message
@@ -183,10 +191,11 @@ mnl_nlmsg_next(const struct nlmsghdr *nlh, int *len)
* to build a message since we continue adding attributes at the end of the
* message.
*/
-EXPORT_SYMBOL void *mnl_nlmsg_get_payload_tail(const struct nlmsghdr *nlh)
+void *mnl_nlmsg_get_payload_tail(const struct nlmsghdr *nlh)
{
return (void *)nlh + MNL_ALIGN(nlh->nlmsg_len);
}
+EXPORT_SYMBOL(mnl_nlmsg_get_payload_tail);
/**
* mnl_nlmsg_seq_ok - perform sequence tracking
@@ -202,11 +211,12 @@ EXPORT_SYMBOL void *mnl_nlmsg_get_payload_tail(const struct nlmsghdr *nlh)
* socket to send commands to kernel-space (that we want to track) and to
* listen to events (that we do not track).
*/
-EXPORT_SYMBOL bool
+bool
mnl_nlmsg_seq_ok(const struct nlmsghdr *nlh, unsigned int seq)
{
return nlh->nlmsg_seq && seq ? nlh->nlmsg_seq == seq : true;
}
+EXPORT_SYMBOL(mnl_nlmsg_seq_ok);
/**
* mnl_nlmsg_portid_ok - perform portID origin check
@@ -222,11 +232,12 @@ mnl_nlmsg_seq_ok(const struct nlmsghdr *nlh, unsigned int seq)
* to kernel-space (that we want to track) and to listen to events (that we
* do not track).
*/
-EXPORT_SYMBOL bool
+bool
mnl_nlmsg_portid_ok(const struct nlmsghdr *nlh, unsigned int portid)
{
return nlh->nlmsg_pid && portid ? nlh->nlmsg_pid == portid : true;
}
+EXPORT_SYMBOL(mnl_nlmsg_portid_ok);
static void mnl_nlmsg_fprintf_header(FILE *fd, const struct nlmsghdr *nlh)
{
@@ -357,7 +368,7 @@ mnl_nlmsg_fprintf_payload(FILE *fd, const struct nlmsghdr *nlh,
* - N, that indicates that NLA_F_NESTED is set.
* - B, that indicates that NLA_F_NET_BYTEORDER is set.
*/
-EXPORT_SYMBOL void
+void
mnl_nlmsg_fprintf(FILE *fd, const void *data, size_t datalen,
size_t extra_header_size)
{
@@ -370,6 +381,7 @@ mnl_nlmsg_fprintf(FILE *fd, const void *data, size_t datalen,
nlh = mnl_nlmsg_next(nlh, &len);
}
}
+EXPORT_SYMBOL(mnl_nlmsg_fprintf);
/**
* \defgroup batch Netlink message batch helpers
@@ -427,8 +439,7 @@ struct mnl_nlmsg_batch {
* the heap, no restrictions in this regard. This function returns NULL on
* error.
*/
-EXPORT_SYMBOL struct mnl_nlmsg_batch *
-mnl_nlmsg_batch_start(void *buf, size_t limit)
+struct mnl_nlmsg_batch *mnl_nlmsg_batch_start(void *buf, size_t limit)
{
struct mnl_nlmsg_batch *b;
@@ -444,6 +455,7 @@ mnl_nlmsg_batch_start(void *buf, size_t limit)
return b;
}
+EXPORT_SYMBOL(mnl_nlmsg_batch_start);
/**
* mnl_nlmsg_batch_stop - release a batch
@@ -451,11 +463,11 @@ mnl_nlmsg_batch_start(void *buf, size_t limit)
*
* This function returns the amount of data that is part of this batch.
*/
-EXPORT_SYMBOL void
-mnl_nlmsg_batch_stop(struct mnl_nlmsg_batch *b)
+void mnl_nlmsg_batch_stop(struct mnl_nlmsg_batch *b)
{
free(b);
}
+EXPORT_SYMBOL(mnl_nlmsg_batch_stop);
/**
* mnl_nlmsg_batch_next - get room for the next message in the batch
@@ -468,8 +480,7 @@ mnl_nlmsg_batch_stop(struct mnl_nlmsg_batch *b)
* You have to put at least one message in the batch before calling this
* function, otherwise your application is likely to crash.
*/
-EXPORT_SYMBOL bool
-mnl_nlmsg_batch_next(struct mnl_nlmsg_batch *b)
+bool mnl_nlmsg_batch_next(struct mnl_nlmsg_batch *b)
{
struct nlmsghdr *nlh = b->cur;
@@ -481,6 +492,7 @@ mnl_nlmsg_batch_next(struct mnl_nlmsg_batch *b)
b->buflen += nlh->nlmsg_len;
return true;
}
+EXPORT_SYMBOL(mnl_nlmsg_batch_next);
/**
* mnl_nlmsg_batch_reset - reset the batch
@@ -490,8 +502,7 @@ mnl_nlmsg_batch_next(struct mnl_nlmsg_batch *b)
* new one. This function moves the last message which does not fit the
* batch to the head of the buffer, if any.
*/
-EXPORT_SYMBOL void
-mnl_nlmsg_batch_reset(struct mnl_nlmsg_batch *b)
+void mnl_nlmsg_batch_reset(struct mnl_nlmsg_batch *b)
{
if (b->overflow) {
struct nlmsghdr *nlh = b->cur;
@@ -504,6 +515,7 @@ mnl_nlmsg_batch_reset(struct mnl_nlmsg_batch *b)
b->cur = b->buf;
}
}
+EXPORT_SYMBOL(mnl_nlmsg_batch_reset);
/**
* mnl_nlmsg_batch_size - get current size of the batch
@@ -511,11 +523,11 @@ mnl_nlmsg_batch_reset(struct mnl_nlmsg_batch *b)
*
* This function returns the current size of the batch.
*/
-EXPORT_SYMBOL size_t
-mnl_nlmsg_batch_size(struct mnl_nlmsg_batch *b)
+size_t mnl_nlmsg_batch_size(struct mnl_nlmsg_batch *b)
{
return b->buflen;
}
+EXPORT_SYMBOL(mnl_nlmsg_batch_size);
/**
* mnl_nlmsg_batch_head - get head of this batch
@@ -524,11 +536,11 @@ mnl_nlmsg_batch_size(struct mnl_nlmsg_batch *b)
* This function returns a pointer to the head of the batch, which is the
* beginning of the buffer that is used.
*/
-EXPORT_SYMBOL void *
-mnl_nlmsg_batch_head(struct mnl_nlmsg_batch *b)
+void *mnl_nlmsg_batch_head(struct mnl_nlmsg_batch *b)
{
return b->buf;
}
+EXPORT_SYMBOL(mnl_nlmsg_batch_head);
/**
* mnl_nlmsg_batch_current - returns current position in the batch
@@ -537,11 +549,11 @@ mnl_nlmsg_batch_head(struct mnl_nlmsg_batch *b)
* This function returns a pointer to the current position in the buffer
* that is used to store the batch.
*/
-EXPORT_SYMBOL void *
-mnl_nlmsg_batch_current(struct mnl_nlmsg_batch *b)
+void *mnl_nlmsg_batch_current(struct mnl_nlmsg_batch *b)
{
return b->cur;
}
+EXPORT_SYMBOL(mnl_nlmsg_batch_current);
/**
* mnl_nlmsg_batch_is_empty - check if there is any message in the batch
@@ -549,11 +561,11 @@ mnl_nlmsg_batch_current(struct mnl_nlmsg_batch *b)
*
* This function returns true if the batch is empty.
*/
-EXPORT_SYMBOL bool
-mnl_nlmsg_batch_is_empty(struct mnl_nlmsg_batch *b)
+bool mnl_nlmsg_batch_is_empty(struct mnl_nlmsg_batch *b)
{
return b->buflen == 0;
}
+EXPORT_SYMBOL(mnl_nlmsg_batch_is_empty);
/**
* @}
diff --git a/src/socket.c b/src/socket.c
index 9eef299..6d54563 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -82,10 +82,11 @@ struct mnl_socket {
*
* This function returns the file descriptor of a given netlink socket.
*/
-EXPORT_SYMBOL int mnl_socket_get_fd(const struct mnl_socket *nl)
+int mnl_socket_get_fd(const struct mnl_socket *nl)
{
return nl->fd;
}
+EXPORT_SYMBOL(mnl_socket_get_fd);
/**
* mnl_socket_get_portid - obtain Netlink PortID from netlink socket
@@ -96,10 +97,11 @@ EXPORT_SYMBOL int mnl_socket_get_fd(const struct mnl_socket *nl)
* which is not always true. This is the case if you open more than one
* socket that is binded to the same Netlink subsystem from the same process.
*/
-EXPORT_SYMBOL unsigned int mnl_socket_get_portid(const struct mnl_socket *nl)
+unsigned int mnl_socket_get_portid(const struct mnl_socket *nl)
{
return nl->addr.nl_pid;
}
+EXPORT_SYMBOL(mnl_socket_get_portid);
/**
* mnl_socket_open - open a netlink socket
@@ -108,7 +110,7 @@ EXPORT_SYMBOL unsigned int mnl_socket_get_portid(const struct mnl_socket *nl)
* On error, it returns -1 and errno is appropriately set. Otherwise, it
* returns a valid pointer to the mnl_socket structure.
*/
-EXPORT_SYMBOL struct mnl_socket *mnl_socket_open(int bus)
+struct mnl_socket *mnl_socket_open(int bus)
{
struct mnl_socket *nl;
@@ -124,6 +126,7 @@ EXPORT_SYMBOL struct mnl_socket *mnl_socket_open(int bus)
return nl;
}
+EXPORT_SYMBOL(mnl_socket_open);
/**
* mnl_socket_bind - bind netlink socket
@@ -135,8 +138,7 @@ EXPORT_SYMBOL struct mnl_socket *mnl_socket_open(int bus)
* success, 0 is returned. You can use MNL_SOCKET_AUTOPID which is 0 for
* automatic port ID selection.
*/
-EXPORT_SYMBOL int
-mnl_socket_bind(struct mnl_socket *nl, unsigned int groups, pid_t pid)
+int mnl_socket_bind(struct mnl_socket *nl, unsigned int groups, pid_t pid)
{
int ret;
socklen_t addr_len;
@@ -164,6 +166,7 @@ mnl_socket_bind(struct mnl_socket *nl, unsigned int groups, pid_t pid)
}
return 0;
}
+EXPORT_SYMBOL(mnl_socket_bind);
/**
* mnl_socket_sendto - send a netlink message of a certain size
@@ -174,7 +177,7 @@ mnl_socket_bind(struct mnl_socket *nl, unsigned int groups, pid_t pid)
* On error, it returns -1 and errno is appropriately set. Otherwise, it
* returns the number of bytes sent.
*/
-EXPORT_SYMBOL ssize_t
+ssize_t
mnl_socket_sendto(const struct mnl_socket *nl, const void *buf, size_t len)
{
static const struct sockaddr_nl snl = {
@@ -183,6 +186,7 @@ mnl_socket_sendto(const struct mnl_socket *nl, const void *buf, size_t len)
return sendto(nl->fd, buf, len, 0,
(struct sockaddr *) &snl, sizeof(snl));
}
+EXPORT_SYMBOL(mnl_socket_sendto);
/**
* mnl_socket_recvfrom - receive a netlink message
@@ -198,7 +202,7 @@ mnl_socket_sendto(const struct mnl_socket *nl, const void *buf, size_t len)
* buffer size ensures that your buffer is big enough to store the netlink
* message without truncating it.
*/
-EXPORT_SYMBOL ssize_t
+ssize_t
mnl_socket_recvfrom(const struct mnl_socket *nl, void *buf, size_t bufsiz)
{
ssize_t ret;
@@ -230,6 +234,7 @@ mnl_socket_recvfrom(const struct mnl_socket *nl, void *buf, size_t bufsiz)
}
return ret;
}
+EXPORT_SYMBOL(mnl_socket_recvfrom);
/**
* mnl_socket_close - close a given netlink socket
@@ -238,12 +243,13 @@ mnl_socket_recvfrom(const struct mnl_socket *nl, void *buf, size_t bufsiz)
* On error, this function returns -1 and errno is appropriately set.
* On success, it returns 0.
*/
-EXPORT_SYMBOL int mnl_socket_close(struct mnl_socket *nl)
+int mnl_socket_close(struct mnl_socket *nl)
{
int ret = close(nl->fd);
free(nl);
return ret;
}
+EXPORT_SYMBOL(mnl_socket_close);
/**
* mnl_socket_setsockopt - set Netlink socket option
@@ -270,11 +276,12 @@ EXPORT_SYMBOL int mnl_socket_close(struct mnl_socket *nl)
*
* On error, this function returns -1 and errno is appropriately set.
*/
-EXPORT_SYMBOL int mnl_socket_setsockopt(const struct mnl_socket *nl, int type,
- void *buf, socklen_t len)
+int mnl_socket_setsockopt(const struct mnl_socket *nl, int type,
+ void *buf, socklen_t len)
{
return setsockopt(nl->fd, SOL_NETLINK, type, buf, len);
}
+EXPORT_SYMBOL(mnl_socket_setsockopt);
/**
* mnl_socket_getsockopt - get a Netlink socket option
@@ -285,11 +292,12 @@ EXPORT_SYMBOL int mnl_socket_setsockopt(const struct mnl_socket *nl, int type,
*
* On error, this function returns -1 and errno is appropriately set.
*/
-EXPORT_SYMBOL int mnl_socket_getsockopt(const struct mnl_socket *nl, int type,
- void *buf, socklen_t *len)
+int mnl_socket_getsockopt(const struct mnl_socket *nl, int type,
+ void *buf, socklen_t *len)
{
return getsockopt(nl->fd, SOL_NETLINK, type, buf, len);
}
+EXPORT_SYMBOL(mnl_socket_getsockopt);
/**
* @}