diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2010-09-08 13:45:41 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2010-09-08 13:45:41 +0200 |
commit | 78cddab700c3d526e0677b8cfd7c7b9a5fd97e2e (patch) | |
tree | 31fc84e20e4e5c5002b7a0a9ba46d98bf3641197 | |
parent | 089d5e1c6a4fcd6615b02866b760f2d7b4084a08 (diff) | |
download | libmnl-78cddab700c3d526e0677b8cfd7c7b9a5fd97e2e.tar.gz libmnl-78cddab700c3d526e0677b8cfd7c7b9a5fd97e2e.zip |
doxygen documentation
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | doxygen.cfg.in | 184 | ||||
-rw-r--r-- | src/attr.c | 146 | ||||
-rw-r--r-- | src/callback.c | 41 | ||||
-rw-r--r-- | src/nlmsg.c | 82 | ||||
-rw-r--r-- | src/socket.c | 94 |
6 files changed, 405 insertions, 144 deletions
diff --git a/configure.in b/configure.in index 8969b35..8f2287e 100644 --- a/configure.in +++ b/configure.in @@ -15,4 +15,4 @@ case $target in *) AC_MSG_ERROR([Linux only, dude!]);; esac -AC_OUTPUT(Makefile src/Makefile include/Makefile include/libmnl/Makefile examples/Makefile examples/genl/Makefile examples/netfilter/Makefile examples/rtnl/Makefile libmnl.pc) +AC_OUTPUT(Makefile src/Makefile include/Makefile include/libmnl/Makefile examples/Makefile examples/genl/Makefile examples/netfilter/Makefile examples/rtnl/Makefile libmnl.pc doxygen.cfg) diff --git a/doxygen.cfg.in b/doxygen.cfg.in new file mode 100644 index 0000000..8ba120a --- /dev/null +++ b/doxygen.cfg.in @@ -0,0 +1,184 @@ +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = @PACKAGE@ +PROJECT_NUMBER = @VERSION@ +OUTPUT_DIRECTORY = doxygen +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +INPUT = . +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c libmnl.h +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +HTML_DYNAMIC_SECTIONS = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +GENERATE_AUTOGEN_DEF = NO +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = YES +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +SEARCHENGINE = NO @@ -12,22 +12,26 @@ #include <values.h> /* for INT_MAX */ #include <errno.h> -/* - * Netlink Type-Length-Value (TLV) attribute: - * - * |<-- 2 bytes -->|<-- 2 bytes -->|<-- variable -->| - * ------------------------------------------------- - * | length | type | value | - * ------------------------------------------------- - * |<--------- header ------------>|<-- payload --->| +/** + * \defgroup attr Netlink attribute helpers * + * Netlink Type-Length-Value (TLV) attribute: + * \verbatim + |<-- 2 bytes -->|<-- 2 bytes -->|<-- variable -->| + ------------------------------------------------- + | length | type | value | + ------------------------------------------------- + |<--------- header ------------>|<-- payload --->| +\endverbatim * The payload of the Netlink message contains sequences of attributes that are * expressed in TLV format. + * + * @{ */ /** * mnl_attr_get_type - get type of netlink attribute - * @attr: pointer to netlink attribute + * \param attr pointer to netlink attribute * * This function returns the attribute type. */ @@ -38,7 +42,7 @@ uint16_t mnl_attr_get_type(const struct nlattr *attr) /** * mnl_attr_get_len - get length of netlink attribute - * @attr: pointer to netlink attribute + * \param attr pointer to netlink attribute * * This function returns the attribute length that is the attribute header * plus the attribute payload. @@ -50,7 +54,7 @@ uint16_t mnl_attr_get_len(const struct nlattr *attr) /** * mnl_attr_get_payload_len - get the attribute payload-value length - * @attr: pointer to netlink attribute + * \param attr pointer to netlink attribute * * This function returns the attribute payload-value length. */ @@ -71,8 +75,8 @@ void *mnl_attr_get_payload(const struct nlattr *attr) /** * mnl_attr_ok - check if there is room for an attribute in a buffer - * @nattr: attribute that we want to check if there is room for - * @len: remaining bytes in a buffer that contains the attribute + * \param nattr attribute that we want to check if there is room for + * \param len remaining bytes in a buffer that contains the attribute * * This function is used to check that a buffer, which is supposed to contain * an attribute, has enough room for the attribute that it stores, ie. this @@ -82,7 +86,7 @@ void *mnl_attr_get_payload(const struct nlattr *attr) * This function does not set errno in case of error since it is intended * for iterations. Thus, it returns 1 on success and 0 on error. * - * The @len parameter may be negative in the case of malformed messages during + * The len parameter may be negative in the case of malformed messages during * attribute iteration, that is why we use a signed integer. */ int mnl_attr_ok(const struct nlattr *attr, int len) @@ -94,8 +98,8 @@ int mnl_attr_ok(const struct nlattr *attr, int len) /** * mnl_attr_next - get the next attribute in the payload of a netlink message - * @attr: pointer to the current attribute - * @len: length of the remaining bytes in the buffer (passed by reference). + * \param attr pointer to the current attribute + * \param len length of the remaining bytes in the buffer (passed by reference). * * This function returns a pointer to the next attribute after the one passed * as parameter. You have to use mnl_attr_ok() to ensure that the next @@ -109,8 +113,8 @@ struct nlattr *mnl_attr_next(const struct nlattr *attr, int *len) /** * mnl_attr_type_valid - check if the attribute type is valid - * @attr: pointer to attribute to be checked - * @max: maximum attribute type + * \param attr pointer to attribute to be checked + * \param max maximum attribute type * * This function allows to check if the attribute type is higher than the * maximum supported type. If the attribute type is invalid, this function @@ -184,15 +188,6 @@ static int __mnl_attr_validate(const struct nlattr *attr, return 0; } -/** - * mnl_attr_validate - validate netlink attribute (simplified version) - * @attr: pointer to netlink attribute that we want to validate - * @type: data type (see enum mnl_attr_data_type) - * - * The validation is based on the data type. Specifically, it checks that - * integers (u8, u16, u32 and u64) have enough room for them. This function - * returns -1 in case of error and errno is explicitly set. - */ static size_t mnl_attr_data_type_len[MNL_TYPE_MAX] = { [MNL_TYPE_U8] = sizeof(uint8_t), [MNL_TYPE_U16] = sizeof(uint16_t), @@ -200,6 +195,15 @@ static size_t mnl_attr_data_type_len[MNL_TYPE_MAX] = { [MNL_TYPE_U64] = sizeof(uint64_t), }; +/** + * mnl_attr_validate - validate netlink attribute (simplified version) + * \param attr pointer to netlink attribute that we want to validate + * \param type data type (see enum mnl_attr_data_type) + * + * The validation is based on the data type. Specifically, it checks that + * integers (u8, u16, u32 and u64) have enough room for them. This function + * returns -1 in case of error and errno is explicitly set. + */ int mnl_attr_validate(const struct nlattr *attr, enum mnl_attr_data_type type) { int exp_len; @@ -214,9 +218,9 @@ int mnl_attr_validate(const struct nlattr *attr, enum mnl_attr_data_type type) /** * mnl_attr_validate2 - validate netlink attribute (extended version) - * @attr: pointer to netlink attribute that we want to validate - * @type: attribute type (see enum mnl_attr_data_type) - * @exp_len: expected attribute data size + * \param attr pointer to netlink attribute that we want to validate + * \param type attribute type (see enum mnl_attr_data_type) + * \param exp_len expected attribute data size * * This function allows to perform a more accurate validation for attributes * whose size is variable. If the size of the attribute is not what we expect, @@ -234,10 +238,10 @@ int mnl_attr_validate2(const struct nlattr *attr, /** * mnl_attr_parse - parse attributes - * @nlh: pointer to netlink message - * @offset: offset to start parsing from (if payload is after any extra header) - * @cb: callback function that is called for each attribute - * @data: pointer to data that is passed to the callback function + * \param nlh pointer to netlink message + * \param offset offset to start parsing from (if payload is after any header) + * \param cb callback function that is called for each attribute + * \param data pointer to data that is passed to the callback function * * This function allows to iterate over the sequence of attributes that compose * the Netlink message. You can then put the attribute in an array as it @@ -264,9 +268,9 @@ int mnl_attr_parse(const struct nlmsghdr *nlh, unsigned int offset, /** * mnl_attr_parse_nested - parse attributes inside a nest - * @nested: pointer to netlink attribute that contains a nest - * @cb: callback function that is called for each attribute in the nest - * @data: pointer to data passed to the callback function + * \param nested pointer to netlink attribute that contains a nest + * \param cb callback function that is called for each attribute in the nest + * \param data pointer to data passed to the callback function * * This function allows to iterate over the sequence of attributes that compose * the Netlink message. You can then put the attribute in an array as it @@ -293,7 +297,7 @@ int mnl_attr_parse_nested(const struct nlattr *nested, /** * mnl_attr_get_u8 - returns 8-bit unsigned integer attribute payload - * @attr: pointer to netlink attribute + * \param attr pointer to netlink attribute * * This function returns the 8-bit value of the attribute payload. */ @@ -304,7 +308,7 @@ uint8_t mnl_attr_get_u8(const struct nlattr *attr) /** * mnl_attr_get_u16 - returns 16-bit unsigned integer attribute payload - * @attr: pointer to netlink attribute + * \param attr pointer to netlink attribute * * This function returns the 16-bit value of the attribute payload. */ @@ -315,7 +319,7 @@ uint16_t mnl_attr_get_u16(const struct nlattr *attr) /** * mnl_attr_get_u32 - returns 32-bit unsigned integer attribute payload - * @attr: pointer to netlink attribute + * \param attr pointer to netlink attribute * * This function returns the 32-bit value of the attribute payload. */ @@ -326,7 +330,7 @@ uint32_t mnl_attr_get_u32(const struct nlattr *attr) /** * mnl_attr_get_u64 - returns 64-bit unsigned integer attribute. - * @attr: pointer to netlink attribute + * \param attr pointer to netlink attribute * * This function returns the 64-bit value of the attribute payload. This * function is align-safe since accessing 64-bit Netlink attributes is a @@ -341,7 +345,7 @@ uint64_t mnl_attr_get_u64(const struct nlattr *attr) /** * mnl_attr_get_str - returns pointer to string attribute. - * @attr: pointer to netlink attribute + * \param attr pointer to netlink attribute * * This function returns the payload of string attribute value. */ @@ -352,10 +356,10 @@ const char *mnl_attr_get_str(const struct nlattr *attr) /** * mnl_attr_put - add an attribute to netlink message - * @nlh: pointer to the netlink message - * @type: netlink attribute type that you want to add - * @len: netlink attribute payload length - * @data: pointer to the data that will be stored by the new attribute + * \param nlh pointer to the netlink message + * \param type netlink attribute type that you want to add + * \param len netlink attribute payload length + * \param data pointer to the data that will be stored by the new attribute * * This function updates the length field of the Netlink message (nlmsg_len) * by adding the size (header + payload) of the new attribute. @@ -374,10 +378,10 @@ void mnl_attr_put(struct nlmsghdr *nlh, uint16_t type, /** * mnl_attr_put_u8 - add 8-bit unsigned integer attribute to netlink message - * @nlh: pointer to the netlink message - * @type: netlink attribute type - * @len: netlink attribute payload size - * @data: 8-bit unsigned integer data that is stored by the new attribute + * \param nlh pointer to the netlink message + * \param type netlink attribute type + * \param len netlink attribute payload size + * \param data 8-bit unsigned integer data that is stored by the new attribute * * This function updates the length field of the Netlink message (nlmsg_len) * by adding the size (header + payload) of the new attribute. @@ -389,9 +393,9 @@ void mnl_attr_put_u8(struct nlmsghdr *nlh, uint16_t type, uint8_t data) /** * mnl_attr_put_u16 - add 16-bit unsigned integer attribute to netlink message - * @nlh: pointer to the netlink message - * @type: netlink attribute type - * @data: 16-bit unsigned integer data that is stored by the new attribute + * \param nlh pointer to the netlink message + * \param type netlink attribute type + * \param data 16-bit unsigned integer data that is stored by the new attribute * * This function updates the length field of the Netlink message (nlmsg_len) * by adding the size (header + payload) of the new attribute. @@ -403,9 +407,9 @@ void mnl_attr_put_u16(struct nlmsghdr *nlh, uint16_t type, uint16_t data) /** * mnl_attr_put_u32 - add 32-bit unsigned integer attribute to netlink message - * @nlh: pointer to the netlink message - * @type: netlink attribute type - * @data: 32-bit unsigned integer data that is stored by the new attribute + * \param nlh pointer to the netlink message + * \param type netlink attribute type + * \param data 32-bit unsigned integer data that is stored by the new attribute * * This function updates the length field of the Netlink message (nlmsg_len) * by adding the size (header + payload) of the new attribute. @@ -417,9 +421,9 @@ void mnl_attr_put_u32(struct nlmsghdr *nlh, uint16_t type, uint32_t data) /** * mnl_attr_put_u64 - add 64-bit unsigned integer attribute to netlink message - * @nlh: pointer to the netlink message - * @type: netlink attribute type - * @data: 64-bit unsigned integer data that is stored by the new attribute + * \param nlh pointer to the netlink message + * \param type netlink attribute type + * \param data 64-bit unsigned integer data that is stored by the new attribute * * This function updates the length field of the Netlink message (nlmsg_len) * by adding the size (header + payload) of the new attribute. @@ -431,9 +435,9 @@ void mnl_attr_put_u64(struct nlmsghdr *nlh, uint16_t type, uint64_t data) /** * mnl_attr_put_str - add string attribute to netlink message - * @nlh: pointer to the netlink message - * @type: netlink attribute type - * @data: pointer to string data that is stored by the new attribute + * \param nlh pointer to the netlink message + * \param type netlink attribute type + * \param data pointer to string data that is stored by the new attribute * * This function updates the length field of the Netlink message (nlmsg_len) * by adding the size (header + payload) of the new attribute. @@ -445,9 +449,9 @@ void mnl_attr_put_str(struct nlmsghdr *nlh, uint16_t type, const void *data) /** * mnl_attr_put_str_null - add string attribute to netlink message - * @nlh: pointer to the netlink message - * @type: netlink attribute type - * @data: pointer to string data that is stored by the new attribute + * \param nlh pointer to the netlink message + * \param type netlink attribute type + * \param data pointer to string data that is stored by the new attribute * * This function is similar to mnl_attr_put_str but it includes the NULL * terminator at the end of the string. @@ -462,8 +466,8 @@ void mnl_attr_put_str_null(struct nlmsghdr *nlh, uint16_t type, const void *data /** * mnl_attr_nest_start - start an attribute nest - * @nlh: pointer to the netlink message - * @type: netlink attribute type + * \param nlh pointer to the netlink message + * \param type netlink attribute type * * This function adds the attribute header that identifies the beginning of * an attribute nest. This function always returns a valid pointer to the @@ -482,8 +486,8 @@ struct nlattr *mnl_attr_nest_start(struct nlmsghdr *nlh, uint16_t type) /** * mnl_attr_nest_end - end an attribute nest - * @nlh: pointer to the netlink message - * @start: pointer to the attribute nest returned by mnl_attr_nest_start() + * \param nlh pointer to the netlink message + * \param start pointer to the attribute nest returned by mnl_attr_nest_start() * * This function updates the attribute header that identifies the nest. */ @@ -491,3 +495,7 @@ void mnl_attr_nest_end(struct nlmsghdr *nlh, struct nlattr *start) { start->nla_len = mnl_nlmsg_get_payload_tail(nlh) - (void *)start; } + +/** + * @} + */ diff --git a/src/callback.c b/src/callback.c index ded22aa..e1599ff 100644 --- a/src/callback.c +++ b/src/callback.c @@ -45,15 +45,20 @@ static mnl_cb_t default_cb_array[NLMSG_MIN_TYPE] = { }; /** + * \defgroup callback Callback helpers + * @{ + */ + +/** * mnl_cb_run2 - callback runqueue for netlink messages - * @buf: buffer that contains the netlink messages - * @numbytes: number of bytes stored in the buffer - * @seq: sequence number that we expect to receive - * @portid: Netlink PortID that we expect to receive - * @cb_data: callback handler for data messages - * @data: pointer to data that will be passed to the data callback handler - * @cb_ctl_array: array of custom callback handlers from control messages - * @cb_ctl_array_len: length of the array of custom control callback handlers + * \param buf buffer that contains the netlink messages + * \param numbytes number of bytes stored in the buffer + * \param seq sequence number that we expect to receive + * \param portid Netlink PortID that we expect to receive + * \param cb_data callback handler for data messages + * \param data pointer to data that will be passed to the data callback handler + * \param cb_ctl_array array of custom callback handlers from control messages + * \param cb_ctl_array_len array length of custom control callback handlers * * You can set the cb_ctl_array to NULL if you want to use the default control * callback handlers, in that case, the parameter cb_ctl_array_len is not @@ -62,7 +67,7 @@ static mnl_cb_t default_cb_array[NLMSG_MIN_TYPE] = { * Your callback may return three possible values: * - MNL_CB_ERROR (<=-1): an error has occurred. Stop callback runqueue. * - MNL_CB_STOP (=0): stop callback runqueue. - * - MNL_CB_OK (>=1): no problems has occurred. + * - MNL_CB_OK (>=1): no problem has occurred. * * This function propagates the callback return value. On error, it returns * -1 and errno is explicitly set. If the portID is not the expected, errno @@ -114,12 +119,12 @@ out: /** * mnl_cb_run - callback runqueue for netlink messages (simplified version) - * @buf: buffer that contains the netlink messages - * @numbytes: number of bytes stored in the buffer - * @seq: sequence number that we expect to receive - * @portid: Netlink PortID that we expect to receive - * @cb_data: callback handler for data messages - * @data: pointer to data that will be passed to the data callback handler + * \param buf buffer that contains the netlink messages + * \param numbytes number of bytes stored in the buffer + * \param seq sequence number that we expect to receive + * \param portid Netlink PortID that we expect to receive + * \param cb_data callback handler for data messages + * \param data pointer to data that will be passed to the data callback handler * * This function is like mnl_cb_run2() but it does not allow you to set * the control callback handlers. @@ -127,7 +132,7 @@ out: * Your callback may return three possible values: * - MNL_CB_ERROR (<=-1): an error has occurred. Stop callback runqueue. * - MNL_CB_STOP (=0): stop callback runqueue. - * - MNL_CB_OK (>=1): no problems has occurred. + * - MNL_CB_OK (>=1): no problems has occurred. * * This function propagates the callback return value. */ @@ -136,3 +141,7 @@ int mnl_cb_run(const char *buf, size_t numbytes, unsigned int seq, { return mnl_cb_run2(buf, numbytes, seq, portid, cb_data, data, NULL, 0); } + +/** + * @} + */ diff --git a/src/nlmsg.c b/src/nlmsg.c index 9b2f457..af08671 100644 --- a/src/nlmsg.c +++ b/src/nlmsg.c @@ -13,34 +13,38 @@ #include <string.h> #include <libmnl/libmnl.h> -/* - * Netlink message: - * - * |<----------------- 4 bytes ------------------->| - * |<----- 2 bytes ------>|<------- 2 bytes ------>| +/** + * \defgroup nlmsg Netlink message helpers * - * |-----------------------------------------------| - * | Message length (including header) | - * |-----------------------------------------------| - * | Message type | Message flags | - * |-----------------------------------------------| - * | Message sequence number | - * |-----------------------------------------------| - * | Netlink PortID | - * |-----------------------------------------------| - * | | - * . Payload . - * |_______________________________________________| + * Netlink message: + * \verbatim + |<----------------- 4 bytes ------------------->| + |<----- 2 bytes ------>|<------- 2 bytes ------>| + |-----------------------------------------------| + | Message length (including header) | + |-----------------------------------------------| + | Message type | Message flags | + |-----------------------------------------------| + | Message sequence number | + |-----------------------------------------------| + | Netlink PortID | + |-----------------------------------------------| + | | + . Payload . + |_______________________________________________| +\endverbatim * * There is usually an extra header after the the Netlink header (at the * beginning of the payload). This extra header is specific of the Netlink * subsystem. After this extra header, it comes the sequence of attributes * that are expressed in Type-Length-Value (TLV) format. + * + * @{ */ /** * mnl_nlmsg_size - calculate the size of Netlink message (without alignment) - * @len: length of the Netlink payload + * \param len length of the Netlink payload * * This function returns the size of a netlink message (header plus payload) * without alignment. @@ -52,7 +56,7 @@ size_t mnl_nlmsg_size(size_t len) /** * mnl_nlmsg_aligned_size - calculate the aligned size of Netlink messages - * @len: length of the Netlink payload + * \param len length of the Netlink payload * * This function returns the size of a netlink message (header plus payload) * with alignment. @@ -64,7 +68,7 @@ size_t mnl_nlmsg_aligned_size(size_t len) /** * mnl_nlmsg_get_payload_len - get the length of the Netlink payload - * @nlh: pointer to the header of the Netlink message + * \param nlh pointer to the header of the Netlink message * * This function returns the Length of the netlink payload, ie. the length * of the full message minus the size of the Netlink header. @@ -76,7 +80,7 @@ size_t mnl_nlmsg_get_payload_len(const struct nlmsghdr *nlh) /** * mnl_nlmsg_put_header - reserve and prepare room for Netlink header - * @buf: memory already allocated to store the Netlink header + * \param buf memory already allocated to store the Netlink header * * This function sets to zero the room that is required to put the Netlink * header in the memory buffer passed as parameter. This function also @@ -95,8 +99,8 @@ struct nlmsghdr *mnl_nlmsg_put_header(void *buf) /** * mnl_nlmsg_put_extra_header - reserve and prepare room for an extra header - * @nlh: pointer to Netlink header - * @size: size of the extra header that we want to put + * \param nlh pointer to Netlink header + * \param size size of the extra header that we want to put * * This function sets to zero the room that is required to put the extra * header after the initial Netlink header. This function also increases @@ -114,7 +118,7 @@ void *mnl_nlmsg_put_extra_header(struct nlmsghdr *nlh, size_t size) /** * mnl_nlmsg_get_payload - get a pointer to the payload of the netlink message - * @nlh: pointer to a netlink header + * \param nlh pointer to a netlink header * * This function returns a pointer to the payload of the netlink message. */ @@ -125,8 +129,8 @@ void *mnl_nlmsg_get_payload(const struct nlmsghdr *nlh) /** * mnl_nlmsg_get_payload_offset - get a pointer to the payload of the message - * @nlh: pointer to a netlink header - * @offset: offset to the payload of the attributes TLV set + * \param nlh pointer to a netlink header + * \param offset offset to the payload of the attributes TLV set * * This function returns a pointer to the payload of the netlink message plus * a given offset. @@ -138,8 +142,8 @@ void *mnl_nlmsg_get_payload_offset(const struct nlmsghdr *nlh, size_t offset) /** * mnl_nlmsg_ok - check a there is room for netlink message - * @nlh: netlink message that we want to check - * @len: remaining bytes in a buffer that contains the netlink message + * \param nlh netlink message that we want to check + * \param len remaining bytes in a buffer that contains the netlink message * * This function is used to check that a buffer that contains a netlink * message has enough room for the netlink message that it stores, ie. this @@ -149,7 +153,7 @@ void *mnl_nlmsg_get_payload_offset(const struct nlmsghdr *nlh, size_t offset) * This function does not set errno in case of error since it is intended * for iterations. Thus, it returns 1 on success and 0 on error. * - * The @len parameter may become negative in malformed messages during message + * The len parameter may become negative in malformed messages during message * iteration, that is why we use a signed integer. */ int mnl_nlmsg_ok(const struct nlmsghdr *nlh, int len) @@ -161,8 +165,8 @@ int mnl_nlmsg_ok(const struct nlmsghdr *nlh, int len) /** * mnl_nlmsg_next - get the next netlink message in a multipart message - * @nlh: current netlink message that we are handling - * @len: length of the remaining bytes in the buffer (passed by reference). + * \param nlh current netlink message that we are handling + * \param len length of the remaining bytes in the buffer (passed by reference). * * This function returns a pointer to the next netlink message that is part * of a multi-part netlink message. Netlink can batch several messages into @@ -180,7 +184,7 @@ struct nlmsghdr *mnl_nlmsg_next(const struct nlmsghdr *nlh, int *len) /** * mnl_nlmsg_get_payload_tail - get the ending of the netlink message - * @nlh: pointer to netlink message + * \param nlh pointer to netlink message * * This function returns a pointer to the netlink message tail. This is useful * to build a message since we continue adding attributes at the end of the @@ -193,8 +197,8 @@ void *mnl_nlmsg_get_payload_tail(const struct nlmsghdr *nlh) /** * mnl_nlmsg_seq_ok - perform sequence tracking - * @nlh: current netlink message that we are handling - * @seq: last sequence number used to send a message + * \param nlh current netlink message that we are handling + * \param seq last sequence number used to send a message * * This functions returns 1 if the sequence tracking is fulfilled, otherwise * 0 is returned. We skip the tracking for netlink messages whose sequence @@ -212,8 +216,8 @@ int mnl_nlmsg_seq_ok(const struct nlmsghdr *nlh, unsigned int seq) /** * mnl_nlmsg_portid_ok - perform portID origin check - * @nlh: current netlink message that we are handling - * @seq: netlink portid that we want to check + * \param nlh current netlink message that we are handling + * \param seq netlink portid that we want to check * * This functions return 1 if the origin is fulfilled, otherwise * 0 is returned. We skip the tracking for netlink message whose portID @@ -231,7 +235,7 @@ int mnl_nlmsg_portid_ok(const struct nlmsghdr *nlh, unsigned int portid) /** * mnl_nlmsg_fprintf - print netlink message to file - * @nlh: pointer to netlink message that we want to print + * \param nlh pointer to netlink message that we want to print * * This function prints the netlink header to a file. This function may be * useful for debugging purposes. @@ -262,3 +266,7 @@ void mnl_nlmsg_fprintf(FILE *fd, const struct nlmsghdr *nlh) isalnum(b[i+3]) ? b[i+3] : 0); } } + +/** + * @} + */ diff --git a/src/socket.c b/src/socket.c index cf8f251..de1424c 100644 --- a/src/socket.c +++ b/src/socket.c @@ -15,14 +15,62 @@ #include <time.h> #include <errno.h> +/** + * \mainpage + * + * libmnl is a minimalistic user-space library oriented to Netlink developers. + * There are a lot of common tasks in parsing, validating, constructing of + * both the Netlink header and TLVs that are repetitive and easy to get wrong. + * This library aims to provide simple helpers that allows you to avoid + * re-inventing the wheel in common Netlink tasks. + * + * The acronim libmnl stands for LIBrary Minimalistic NetLink. + * + * (temporary) libmnl homepage is: + * http://1984.lsi.us.es/projects/libmnl/ + * + * \section features Main Features + * - Small: the shared library requires around 30KB in a x86-based computer. + * - Simple: this library avoids complex abstractions that tend to hide Netlink + * details. It avoids elaborated object-oriented infrastructure and complex + * callback-based workflow. + * - Easy to use: the library simplifies the work for Netlink-wise developers. + * It provides functions to make socket handling, message building, + * validating, parsing, and sequence tracking, easier. + * - Easy to re-use: you can use this library to build your own abstraction + * layer upon this library, if you want to provide another library that + * hides Netlink details to your users. + * - Decoupling: the interdependency of the main bricks that compose this + * library is reduced, ie. the library provides many helpers but the + * programmer is not forced to use them. + * + * \section Dependencies + * You have to install the Linux kernel headers that you want to use to develop + * your application. Moreover, this library requires that you have some basics + * on Netlink. + * + * \section scm Git Tree + * The current development version of libmnl can be accessed at: + * http://1984.lsi.us.es/git/?p=libmnl/.git;a=summary + * + * \section using Using libmnl + * You can access several examples files under examples/ in the libmnl source + * code tree. + */ + struct mnl_socket { int fd; struct sockaddr_nl addr; }; /** + * \defgroup socket Netlink socket helpers + * @{ + */ + +/** * mnl_socket_get_fd - obtain file descriptor from netlink socket - * @nl: netlink socket obtained via mnl_socket_open() + * \param nl netlink socket obtained via mnl_socket_open() * * This function returns the file descriptor of a given netlink socket. */ @@ -33,7 +81,7 @@ int mnl_socket_get_fd(const struct mnl_socket *nl) /** * mnl_socket_get_portid - obtain Netlink PortID from netlink socket - * @nl: netlink socket obtained via mnl_socket_open() + * \param nl netlink socket obtained via mnl_socket_open() * * This function returns the Netlink PortID of a given netlink socket. * It's a common mistake to assume that this PortID equals the process ID @@ -47,7 +95,7 @@ unsigned int mnl_socket_get_portid(const struct mnl_socket *nl) /** * mnl_socket_open - open a netlink socket - * @unit: the netlink socket bus ID (see NETLINK_* constants) + * \param unit the netlink socket bus ID (see NETLINK_* constants) * * On error, it returns -1 and errno is appropriately set. Otherwise, it * returns a valid pointer to the mnl_socket structure. @@ -71,9 +119,9 @@ struct mnl_socket *mnl_socket_open(int bus) /** * mnl_socket_bind - bind netlink socket - * @nl: netlink socket obtained via mnl_socket_open() - * @groups: the group of message you're interested in - * @pid: the port ID you want to use (use zero for automatic selection) + * \param nl netlink socket obtained via mnl_socket_open() + * \param groups the group of message you're interested in + * \param pid the port ID you want to use (use zero for automatic selection) * * On error, this function returns -1 and errno is appropriately set. On * success, 0 is returned. You can use MNL_SOCKET_AUTOPID which is 0 for @@ -110,9 +158,9 @@ int mnl_socket_bind(struct mnl_socket *nl, int groups, int pid) /** * mnl_socket_sendto - send a netlink message of a certain size - * @nl: netlink socket obtained via mnl_socket_open() - * @buf: buffer containing the netlink message to be sent - * @bufsiz: number of bytes in the buffer that you want to send + * \param nl netlink socket obtained via mnl_socket_open() + * \param buf buffer containing the netlink message to be sent + * \param bufsiz number of bytes in the buffer that you want to send * * On error, it returns -1 and errno is appropriately set. Otherwise, it * returns the number of bytes sent. @@ -128,9 +176,9 @@ int mnl_socket_sendto(const struct mnl_socket *nl, const void *buf, size_t len) /** * mnl_socket_recvfrom - receive a netlink message - * @nl: netlink socket obtained via mnl_socket_open() - * @buf: buffer that you want to use to store the netlink message - * @bufsiz: size of the buffer passed to store the netlink message + * \param nl netlink socket obtained via mnl_socket_open() + * \param buf buffer that you want to use to store the netlink message + * \param bufsiz size of the buffer passed to store the netlink message * * On error, it returns -1 and errno is appropriately set. If errno is set * to ENOSPC, it means that the buffer that you have passed to store the @@ -171,7 +219,7 @@ int mnl_socket_recvfrom(const struct mnl_socket *nl, void *buf, size_t bufsiz) /** * mnl_socket_close - close a given netlink socket - * @nl: netlink socket obtained via mnl_socket_open() + * \param nl netlink socket obtained via mnl_socket_open() * * On error, this function returns -1 and errno is appropriately set. * On success, it returns 0. @@ -186,10 +234,10 @@ int mnl_socket_close(struct mnl_socket *nl) /** * mnl_socket_setsockopt - set Netlink socket option - * @nl: netlink socket obtained via mnl_socket_open() - * @type: type of Netlink socket options - * @buf: the buffer that contains the data about this option - * @len: the size of the buffer passed + * \param nl netlink socket obtained via mnl_socket_open() + * \param type type of Netlink socket options + * \param buf the buffer that contains the data about this option + * \param len the size of the buffer passed * * This function allows you to set some Netlink socket option. As of writing * this, the existing options are: @@ -217,10 +265,10 @@ int mnl_socket_setsockopt(const struct mnl_socket *nl, int type, /** * mnl_socket_getsockopt - get a Netlink socket option - * @nl: netlink socket obtained via mnl_socket_open() - * @type: type of Netlink socket options - * @buf: pointer to the buffer to store the value of this option - * @len: size of the information written in the buffer + * \param nl netlink socket obtained via mnl_socket_open() + * \param type type of Netlink socket options + * \param buf pointer to the buffer to store the value of this option + * \param len size of the information written in the buffer * * On error, this function returns -1 and errno is appropriately set. */ @@ -229,3 +277,7 @@ int mnl_socket_getsockopt(const struct mnl_socket *nl, int type, { return getsockopt(nl->fd, SOL_NETLINK, type, buf, len); } + +/** + * @} + */ |