diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2011-02-03 10:29:03 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2011-02-03 10:29:03 +0100 |
commit | eb7535ee4459b4422105ef65abef5bde1c83e472 (patch) | |
tree | 209879518de2fa59b4c3e7be40b8c8bb4046275f | |
parent | d337d00183c27619f1eb4a84b06476658a4b7355 (diff) | |
download | libmnl-eb7535ee4459b4422105ef65abef5bde1c83e472.tar.gz libmnl-eb7535ee4459b4422105ef65abef5bde1c83e472.zip |
doc: don't show up EXPORT_SYMBOL in doxygen
Patrick reports that the doxygen output shows up EXPORT_SYMBOL
and tells how to fix this:
> I just noticed the EXPORT_SYMBOLs in libmnl showing up in
> the doxygen output. Just in case you want to avoid this,
> what I'm doing in libdect is (besides the appopriate linker
> flags):
>
> #define __visible __attribute__((visibility("default")))
>
> #define EXPORT_SYMBOL(x) typeof(x) (x) __visible
>
>
> This allows to use EXPORT_SYMBOL as in the kernel, IOW
> after the function definition.
This patch also removes -Wredundant-decls to avoid a warning in every
single use of this new approach.
Now, this looks more like the Linux kernel way of exporting symbols.
Reported-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/attr.c | 110 | ||||
-rw-r--r-- | src/callback.c | 6 | ||||
-rw-r--r-- | src/internal.h | 5 | ||||
-rw-r--r-- | src/nlmsg.c | 68 | ||||
-rw-r--r-- | src/socket.c | 32 |
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]) @@ -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); /** * @} |