From 50074732af4fbfc0ca5ae4bb07e971bc9e222126 Mon Sep 17 00:00:00 2001 From: Thomas Graf Date: Thu, 21 Jul 2011 16:24:31 +0200 Subject: [PATCH] more documentation updates - improved stylesheets for both doxygen and asciidoc - use of xml doxygen layout - python script to resolve <> asciidoc references to <> based on the target caption - graphics for netlink and netlink error headers - more link documentation --- doc/Doxyfile.in | 2 +- doc/DoxygenLayout.xml | 185 +++++++++++++++ doc/Makefile.am | 8 +- doc/core.txt | 309 ++++++++++++------------- doc/images/attribute_hdr.png | Bin 0 -> 14996 bytes doc/images/ifinfomsg.png | Bin 0 -> 44814 bytes doc/images/library_overview.png | Bin 0 -> 23870 bytes doc/images/nlmsgerr.png | Bin 0 -> 43810 bytes doc/images/nlmsghdr.png | Bin 0 -> 19553 bytes doc/index.txt | 28 ++- doc/libnl.css | 271 +++++++++++++++++++--- doc/resolve-asciidoc-refs.py | 25 ++ doc/route.txt | 399 +++++++++++++++++++++++++++++--- doc/stylesheets/asciidoc.css | 6 +- 14 files changed, 998 insertions(+), 235 deletions(-) create mode 100644 doc/DoxygenLayout.xml create mode 100644 doc/images/attribute_hdr.png create mode 100644 doc/images/ifinfomsg.png create mode 100644 doc/images/library_overview.png create mode 100644 doc/images/nlmsgerr.png create mode 100644 doc/images/nlmsghdr.png create mode 100755 doc/resolve-asciidoc-refs.py diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index ed78bfe..5deba44 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -519,7 +519,7 @@ FILE_VERSION_FILTER = # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. -LAYOUT_FILE = +LAYOUT_FILE = DoxygenLayout.xml #--------------------------------------------------------------------------- # configuration options related to warning and progress messages diff --git a/doc/DoxygenLayout.xml b/doc/DoxygenLayout.xml new file mode 100644 index 0000000..29049d1 --- /dev/null +++ b/doc/DoxygenLayout.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/Makefile.am b/doc/Makefile.am index 165660b..149daba 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -4,14 +4,16 @@ ASCIIDOCOPTS=-a pygments -a language=c -a icons \ -a toc2 \ + -a numbered \ -a imagesdir="./images/" \ -a iconsdir="./images/icons" \ -a stylesdir="${abs_srcdir}/stylesheets/" %.html: %.txt - asciidoc $(ASCIIDOCOPTS) $< - ./doxygen-link.py libnl.dict $@ > doxygen-link.tmp - mv doxygen-link.tmp $@ + ./resolve-asciidoc-refs.py $< > asciidoc.tmp + asciidoc $(ASCIIDOCOPTS) -o $@ asciidoc.tmp + ./doxygen-link.py libnl.dict $@ > asciidoc.tmp + mv asciidoc.tmp $@ asciidoc: core.html route.html index.html diff --git a/doc/core.txt b/doc/core.txt index 42f1035..0ab32ec 100644 --- a/doc/core.txt +++ b/doc/core.txt @@ -20,25 +20,42 @@ provides a abstract data type framework which eases the implementation of object based netlink protocols where objects are added, removed, or modified using a netlink based protocol. -.Sub Libraries +.Library Hierarchy -Several sub libraries exist which provide APIs to several netlink -protocols: +The suite is split into multiple libraries: -- link:route.html[libnl-route] Adresses, Links, Neighbours, Routing & Traffic Control -- Netfilter -- Generic Netlink +image:library_overview.png["Library Hierarchy"] -+FIXME+: Add links +link:core.html[Netlink Library] (libnl):: +Socket handling, sending and receiving, message construction and parsing, ... + +link:route.html[Routing Family Library] (libnl-route):: +Adresses, links, neighbours, routing, traffic control, neighbour tables, ... + +Netfilter Library (libnl-nf):: +Connection tracking, logging, queueing + +Generic Netlink Library (libnl-genl):: +Controller API, family and command registration === How To Read This Documentation -The documentation consists of this manual and the API reference pages. -Both contain references to each other and as many examples as -possible. +The libraries provide a broad set of APIs of which most applications only +require a small subset of it. Depending on the type of application, some +users may only be interested in the low level netlink messaging API while +others wish to make heavy use of the high level API. + +In any case it is recommended to get familiar with the netlink protocol +first. + +- <> + +The low level APIs are described in: + +- <> +- <> -+FIXME+ === Linking to this Library @@ -48,9 +65,10 @@ The main header is ``. Additional headers need to be included in your sources depending on the subsystems your program makes use of. +.Version Checking [source,c] ----- -#include +#include #if LIBNL_VER_NUM >= LIBNL_VER(3,0) /* include code if compiled with libnl version >= 3.0 */ @@ -64,8 +82,9 @@ $ gcc myprogram.c -o myprogram -lnl === Debugging -The library contains debugging statements which are printed to -+stderr+ if the environment variable +NLDBG+ is set to > 0. +The library has been compiled with debugging statements enabled it will +print debug information to +stderr+ if the environment variable +NLDBG+ +is set to > 0. ----- $ NLDBG=2 ./myprogram @@ -130,7 +149,7 @@ $ NLCB=debug ./myprogram ----- -[[core_prot_fund]] +[[core_netlink_fundamentals]] == Netlink Protocol Fundamentals The netlink protocol is a socket based IPC mechanism used for @@ -147,19 +166,36 @@ each peer. A netlink protocol is typically based on messages and consists of the netlink message header (+struct nlmsghdr+) plus the payload attached -to it. The payload can consist of arbitary data but usually contains +to it. The payload can consist of arbitrary data but usually contains a fixed size protocol specific header followed by a stream of attributes. -.Netlink message header (+struct nlmsghdr+) -[cols="^s,^s", width="40%", align="center"] -|============================================================== -2+| Length -| Type | Flags -2+| Sequence Number -2+| Port (Address) -|============================================================== +.Netlink message header (struct nlmsghdr) +image:nlmsghdr.png[align="center", alt="Netlink Message Header"] + +Total Length (32bit):: +Total length of the message in bytes including the netlink message header. + +Message Type (16bit):: +The message type specifies the type of payload the message is carrying. +Several standard message types are defined by the netlink protocol. +Additional message types may be defined by each protocol family. See +<> for additional information. + +Message Flags (16bit):: +The message flags may be used to modify the behaviour of a message type. +See section <> for a list of standard message flags. + +Sequence Number (32bit):: +The sequence number is optional and may be used to allow referring to +a previous message, e.g. an error message can refer to the original +request causing the error. + +Port Number (32bit):: +The port number specifies the peer to which the message should be delivered +to. If not specified, the message will be delivered to the first matching +kernel side socket of the same protocol family. [[core_msg_types]] === Message Types @@ -193,10 +229,9 @@ The type of message is primarly identified by its 16 bit message type set in the message header. The following standard message types are defined: - +NLMSG_NOOP+ - No operation, message must be discarded -- +NLMSG_ERROR+ - Error message or ACK, see <>, respectively <> -- +NLMSG_DONE+ - End of multipart sequence, see <> +- +NLMSG_ERROR+ - Error message or ACK, see <> + respectively <> +- +NLMSG_DONE+ - End of multipart sequence, see <> - +NLMSG_OVERRUN+ - Overrun notification (Error) Every netlink protocol is free to define own message types. Note that @@ -231,8 +266,8 @@ msc { -------- The configuration may be changed by sending a +MSG_SETCFG+ which will -be responded to with either a ACK (see <>) -or a error message (see <>). +be responded to with either a ACK (see <>) +or a error message (see <>). ["mscgen"] -------- @@ -294,16 +329,7 @@ Error messages can be sent in response to a request. Error messages must use the standard message type +NLMSG_ERROR+. The payload consists of a error code and the original netlink mesage header of the request. -.Netlink Error Message Header (+struct nlmsggerr+) -[cols="^,^", width="50%"] -|============================================================== -2+| Length -|.nlmsg_type = NLMSG_ERROR | .nlmsg_flags = 0 -2+| Sequence number of the orig request -2+| Port number of the orig request -2+| Error Code (e.g. EINVAL) -2+| Netlink Message Header of orig. request -|============================================================== +image:nlmsgerr.png["Netlink Errror Message header"] Error messages should set the sequence number to the sequence number of the request which caused the error. @@ -337,6 +363,7 @@ msc { ACK messages also use the message type +NLMSG_ERROR+ and payload format but the error code is set to 0. +[[core_msg_flags]] ==== Message Flags The following standard flags are defined @@ -349,19 +376,16 @@ The following standard flags are defined #define NLM_F_ECHO 8 -------- -- `NLM_F_REQUEST` - Message is a request, see <>. -- `NLM_F_MULTI` - Multipart message, see <> -- `NLM_F_ACK` - ACK message requested, see <>. +- `NLM_F_REQUEST` - Message is a request, see <>. +- `NLM_F_MULTI` - Multipart message, see <> +- `NLM_F_ACK` - ACK message requested, see <>. - `NLM_F_ECHO` - Request to echo the request. The flag +NLM_F_ECHO+ is similar to the `NLM_F_ACK` flag. It can be used in combination with `NLM_F_REQUEST` and causes a notification which is sent as a result of a request to also be sent to the sender regardless of whether the sender has subscribed to the corresponding -multicast group or not. See <> +multicast group or not. See <> Additional universal message flags are defined which only apply for +GET+ requests: @@ -383,8 +407,7 @@ Additional universal message flags are defined which only apply for Use of these flags is completely optional and many netlink protocols only make use of the `NLM_F_DUMP` flag which typically requests the receiver to send a list of all objects in the context of the message type as a -sequence of multipart messages (see <>). +sequence of multipart messages (see <>). Another set of flags exist related to `NEW` or `SET` requests. These flags are mutually exclusive to the `GET` flags: @@ -411,20 +434,19 @@ Netlink allows the use of sequence numbers to help relate replies to requests. It should be noted that unlike in protocols such as TCP there is no strict enforcment of the sequence number. The sole purpose of sequence numbers is to assist a sender in relating replies to the -corresponding requests. See <> for more -information. +corresponding requests. See <> for more information. Sequence numbers are managed on a per socket basis, see -<> for more information on -how to use sequence numbers. +<> for more information on how to use sequence numbers. [[core_multicast]] === Multicast Groups TODO -See <> +See <> +[[core_sockets]] == Netlink Sockets In order to use the netlink protocol, a netlink socket is required. @@ -434,10 +456,10 @@ same netlink protocol, e.g. one socket to send requests and receive replies and another socket subscribed to a multicast group to receive notifications. -=== Socket Allocation & Freeing +=== Allocation & Freeing The netlink socket and all its related attributes are represented by -=struct nl_sock=. ++struct nl_sock+. [source,c] -------- @@ -470,8 +492,7 @@ unsigned int nl_socket_use_seq(struct nl_sock *sk); Most applications will not want to deal with sequence number handling themselves though. When using nl_send_auto() the sequence number is filled out automatically and matched again on the receiving side. See -<> for more -information. +<> for more information. This behaviour can and must be disabled if the netlink protocol implemented does not use a request/reply model, e.g. when a socket is @@ -567,7 +588,7 @@ while (1) [[core_sk_cb]] === Modifiying Socket Callback Configuration -See <> for more information on +See <> for more information on callback hooks and overwriting capabilities. Each socket is assigned a callback configuration which controls the @@ -696,9 +717,9 @@ int nl_socket_set_passcred(struct nl_sock *sk, int state); .Enable/Disable Auto-ACK Mode -The following functions allow to enable/disable Auto-ACK mode on a -socket. See <> for more information on -what implications that has. Auto-ACK mode is enabled by default. +The following functions allow to enable/disable Auto-ACK mode on a socket. +See <> for more information on what implications that has. +Auto-ACK mode is enabled by default. [source,c] -------- @@ -742,7 +763,7 @@ NOTE: Processing of NETLINK_PKTINFO has not been implemented yet. == Sending and Receiving of Messages / Data [[core_send]] -=== Sending Netlink Messages +=== Sending Messages The standard method of sending a netlink message over a netlink socket is to use the function nl_send_auto(). It will automatically complete @@ -800,7 +821,7 @@ it will try to fall back to the peer address specified in the socket unaddressed and it is left to the kernel to find the correct peer. nl_send_iovec() also adds credentials if present and enabled -(see <>). +(see <>). The message is then passed on to nl_sendmsg(). @@ -838,8 +859,8 @@ may inspect or modify the message and return an error code. If this error code is NL_OK the message is sent using sendmsg() resulting in the number of bytes written being returned. Otherwise the message sending process is aborted and the error code specified by the -callback function is returned. See <> for more information on how to set callbacks. +callback function is returned. See <> for more information +on how to set callbacks. .Sending Raw Data with nl_sendto() @@ -889,7 +910,7 @@ nl_send_simple(sock, RTM_GETLINK, NLM_F_DUMP, &rt_hdr, sizeof(rt_hdr)); -------- [[core_recv]] -=== Receiving Netlink Messages +=== Receiving Messages The easiest method to receive netlink messages is to call nl_recvmsgs_default(). It will receive messages based on the semantics defined in the socket. The @@ -917,12 +938,11 @@ nl_recvmsgs() implements the actual receiving loop, it blocks until a netlink message has been received unless the socket has been put into non-blocking mode. -For the unlikely scenario that certain required receive -characteristics can not be achieved by fine tuning the internal -recvmsgs function using the callback configuration (see <>) the application may provide a -complete own implementation of it and overwrite all calls to -nl_recvmsgs() with the function nl_cb_overwrite_recvmsgs(). +For the unlikely scenario that certain required receive characteristics +can not be achieved by fine tuning the internal recvmsgs function using +the callback configuration (see <>) the application may provide +a complete own implementation of it and overwrite all calls to nl_recvmsgs() +with the function nl_cb_overwrite_recvmsgs(). [source,c] -------- @@ -972,21 +992,21 @@ will be done repeately until the parser returns NL_STOP, an error was returned or all data has been parsed. In case the last message parsed successfully was a multipart message -(see <>) and the parser did not +(see <>) and the parser did not quit due to either an error or NL_STOP nl_recv() respectively the applications own implementation will be called again and the parser starts all over. -See <> for information on -how to extract valid netlink messages from the parser and on how to -control the behaviour of it. +See <> for information on how to extract valid +netlink messages from the parser and on how to control the behaviour +of it. [[core_parse_character]] .Parsing Characteristics The internal parser is invoked for each netlink message received from a netlink socket. It is typically fed by nl_recv() (see -<>). +<>). The parser will first ensure that the length of the data stream provided is sufficient to contain a netlink message header and that @@ -1010,8 +1030,7 @@ always returns NL_OK. Another callback hook NL_CB_SEND_ACK exists which is called if the message has the NLM_F_ACK flag set. Although I am not aware of any userspace netlink socket doing this, the application may want to send -an ACK message back to the sender (see <>). +an ACK message back to the sender (see <>). [source,c] -------- @@ -1041,12 +1060,12 @@ Messages>>). TODO -== Netlink Message Parsing & Construction +== Message Parsing & Construction === Message Format -See <> for an introduction to -the netlink protocol and its message format. +See <> for an introduction to the netlink +protocol and its message format. .Alignment @@ -1097,8 +1116,7 @@ the parsing manually. This method is described below. Alternatively the library also offers an interface to implement a parser as part of a cache operations set which is especially useful when your protocol deals with objects of any sort such as network links, routes, etc. -This high level interface is described in <> +This high level interface is described in <>. .Splitting a byte stream into separate messages @@ -1234,8 +1252,7 @@ struct nlattr *nlmsg_attrdata(const struct nlmsghdr *hdr, int hdrlen); int nlmsg_attrlen(const struct nlmsghdr *hdr, int hdrlen); -------- -See <> for more information on how to use netlink -attributes. +See <> for more information on how to use netlink attributes. .Parsing a Message the Easy Way @@ -1244,8 +1261,7 @@ step. If +hdrlen > 0+ it will first call nlmsg_valid_hdr() to check if the protocol header fits into the message. If there is more payload to parse, it will assume it to be attributes and parse the payload accordingly. The function behaves exactly like nla_parse() when -parsing attributes, see <>. +parsing attributes, see <>. [source,c] -------- @@ -1263,13 +1279,13 @@ int nlmsg_validate(struct nlmsghdr *hdr, int hdrlen, intmaxtype, struct nla_policy *policy); -------- -See <> for an -example and more information on attribute parsing. +See <> for an example and more information on +attribute parsing. === Construction of a Message -See <> for information on the netlink -message format and alignment requirements. +See <> for information on the netlink message format +and alignment requirements. Message construction is based on struct nl_msg which uses an internal buffer to store the actual netlink message. struct nl_msg +does not+ @@ -1374,14 +1390,13 @@ To use this feature, the message must be sent using the function nl_send_auto(). Like +port+, the argument +seqnr+ can be set to +NL_AUTO_PORT+ indicating that the local port assigned to the socket should be used as source port. This is generally a good idea unless -you are replying to a request. See <> for more information on how to fill the header. +you are replying to a request. See <> +for more information on how to fill the header. NOTE: The argument +payload+ can be used by the application to reserve room for additional data after the header. A value of > 0 is - equivalent to calling +nlmsg_reserve(msg, payload, - NLMSG_ALIGNTO)+. See <> for more information on reserving room for + equivalent to calling +nlmsg_reserve(msg, payload, NLMSG_ALIGNTO)+. + See <> for more information on reserving room for data. .Example @@ -1477,10 +1492,10 @@ NOTE: `nlmsg_append()` will *not* align the start of the data. Any .Adding attribtues to a message Construction of attributes and addition of attribtues to the message is -covereted in section <>. +covereted in section <>. [[core_attr]] -== Netlink Attributes +== Attributes Any form of payload should be encoded as netlink attributes whenever possible. Use of attributes allows to extend any netlink protocol in @@ -1510,9 +1525,8 @@ the message format will never ever change in the future. === Attribute Format Netlink attributes allow for any number of data chunks of arbitary -length to be attached to a netlink message. See <> for more information on where attributes are -stored in the message. +length to be attached to a netlink message. See <> +for more information on where attributes are stored in the message. The format of the attributes data returned by nlmsg_attrdata() is as follows: @@ -1532,17 +1546,7 @@ Every attribute must start at an offset which is a multiple of to be padded at the end, the function nla_padlen() returns the number of padding bytes that will or need to be added. --------- -0 1 2 3 -0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -+-------------------------------------------------------------+ -| Length | Type | -+------------------------------+------------------------------+ -| Attribute Payload | -. . -. . -+-------------------------------------------------------------+ --------- +image:attribute_hdr.png["Netlink Attribute Header"] Every attribute is encoded with a type and length field, both 16 bits, stored in the attribute header (struct nlattr) preceding the attribute @@ -1556,16 +1560,14 @@ the next attribute. .Splitting an Attributes Stream into Attributes Although most applications will use one of the functions from the -nlmsg_parse() family (See <>) an interface exists to split the attributes stream -manually. +nlmsg_parse() family (See <>) an interface exists +to split the attributes stream manually. -As described in <> the attributes -section contains a infinite sequence or stream of attributes. The -pointer returned by nlmsg_attrdata() (See <>) points to the first attribute header. Any subsequent -attribute is accessed with the function nla_next() based on the -previous header. +As described in <> the attributes section contains a +infinite sequence or stream of attributes. The pointer returned by +nlmsg_attrdata() (See <>) points to the first attribute +header. Any subsequent attribute is accessed with the function nla_next() +based on the previous header. [source,c] -------- @@ -1654,7 +1656,7 @@ void *nla_data(const struct nlattr *hdr); [NOTE] Never rely on the size of a payload being what you expect it to be. _Always_ verify the payload size and make sure that it matches your -expectations. See <>. +expectations. See <> [[core_attr_validation]] .Attribute Validation @@ -1702,8 +1704,7 @@ introduced attributes to continue functioning. -------- #include -int nla_validate(struct nlattr *head, int len, int maxtype, - struct nla_policy *policy); +int nla_validate(struct nlattr *head, int len, int maxtype, struct nla_policy *policy); -------- The function nla_validate() returns 0 if all attributes are valid, @@ -1712,26 +1713,24 @@ otherwise a validation failure specific error code is returned. Most applications will rarely use nla_validate() directly but use nla_parse() instead which takes care of validation in the same way but also parses the the attributes in the same step. See -<> for an -example and more information. +<> for an example and more information. The validation process in detail: --# If attribute type is 0 or exceeds +maxtype+ attribute is - considered valid, 0 is returned. --# If payload length is < +minlen+, +-NLE_ERANGE+ is returned. --# If +maxlen+ is defined and payload exceeds it, +-NLE_ERANGE+ - is returned. --# Datatype specific requirements rules, see - <> --# If all is ok, 0 is returned. -[[core_attr_nla_parse]] +. If attribute type is 0 or exceeds +maxtype+ attribute is + considered valid, 0 is returned. +. If payload length is < +minlen+, +-NLE_ERANGE+ is returned. +. If +maxlen+ is defined and payload exceeds it, +-NLE_ERANGE+ + is returned. +. Datatype specific requirements rules, see <> +. If all is ok, 0 is returned. + +[[core_attr_parse_easy]] .Parsing Attributes the Easy Way Most applications will not want to deal with splitting attribute -streams themselves as described in <>. A much easier method is to use -nla_parse(). +streams themselves as described in <> +A much easier method is to use nla_parse(). [source,c] -------- @@ -1742,15 +1741,13 @@ int nla_parse(struct nlattr **attrs, int maxtype, struct nlattr *head, -------- The function nla_parse() will iterate over a stream of attributes, -validate each attribute as described in <>. If the validation of all attributes succeeds, -a pointer to each attribute is stored in the +attrs+ array at -`attrs[nla_type(attr)]`. +validate each attribute as described in <> +If the validation of all attributes succeeds, a pointer to each attribute +is stored in the +attrs+ array at `attrs[nla_type(attr)]`. As an alernative to nla_parse() the function nlmsg_parse() can be used to parse the message and its attributes in one step. See -<> for -information on how to use these functions. +<> for information on how to use these functions. .Example: @@ -1815,8 +1812,7 @@ struct nlattr *nlmsg_find_attr(struct nlmsghdr *hdr, int hdrlen, int attrtype); -------- NOTE: `nla_find()` and `nlmsg_find_attr()` will *not* search in nested - attributes recursively, see <>. + attributes recursively, see <>. ==== Iterating over a Stream of Attributes @@ -1901,8 +1897,8 @@ int my_put(struct nl_msg *msg) } -------- -See <> for datatype specific -attribute construction functions. +See <> for datatype specific attribute construction +functions. .Exception Based Attribute Construction @@ -1931,8 +1927,8 @@ nla_put_failure: } -------- -See <> for more information on the -datatype specific exception based variants. +See <> for more information on the datatype specific +exception based variants. [[core_attr_types]] === Attribute Data Types @@ -2114,11 +2110,10 @@ if (attrs[ATTR_FLAG]) [[core_attr_nested]] ==== Nested Attributes -As described in <>, attributes can be -nested allowing for complex tree structures of attributes. It is -commonly used to delegate the responsibility of a subsection of the -message to a subsystem. Nested attributes are also commonly used for -transmitting list of objects. +As described in <>, attributes can be nested allowing for +complex tree structures of attributes. It is commonly used to delegate +the responsibility of a subsection of the message to a subsystem. +Nested attributes are also commonly used for transmitting list of objects. When nesting attributes, the nested attributes are included as payload of a container attribute. diff --git a/doc/images/attribute_hdr.png b/doc/images/attribute_hdr.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6cfdadb032818d58350eac14fd14eb90b88c69 GIT binary patch literal 14996 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 literal 0 HcmV?d00001 diff --git a/doc/images/library_overview.png b/doc/images/library_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..dd9d5fe9a6ae0b5d45a0d3816a5dbdbd83480cf4 GIT binary patch literal 23870 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 E08+_^&;S4c literal 0 HcmV?d00001 diff --git a/doc/images/nlmsgerr.png b/doc/images/nlmsgerr.png new file mode 100644 index 0000000000000000000000000000000000000000..58e53d55defe6daf927c38ea6e3adc71604177d4 GIT binary patch literal 43810 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�A&LK`-w^!lPDvY}j;yFn7jCVnvw69>9|-ZhtL>_E$wkHpRt zDpW0}7X|KuAWD@Q63|2@8Ya5zt@!SW{7$x^x*7owQ=w7}`171AHoQEf3md|}LoBPvcRXo(;Apv~Ks`W=x@8F37jH@*1X1Qn_#-K1| zuTtU`)zmf#xi2c@-TL>+{AiRl=?zjFgJ8x(1*$cd8p2r9BFLaJQD5%i6b#c>`f9CQ zjEojPdq^;pli}cakO=$!eep{O50}dm7A}%jGH8H=YwylaV_N?t;SbRm_il7NCnWG@ zV?G??e2c0MKG!l>P%fQ3ggL3&SlChWb#@9}9P1pbcHKH#@c?n(>G z`kyu?%3^>r+00dk+ka;_t2n@goaomTf6H0jETb((7Yi^8N@8**+VvzPtj^CLc6R0_ zCXPLx>Flqr^|=k0^4^j(!x@LFMyF8S?FmKn>FRdI+dB`2t6u#hbhs(8fQ8QB`)%Cp z=gC5?&2M+XVGQz5;mUb9aZwQq0F*BLwUm+)N7ezIa==Yw#o9j$Q273Xup)SPBmIUB zVqN#*ck(FJx`9IOHR!zb^=hX}T_?R+JS1dMqvbkr+S)cOCVc}Iw!qWp(w%TKyS!Z=v16zfN$iwrkpjBRSFLkT0-H164|Jt3Nz4PEPp*9c}`!`Oo zG&(T&-01l~-Hc=ypb{e)HpQHNz_Jo^e>s{3SYqGVS}ey`XGZ8L2_{BXZYQ}Ogi_<; zXzqPj`N^^bM}DJE1PY|@C7>dlCB^)8bh6C`k)Tm%?!J9cGf+`!YxUX=4i;l|+#PC$ zfzzL>Mr9x!+MA#6pIG$Y0;6af{qz%%E=VaqK7IVRc{*RAE|sgLFBFy2g6A?45de#_ zkLT|%I660|tb{h0gp-tQh{A#-Gvx#Y{cg$v22{g`VMFADOcM7l=S)3*izD57mmC1I*8}#{cR1yZGT$4Tu)E);#${hu7}% zSLgkP-D6)Y%crHDNNm3eH?#Ri}v@rEya_OQLjv@1sp|mo_jU2WXT?}-*v#e^icS3$4_+|WZ|3Ofm5S@ zGDDgBE#v{+sjjZeM7y#4x@>?RTC+bKDe$Ou~*HC8P^t-tGOb zFOEOnteceQx5&MGWafq8YKbs%g^wbS_fJ!*G#KnW)HQXk}6^hHGA!@ZQ}v8)3Uk+V-d#!TpG znQoK4rmr9pG=kZ?3x<`lVcJ@*8na4$enwzP=#9cMv%D_ndwZ(cf9`ZJ zOgi;6$&8I@4=0M@F%xCb1n3aaG(}DFQcMyZ+Qk;wn{1@9oRNsZ6oeCv3<@A~S}J^dg>N>ura0=R97_RL@?e9-7& zw4y?nWV$*mnZsg zxF9DYL>2e=mC15lTLl%h-%dQ`^X?AAP}+ntnU^A^hIp8$!SApBZR2zI$Jb{5U#3&@c;jo5S9^gQ^W%5yJ9 za`WRcO&S_RJzA8LzZUd4#y?Tu-K}e7OsU}FK%dhJ4goJ@`>5JhrE{$H`3bL z09R~c*(H+HF7OA09yp{998!1Ff&@fHNbY9ya;`MN{atqOcjLXLq}SdXIQGaofYq@qB$%=*iCY?r_@Y-J$2(Wk)zv z;t-;%p+dCoh2Gv!Ia^cHi>uw?&F*mEU-XXl6hi)~!Ou^d)5&7Nu$2i?HCUIkwA;G()_MY&VD-D z1s3&mbaedq@uQbjhA}ZQabI6wj(|rW4B;P9bMvj`pN?j{S383gnuc-=q?TlZoP{2g zl$13TP?RP47s{R&8_;VIR>_Nwka$udKj$O)dh5}NV6KmItpK<_U26O`lXcNQoXUiV zDnd&O@piUqiSs052P%$D4uog^SX;;-;*bGw{*z6m=;cMe9GhS$Ry^nXi5 z<8-=rcLqw=fW)m@jDaC!_)Ubf*;CSRhiHI@rlzJQEG*0_<#T(IX!GNgDm69LDQ|0g z8+de49@Y*zGJ#JuAV4o$Zub|_43o(ZP(Nlib0QXSM{-#JDo!L^c38jvZX(u{7S4UA zU}5z>1t?K(d>`1^hh%o7oHmJu-`kS>#cAma0y30S1*J>b{y}NS` z>*B|CTw&#A$4D(Bk4@6l>P+?gK?2bP8olSS+F+LrT9wi30;;YVf4SqVgEjHN3g!z5Q2CA8!IITEK7*an%;5)Q5ZD4~m)Wr?ZfM?Gnlv0wN zW6j8`S+}{1`L9%f za2CC-_?*TZ>XD!x|HASPJb>`Qj|E5+kry{sG?_G?mcV`w?q?$?>?Rn5(H?<=adEbE zk%YNMK|kA_*92P;H#(UGF*9^}^bWPFssM>K+-i^}TGL{w0^b^JH*Ac|i%->n4!pso zg^#a;BlGu?{TY8XMs$k7Sf{H6Fh@1pgDqXH{0!*tRsKw^=cUvS1})*>jP#@n2%x5p z3WHzqiWNPl_#A^U^aG*vpeqkbPH?a66&2GGDM*C;_&;`m58qJ_fAOu?0@Z;Q5!!D# z;|AN`N8{MWw^G_t1CJ&Fz9u3WErAkv=9G(-#aLts@W2`^L5$>7Z<}5ZTF(6=b@J5Y z?DOre0yRC__Z{FO(iUc_P)MNS+h$J+K<6VPH zeLYrJk3bus1gY16Anl=L0=_y=CuOvfT^oyvps(;(Ie>;QJwWF;LYlP|}e!G(^@#j6~^s0U=e2ks|N z_a$}Rp=O|&X`7rZp8oad`D&xRk%C7N1=jT%AD(&;Br~j8TCa;ESTRHh!jRCZKSi1p zf!%@G4e+v_KCx<~qe+Y2R3=%{DID^hn4h(m2nfH3aBa3XC!3Yu6Ak14wn3#8V;R}9 zB}E$3nqGPO*BLzjX+8J)f@}o=oxvTp=?TJmw1}zpQ+4grK*Dokq8k&_bAR0P)9!Fz zo6n_}32eqd{U{$5#N`4|z;X;*vTeq)SwBn&ECx;%s(zsMd$@}s;BuHOq+rn5`(MTi z7MLpc^8qyUXlG}cFEL-|s?;dZ8G1VaqQ$fW`(3g~e1VfvZA2-lTD}JXYHOdxWD9rl zTreEfMjL9qgV>;rAXMPvyn7zc`P67uYDvjmpL=U16M~eUnG>^M1kuCodpom05nVX6 zXx+`<{8&S;S;E#MO~G)#e|~ya#L3WLF%d2n<92@WeX>r76kN{MVDIm>0%`@h-C=%- zyP;;VhbX zC(VdV9Ovn(3fGDbO1N;u`D&S-zF#QBBaZ>06XG~1pif4g-VP_Ho85WwvAv~rT@|dn z^P|5#%99!TGipK-QVuZ2%^`qkpdYGBn!UNs@piKz;eku$m0JS5dqK_9# zMuQ?T&xgkra6-i;4np3WnN6oL2KqD(t+)S&8sBz@|H~7E@2>$=lnXlE07m)D2<-MD zjHkW*UC%;DOQdvYD`jip996N!y9Ir|6b6KKrCT393=;f2q{f0ebw!n_IJke(lXC? z4H+ydr5^d0Cfvp2;%NGA*;|8kxc){p6H5Y^Vd)TmO)-&)3_*L4B~`lb2(b zRWfOT~d=cOACcVyjMY6&Z^D1(8x>TT4 z@{o;IbHM)kAU;pnXsH!H8JO%i_kJ=!n~u+q=x22B5Rd~={}Bmj*XvYU_w^~1Dne(l z`dscQN$NgUs(&lP=a_R?XC|Ri8jxR*{BaojcOS9E3`dTao;0B5P?PV2LIG9`x7)^?_Tht=-AxbXVOX&$g*aM$eHW6ny*t-b70JV6PN~0|27hX_>`eI!T zB7U`a@(&5pk443FLiC!YrrOTb3<>;Sd3S`2?D8=TchQ2z&G*WDyJD^!I?3vU%Mu&2KM3=CqtV+|nB`=zbIouL(1pC%Ws3407FXZM06{gE>Gi9e{X00_h8=Y`zEHbGXG&9euV<yj;%P%lF=+*lP(*-l|@2-`ZRyGVyo9K>}Na}IC=}#3;YkU z=S6?-x4+rVH=IV%Q7aXWV&P!V&uI$^Cz4dEth^K$8jsft?^nrtQPoIIME!9CoPL1y zZIO#}Y~%8fm9PEy@(ibv84sN@%&M zH{AI|+mPEKvxeH77QQ~>M^uHcYNh!7U&KLA0%y-SYRcl??8Hq0|ACGeNc8|_C<2!0 zA*dqKu;tHikgpb<$xHiZKR+)or$|MpepLw!0E!h;ykNsr!$h=2ZiGgZ{k?tmNgjY3 z3>tquIGmoMlHceQSRbtn3GB>)L#0n;`u+J>TajvLI(nvDqwQhaW?UYd<3JY6YbPcgu@|<3faRGaRBhTljV8; zj?CglzP%N8ImFm9V4F9>qGWJCGhF#)Q*9`Q$5jKlxs`5^Y7J3w`D{)kbzNx9J(6=w zi@3_uy@=nLhJ{)5slP-CohOzp<7g-3KnSRGN(xFX>d*dg`|K28(jhMLZ8@Zj-)c4< zH~}{nRb^7m2jw}F+B$q@%$#hBI_qEOwP^h20`KP$&zj1`#d zkKIWOvMMN;@nz+PympnqI4!#f%SP~y zcZl>fX;<2$nH2$_6Ev8_MY$lf&!*aI2xZdfTk-(OK9UAD#xL~J+c!N0_*ilS8I*vO z5dzaVlFnYD0COV0&1jC|a5z{Nn&)h#(<6{qSIB*wIE1pJKf+e)qqW7~`5#(OcA}P+ zJ0(g_9DxnOR6EyQ;7|~?Dxw#PjBQEnERT7eBRNyZrJ{zuxdUzmEm3#}1tOx)Ujpt%H#ZN02&8ICE>y=gt{kGFM_jj$*7b1(( zYgV`R1@NYgV?90T*QY+VfA<=aMX<0#9kUg17^q_eXpyMGqV~qd`n9X2&23JX&g!Zo z>5_HzJ?%XC^q`T?^JjV`uG#K=2#eE6oB!>=V*vSIuC1g3i>;k;>E}K=!VaAoNHv{7 zhk29AjFwG%tOx_;Xc7i`m@YXTjhRV4345Y&OkQKAj!J=?2#z^6?!XjaFtlSvBq=eZW$WQ0Aw;WrtZqkp9Qk;6(bgX~$RkGeU))X- z;#yn(NX9Z8@@)jGM&Zdd-&93~toAX1OwgcJ7QM-m7J;e>pa7FK({KsamcT=&#m%J? zE$HE`(N6;?j+>D*2ot0i1CUNe*yIKDH+cux8~-Ekm;<}nk}ba{?mzMl!vD%UI28G< z*sAQFADh}2=d&- zmHMizVCm)q^Kq`Cwy7zX(^ef2J1EG>0Yw3*LFxgjLc>nc=U8#m&92bxzSzH)m$rbH z$kp{45RU$xtu8k?7{p?H4Ut0(UqPEsc+lFD!Th=2;Hwk&By~P$TRpezUF+ufKc1K=0t- z5Qph=N;Njpj0oLu1kdULIj74v0pH?wS`wR4Q_2~yJYlwxc=U1saY5ZVbpKwlgB!3^NMmxt3d z*Wb&_%gdOpxR3(@ZEZu&38)YM&?*;i0%R*}25qGAFU`(gmf@&d(5B|*?5+nB`i*wB znHQAfK>4?_qGH4S^=gW#JmoWGyOqb2}#2cNja|LIa@@GBKSt99d)0@)BFphK;fleWxOnV8`?^jw}IOG-KKb)f zHfu8)Np6y5Wv62-Mnjb(9?w^kU}DyPdG@9rY_OfazP`>C^ipqj+B`{#)z?7@^u50- z*s8M{-asIo{H{^DH=5NQ)FA?RiZVY7eotLOyZHC7pMm=2a&#m8uG8*hwp{1$-st1O zWD$$WpH`oLDDbUeSK%Q`Jw;(y6s*R#sGR8y!O<7vBCj~F?yKnA7khV*601N)l~d>EwwUW|Yubnl|FiP@+& zY5($g%S8CCu*4rWaIMV;*iGJtQ{P4ip~@=_erkVL4>b(T6VpO=tF_Z?q2Pj=ee zPxbGwb}tJfd18>XY3l67pvw8|yGgmD;oo^)Zb<=3X$aMVv1)<%y9yFSM7o?di0M9Q zE9bRo2D?>_D#|z%!@C7d$ak#k3P6}{T{tkj^GZjh)u|#nTY3C<9{r&M|Ksm;+OAAe z_p|7#sJf$D*a<-*@-xiH;)04Wihy}Ud$&#zpqc5tqR1Ayt0Hkf@mo2 z=*wsGsL&p1l3uVYmjO^%dcPKOsWRi;=YxYC`tgih7;ag!z3;UX7(j{1lCdX z_pgv*s{aY6q+rT;C@+|==jQ4O{|&LSaL`wx_!2^T?pJgM- z$nq&c0O~+7uHTb1-va!~^vTQ)leI-{EqsV9=O^dwe-G3yPS3a0yE--ohEinDg}(UC z&Q;!7{sY7W*msEB-wixkD;+}Ft&;7HRZq_!|KUo@kSNJQ*|46h76iA2N}VO=CwXSU zon8q00q%~#5da0*&gKVZwfP-lP~pX6;xdnzG}2%8#R6tJpalP6HNTTqq+Lo_7_bt^ zYoX5s;nb(Gi1^&IcNzVxGFkUKnE2Wo1y5N>38b_#9N-OTMzc86fZ2mO09jBe9JRlQ z=hLS6i{eduL>b`o@3^~cTl#5ouu10q?URTrEm5e5xWwOs7Y|$&6nM7xY~~886OJkL zR>hMIA2ytxo;NyEH%wmy`#>^EE`I^&FrD1-(@AfG#I!Jo?GhQ;!NRefi?>-n6d~t5 z(VE{Age_`ltj;?n+y3liWcjNOIL(-vCQnfj;3)(Yk3y_9DLJci2?c$j zTy!l!ev@i1L^KR-!E0xrtv~*`KX$tc>W3E+Vbk-)CSX(Wgt;=jWis-9db$U?99FwB zNa9J>{jMQ2vVn~Es{&qIF=<2s{=%C_S`*t|j6blkNygg($wLtu9aqvZ@wBUAu0>dk zO@C~Rb%)m*8KyG?h^s2QyAlDG1DaHo0PC6-J{Cti`&NK7%Dg^FtU>jMV1xwxKqqws zXey?^IH@1_3zHs(B+r)^+PI%bG~;>miVj8VH^r13G&CdQEVq}Nn0NI>g`A%Dsr!sUoipY#a=qOr0*SZ58o2D-C#hhNIc&^;&r` zI4H=E=F8ZA`1||nIX!IkQW0`%(&;cCb_UNbHysY8A{n=NC3S{%&sDQLZ12N|BH}!) zj(u`4&2Re&I9nJ16=yhw-VG4mlpb%NwQI>ua8*0j7bctrcLs|}l$PBO6138oc`4Ye z_s1Spa`O@VcM!3i6&AI>2hbS39XKvhV9ErdCDagTHc+~3`!B2Lng**j@5rEYRKT2r zP))wtXr=IUDLzT#wJ_b!Qrq*8Eaj)hS2vxLb4g<|CVzyFPX*b-dvHGrp+X|Nl=t^H z!#RXD`n`n;PgL?rv*ilthEWcnf@)@TDJ&csvVO11tS*^LsNX}fFAD#L>R^B)Uj_|y zVxbMtL3V~xJ_2nGfGft;4v2HLmp~qP;dMPYNnuDLBKq>#(Lz});hGX$2M-*RI(SdJ zRI~(I5Jz8JFNw}4)$v?GrMEFBbb(+nu~0?U`5)l;wn@3(UQK2|iS_^ePplLW*Cg|9UHq+KK0@27>JD=)Psx zU%-A9`4U6zNcs)t;59_Fi6XzK{NwJal80532N+%yV2v}cW7)`SQ1hu6{|VOr0j~M* zkOZE5_%>1Y|HZLrpv6cas4hkdH!A%%%zgj?&*g(SO9Ik=FBEkL4w|TYA&Wg>_%u)~ zf}z^{^QV%K6U|ust#b-EbuwL!BY3tU|LLy73faXyjAk4gU}NJpFIaojY3lFE*J)a^?U1dwxVLDvGD3Z1wtw zl3ETpTyB9=v&ekF%cdUET`N=qDw47 z%g<7C_F&+~Dl6~MrsWokTK-l}FAi)YZ0K@IgW#@Ens}l^Obm0t-VvP1)ky^u|05O_ zxazHi05=QS^b0eyzldiI6>qa;t$76z<~i5sXt0nFTj$!;*w`N(7U9yL&gaIZ_#8Du z0Sd2z{#Af6s6fJHf9zT2!w2Hk*FIQlB_)}d1q>|BHuK&w6qIw}FOmdsSA~;+w6rHe z98)ez4^YgItI{lD4yTPvMBKiyY%kYY`r8__{*D*GYixguyHvec}_RF%sZ#>6V{=<9mh^22_fC*qsS+7P;iUcGF>Ql>vqqm&(gDv>^E4a$@G_R`kuqku3e zlnZK}u)q7&-(x_WyD%G_{chX_bR06qnk0|w)smZUOMAlTF~d8CV(=jZ5_xjyyPu>d zrhtGoQb^WTs@eyAo`IUCwHhRxC_B4TN$0Dos)R+(#KZ>t$^RVJ{{Tsi`fJ??OM8A# zh1*BfD+OI8UZ*R{wT*TEJE)-5%}pvKq=i|a51@&Vzd<62x?pV$p(>7qb6{lfyH+r) zC(_?o#Q#Y(P$W&dPRD0PYvdR|&sVqgdexolVrUQ!j>DBQITx0Fp2u=zFfgw61}SE6 zH7G7LS(7^P)&Og?3-&Alk2Lo%)nN08Bpn-IxlTTxIF^$`Kzet8y^QdV8Uic-hmT$j z^)0l*?T<7Dl{Wtj?w*l~R(0rJX}L;aNTsXiW}R4D{#}rQJva9MO(9KN$Gf8f9OPS1 zjUWB^-PqaKy&qrvMyiZF?abq#D*)Q8aBO$D)r*XP&F^=)^%a@$M>0d&^+xBB!?LTD z0&MkKtL=L8<=4R^8KtbI(+RS2W+PWuS9ABX9u7P~mqAHQ#*|hZe7a8SJ+YV?MIuKNJ6 zX&(y0q+G{IDMJR5!3?Y$KeCeZ=PnYOE)HUU!DvaKclEMg;VnN67%%F<3kz7Hil>IE zbkHT@%@o0n?+v9Wbj||UGaDmv)9>MeaSjwquk!~Bw_jnyxWlo7NLp{v@ZAu$LN7xU zhOT!rkQvJoY?%1nkqp|2F)4w9&!sq}(+{|`CZHDiy0RLolaeGk5IDt$6PWGAv6PXu zts+)htx`+hWe`7!i2P0-YZ;-JS~d{MRqoqc{8#s+>LvPj5u{aKGgzkachA%6^=cRK zmM6RIv(?vNm|NuU;#$7;_w0Q48;8?Q0t-E1^!jAEfKQJs|0Rn}1I@PCGh>QsA1#R| z!R3J;ku!(Qo$-a2;y$PENj;Sk=%Y)($xC^8u{A3EEKW*8n!lIDR-a%8T%<)qGXY$L z>7C(931r6q2rO7{>5<&^fB=A?|4B*-m_XnrrMYH5{6FAND^5z-8Yu4V4YYb=!%NKr zmx{(h4!%5wi=@F?HdZ=d`N8gU#SOBliqm8Zf#NKf3sfz=UXNrc$U@wzoa=t0bF&p zpf;Kv&;b-Uom{7HCBi?g{SMbi0W`w7hEGPnbA_C>EtOSG$}IjzByAILMazxogp`Db zS4YIJ6XS$+SA}TRQ92xN2L5e~uQ1G@T8V&v^Fu`e3Hf`McxXsRJH&qF_q@f6FVSug zCIz~8PT=RwhZ|u`YAgnIOBKnG3&ma{5I!s4m(8xG1T>&Oo2ZceyBuT({KiP&+Z6ff zBRih^>;i*jIM4#&M;=CmJ>fB4<}ztn}1 zyaq$Dbe@w3_4b<6VGc>=cV-;kCD5ikQdqUtKY*hiLs`z28yZoxdXkL3U+&EvtwkN7+fZ=~A`*boW*A@Y#GSDAc3 zm+*w&y9eB*+ml;AJuf5ZGyuU-V9gw}%D8t{+uc1ojH+;JdlUIY#CZ!yf=M#5=2cM4 z_*nEiT)ua_&?;(DW;iT8z@nRF3&cGycN>uybfh2ha9K8xH(G5gJ_0sKt174=HVbqP z8x#!u%@MC58o_YnkMm{dPmvO(DjZ=~oCxv=xQq)0a+uQjc`PKUMywf~p^QLlDs!9f zbEXUH4?{1>JYm6OE^|pB{10C%)({wMg)F-=q%R=0+9308^;pI>K#|kAalA6^sp%BT2}AP z(rb#|Hwt*%X;E&FTrlF9PX^i~c633Hr{3@47Gq!Z&%QQsT<`};@-6yy0EH{C)ob@( zpW!_J%tqT_@!ssv#+~WWnAppv)zQgXs$DGlN)Ho!>e{J!5h$~B#%IYo}HfV#&e_CXeLz@j$g|E)5LYh zHF-r*!AJutD}rFyh_oyL%TkmPfq)>9J!F(A8x#c(a28k`bpBVJdyu2^T_wv1S?mhS1cQ0Y4H=p@9O4H6R*znL+`Ec!O z&W9^>-;sukPaN{QPS#b2&>Imak|Sr(l9+t%ZYoB{+IQ%;?^a9y{_Ncs)(}!f3DB^* z51|4Oy)cE(eo(Nt?+6}@U5F&qE@miO3EwvYJ1>4# zVCSVP2f~Cga&SBaQnoitaQmL-8kr^x`PA&R&O9-NyV zHzU@Q?)COPESOXv?u>bMIOZ2+DQk0}2_r-TIUPPgeaD;JoCK(0iX-t7wN@6qzTRiG zg=No6mjW^k7XO_cNXmT)4xgsk>6yvAa#F}%aHk@L0;UwIF_D{Ed8dS1V7lU%BNiEWj1E;_+`gD8rZfS=}&oGc`` zL7PzdqriuFJV%$N_l_BmIHk&q@9^7sw~YdJ43nelXt znCzp{LFvZ!RLsx!ntKpOub2L=%kVcHFzNIxa6~>oYg|)TPVq%6K zZ7n?nvs=)CFV__PlP5l`iXUNWXcAhCfF{Q>Pv-U@gg2(4O3oG1(4k2w>0PdUG+Jr@|498m|Q(cefB}|Ihe9*RXNyNZoAQKfBuR(@P^f2cBLY z7m-OBu3ZAX$MEoZO8x{fa>Q`if2zCNgSMmP`Xj3$+G705`^gE{^+u2!Vpm>MC%u7ibLPfQ@*L)%NsJ4GZJH{5ma(0rfcYW?jmF5c{&w`GfShAn-bR} z4<;DO{S1Boe%na>oNtA;V3nj_4_)1wZVw1pDSZ#yT2caJf~rEhL`Eue+1RMCSH;0I zyN|SQu*FpmXqOKU2&@SOnTx^5l0B5iyx?%-4z;gA)qYG#f%}Cp`~nL0yZeQQNKej> zG+JW<7>yfrHwIduVtSHWS7At`+#D+e{D758dVzaaaPSYQ9YvB&^087uP)gkj=;xVe zp)>GMfJy>z1STOyrgqR z6$7HtWlD*w*@{}S$pYc>5~}*Zlst~? z#~}Iy3ihPf>88Nelt!fi8ulv@IFISj4Sn$R%o{MCg!l)!3^$KKV0{~Z%HwflO17&jv(KqEM{)}k7UfoKWfW`wu83{do1>cv9KkJ8SR+)k%()^Vjtf3;zFxl=RN78y+ zd7HOI4F4tD?Vg^tf@6H^-{NtovxZ~Pw_=@+8PZVyMXRIX)Pjz=0+g6qz=Azc@=euL zT-?g9b?)3MHy5wfSLxl*Vs|$_M&8jeCnyzUgjAb4T6n6-iCpb;S;19IR>cZ`9A}-e zf5HdJb+T`8>26poOogyNPn?m3J4vR-oPCw$lv?6is9hQt^%MJorKKQwL6bp7n-Fih zI=W@|0zN(v0>mP0D{i6k0JdizjP(3Is^rcCI=-*l2LV)w!HN1v&Y;hhY(v}(pJBF; zAK=l6q_(sPebs`bxg~-3)3ae1{9g5q3%4jP_MsEFYkHb;^d?0)7TiJ80{!eItx~*) z-S=AE0#RdciX77d^GbO5Z+hHv%qd$d)Wrl!AbMf=PBC72fHkNQr#A~yv@erwM z^e*`KZdNr2*I*=VDR=Yph$~3YvX*GO=LHbJ2kfRg mNVM?cYT4#Ry;fuETf8Ek1@8;4#lo3kTdXaPA1yQYCI1h!6@Q8V literal 0 HcmV?d00001 diff --git a/doc/index.txt b/doc/index.txt index c59be0e..c207b44 100644 --- a/doc/index.txt +++ b/doc/index.txt @@ -1,16 +1,22 @@ -libnl -===== -Thomas Graf -3.0, April 12 2011: +Documentation Overview - libnl Suite +==================================== -== Table of Contents -=== Libraries - - link:core.html[Core Library] - - link:route.html[Routing Family] +== Libraries -=== Tools - - link:link.html[Link Utility] +image:library_overview.png["Library Hierarchy"] -=== Python Packages +link:core.html[Netlink Library] (libnl):: +Socket handling, sending and receiving, message construction and parsing, ... + +link:route.html[Routing Family Library] (libnl-route):: +Adresses, links, neighbours, routing, traffic control, neighbour tables, ... + +Netfilter Library (libnl-nf):: +Connection tracking, logging, queueing + +Generic Netlink Library (libnl-genl):: +Controller API, family and command registration + +== Python Packages - netlink.core - netlink.route.link diff --git a/doc/libnl.css b/doc/libnl.css index b92bafc..ddc6ac3 100644 --- a/doc/libnl.css +++ b/doc/libnl.css @@ -2,21 +2,31 @@ body, table, div, p, dl { font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 12px; + font-size: 13px; } /* @group Heading Levels */ +h1, h2, h3 { + color: #990000; +} + h1 { - font-size: 180%; + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; } h2 { - font-size: 140%; + font-size: 120%; } h3 { - font-size: 120%; + font-size: 100%; } dt { @@ -82,13 +92,15 @@ div.navtab { /* @group Link Styling */ a { - color: #3D578C; + /* color: #3D578C; */ + color: #990000; font-weight: normal; text-decoration: none; } .contents a:visited { - color: #4665A2; + /* color: #4665A2; */ + color: #990000; } a:hover { @@ -118,7 +130,8 @@ a.elRef { } a.code { - color: #4665A2; + /* color: #4665A2; */ + color: #990000; } a.codeRef { @@ -158,6 +171,7 @@ div.ah { border-radius: 0.5em; -webkit-border-radius: .5em; -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; -webkit-box-shadow: 2px 2px 3px #999; -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); @@ -167,7 +181,6 @@ div.ah { div.groupHeader { margin-left: 16px; margin-top: 12px; - margin-bottom: 6px; font-weight: bold; } @@ -185,16 +198,7 @@ body { div.contents { margin-top: 10px; margin-left: 10px; - margin-right: 10px; -} - -div.contents p { - margin-left: 30px; -} - -div.contents .fragment { - margin-left: 30px; - margin-right: 20px; + margin-right: 5px; } td.indexkey { @@ -370,8 +374,13 @@ table.memberdecls { white-space: nowrap; } +.memItemRight { + width: 100%; +} + .memTemplParams { - color: #4665A2; + /* color: #4665A2; */ + color: #990000; white-space: nowrap; } @@ -382,10 +391,11 @@ table.memberdecls { /* Styles for detailed member documentation */ .memtemplate { - font-size: 100%; - color: #4665A2; + font-size: 80%; + /* color: #4665A2; */ + color: #990000; font-weight: normal; - margin-left: 3px; + margin-left: 9px; } .memnav { @@ -397,10 +407,14 @@ table.memberdecls { padding: 2px; } +.mempage { + width: 100%; +} + .memitem { padding: 0; - border: 1px solid #C4CFE5; - margin-bottom: 30px; + margin-bottom: 10px; + margin-right: 5px; } .memname { @@ -410,17 +424,53 @@ table.memberdecls { } .memproto { - background-color: #F9FAFC; - border-bottom: 1px solid #A3B4D7; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; padding: 6px 0px 6px 0px; - color: #000000; + color: #253555; font-weight: bold; + /* text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); */ + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 8px; + border-top-left-radius: 8px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 8px; + -moz-border-radius-topleft: 8px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 8px; + -webkit-border-top-left-radius: 8px; + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; } .memdoc { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; padding: 2px 5px; - margin-left: 30px; + background-color: #FBFCFD; + border-top-width: 0; + /* opera specific markup */ + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 8px; + -moz-border-radius-bottomright: 8px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 8px; + -webkit-border-bottom-right-radius: 8px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); } .paramkey { @@ -432,13 +482,36 @@ table.memberdecls { } .paramname { - color: #602020; + /* color: #602020; */ + color: black; white-space: nowrap; } .paramname em { font-style: normal; } +.params, .retval, .exception, .tparams { + border-spacing: 6px 2px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + + + + /* @end */ /* @group Directory (tree) */ @@ -589,14 +662,14 @@ table.doxtable th { list-style-type:none; float:left; padding-left:10px; - padding-right: 15px; + padding-right:15px; background-image:url('bc_s.png'); background-repeat:no-repeat; background-position:right; color:#364D7C; } -.navpath a +.navpath li.navelem a { height:32px; display:block; @@ -604,11 +677,25 @@ table.doxtable th { outline: none; } -.navpath a:hover +.navpath li.navelem a:hover { color:#6884BD; } +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + div.summary { float: right; @@ -623,6 +710,19 @@ div.summary a white-space: nowrap; } +div.ingroups +{ + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + div.header { background-image:url('nav_h.png'); @@ -637,3 +737,110 @@ div.headertitle padding: 5px 5px 5px 10px; } +dl +{ + padding: 0 0 0 10px; +} + +dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug +{ + border-left:4px solid; + padding: 0 0 0 6px; +} + +dl.note +{ + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + border-color: #00D000; +} + +dl.deprecated +{ + border-color: #505050; +} + +dl.todo +{ + border-color: #00C0E0; +} + +dl.test +{ + border-color: #3030E0; +} + +dl.bug +{ + border-color: #C08050; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + diff --git a/doc/resolve-asciidoc-refs.py b/doc/resolve-asciidoc-refs.py new file mode 100755 index 0000000..5418747 --- /dev/null +++ b/doc/resolve-asciidoc-refs.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import fileinput +import re +import sys + +refs = {} +complete_file = "" + +for line in open(sys.argv[1], 'r'): + complete_file += line + +for m in re.findall('\[\[(.+)\]\]\n=+ ([^\n]+)', complete_file): + ref, title = m + refs["<<" + ref + ">>"] = "<<" + ref + ", " + title + ">>" + +def translate(match): + try: + return refs[match.group(0)] + except KeyError: + return "" + +rc = re.compile('|'.join(map(re.escape, sorted(refs, reverse=True)))) +for line in open(sys.argv[1], 'r'): + print rc.sub(translate, line), diff --git a/doc/route.txt b/doc/route.txt index 1f68116..b9b50b6 100644 --- a/doc/route.txt +++ b/doc/route.txt @@ -35,50 +35,316 @@ commonly used In user space the term _network interface_ is very common. The routing netlink protocol uses the term _link_ and so does the _iproute2_ utility and most routing daemons. -=== Protocol Definition +=== Netlink Protocol -This section describes the protocol semantics of the netlink link configuration -interface. The following netlink message types are defined: +This section describes the protocol semantics of the netlink based link +configuration interface. The following messages are defined: [options="header", cols="1,2,2"] |============================================================================== | Message Type | User -> Kernel | Kernel -> User -| +RTM_NEWLINK+ | Create new virtual network device | Notification: Link changed or added -| +RTM_DELLINK+ | Delete virtual network device | Notification: Link deleted or disappeared +| +RTM_NEWLINK+ | Create or update virtual network device +| Reply to +RTM_GETLINK+ request or notification of link added or updated +| +RTM_DELLINK+ | Delete virtual network device +| Notification of link deleted or disappeared | +RTM_GETLINK+ | Retrieve link configuration and statistics | | +RTM_SETLINK+ | Modify link configuration | |============================================================================== -See the link:core.html#core_msg_types[Message Types] section of the Netlink -Library documentation for more information on common semantics of these message -types. +See link:core.html#core_msg_types[Netlink Library - Message Types] for more +information on common semantics of these message types. -.Link Message Header +==== Link Message Format -All netlink link messages share the following common header which is appended -after the netlink message header (+struct nlmsghdr+). It is defined in the -header ++ +All netlink link messages share a common header (+struct ifinfomsg+) which +is appended after the netlink header (+struct nlmsghdr+). -[source,c] ------ -struct ifinfomsg { - unsigned char ifi_family; - unsigned char __ifi_pad; - unsigned short ifi_type; /* ARPHRD_* */ - int ifi_index; /* Link index */ - unsigned ifi_flags; /* IFF_* flags */ - unsigned ifi_change; /* IFF_* change mask */ -}; ------ +image:ifinfomsg.png["Link Message Header"] -The meaning of each field may differ depending on the message type. +The meaning of each field may differ depending on the message type. A ++struct ifinfomsg+ is defined in ++ to represent the +header. -.Attributes +Address Family (8bit):: +The address family is usually set to +AF_UNSPEC+ but may be specified in ++RTM_GETLINK+ requests to limit the returned links to a specific address +family. +Link Layer Type (16bit):: +Currently only used in kernel->user messages to report the link layer type +of a link. The value corresponds to the +ARPHRD_*+ defines found in +++. Translation from/to strings can be done using the +functions nl_llproto2str()/nl_str2llproto(). + +Link Index (32bit):: +Carries the interface index and is used to identify existing links. + +Flags (32bit):: +In kernel->user messages the value of this field represents the current +state of the link flags. In user->kernel messages this field is used to +change flags or set the initial flag state of new links. Note that in order +to change a flag, the flag must also be set in the _Flags Change Mask_ field. + +Flags Change Mask (32bit):: +The primary use of this field is to specify a mask of flags that should be +changed based on the value of the _Flags_ field. A special meaning is given +to this field when present in link notifications, see TODO. + +Attributes (variable):: All link message types may carry netlink attributes. They are defined in the header file and share the prefix +IFLA_+. +==== Link Message Types +.RTM_GETLINK (user->kernel) + +Lookup link by 1. interface index or 2. link name (+IFLA_IFNAME+) and return +a single +RTM_NEWLINK+ message containing the link configuration and statistics +or a netlink error message if no such link was found. + +*Parameters:* + +* *Address family* +** If the address family is set to +PF_BRIDGE+, only bridging devices will be + returned. +** If the address family is set to +PF_INET6+, only ipv6 enabled devices will + be returned. + +*Flags:* + +* +NLM_F_DUMP+ If set, all links will be returned in form of a multipart + message. + +*Returns:* + +* +EINVAL+ if neither interface nor link name are set +* +ENODEV+ if no link was found +* +ENOBUFS+ if allocation failed + +.RTM_NEWLINK (user->kernel) + +Creates a new or updates an existing link. Only virtual links may be created +but all links may be updated. + +*Flags:* + +- +NLM_F_CREATE+ Create link if it does not exist +- +NLM_F_EXCL+ Return +EEXIST+ if link already exists + +*Returns:* + +- +EINVAL+ malformed message or invalid configuration parameters +- +EAFNOSUPPORT+ if a address family specific configuration (+IFLA_AF_SPEC+) + is not supported. +- +EOPNOTSUPP+ if the link does not support modification of parameters +- +EEXIST+ if +NLM_F_EXCL+ was set and the link exists alraedy +- +ENODEV+ if the link does not exist and +NLM_F_CREATE+ is not set + +.RTM_NEWLINK (kernel->user) + +This message type is used in reply to a +RTM_GETLINK+ request and carries +the configuration and statistics of a link. If multiple links need to +be sent, the messages will be sent in form of a multipart message. + +The message type is also used for notifications sent by the kernel to the +multicast group +RTNLGRP_LINK+ to inform about various link events. It is +therefore recommended to always use a separate link socket for link +notifications in order to separate between the two message types. + +TODO: document how to detect different notifications + +.RTM_DELLINK (user->kernel) + +Lookup link by 1. interface index or 2. link name (+IFLA_IFNAME+) and delete +the virtual link. + +*Returns:* + +* +EINVAL+ if neither interface nor link name are set +* +ENODEV+ if no link was found +* +ENOTSUPP+ if the operation is not supported (not a virtual link) + +.RTM_DELLINK (kernel->user) + +Notification sent by the kernel to the multicast group +RTNLGRP_LINK+ when + +a. a network device was unregistered (change == ~0) +b. a bridging device was deleted (address family will be +PF_BRIDGE+) + +[source,c] +----- +#define IFF_UP 0x1 /* interface is up */ +#define IFF_BROADCAST 0x2 /* broadcast address valid */ +#define IFF_DEBUG 0x4 /* turn on debugging */ +#define IFF_LOOPBACK 0x8 /* is a loopback net */ +#define IFF_POINTOPOINT 0x10 /* interface is has p-p link */ +#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */ +#define IFF_RUNNING 0x40 /* interface RFC2863 OPER_UP */ +#define IFF_NOARP 0x80 /* no ARP protocol */ +#define IFF_PROMISC 0x100 /* receive all packets */ +#define IFF_ALLMULTI 0x200 /* receive all multicast packets*/ + +#define IFF_MASTER 0x400 /* master of a load balancer */ +#define IFF_SLAVE 0x800 /* slave of a load balancer */ + +#define IFF_MULTICAST 0x1000 /* Supports multicast */ + +#define IFF_PORTSEL 0x2000 /* can set media type */ +#define IFF_AUTOMEDIA 0x4000 /* auto media select active */ +#define IFF_DYNAMIC 0x8000 /* dialup device with changing addresses*/ + +#define IFF_LOWER_UP 0x10000 /* driver signals L1 up */ +#define IFF_DORMANT 0x20000 /* driver signals dormant */ + +#define IFF_ECHO 0x40000 /* echo sent packets */ +----- + +=== Get / List + +[[link_list]] +==== Get list of links + +To retrieve the list of links in the kernel, allocate a new link cache +using +rtnl_link_alloc_cache()+ to hold the links. It will automatically +construct and send a +RTM_GETLINK+ message requesting a dump of all links +from the kernel and feed the returned +RTM_NEWLINK+ to the internal link +message parser which adds the returned links to the cache. + +[source,c] +----- +#include + +int rtnl_link_alloc_cache(struct nl_sock *sk, int family, struct nl_cache **result) +----- + +The cache will contain link objects (+struct rtnl_link+, see <>) +and can be accessed using the standard cache functions. By setting the ++family+ parameter to an address familly other than +AF_UNSPEC+, the resulting +cache will only contain links supporting the specified address family. + +The following direct search functions are provided to search by interface +index and by link name: + +[source,c] +----- +#include + +struct rtnl_link *rtnl_link_get(struct nl_cache *cache, int ifindex); +struct rtnl_link *rtnl_link_get_by_name(struct nl_cache *cache, const char *name); +----- + +.Example: Link Cache + +[source,c] +----- +struct nl_cache *cache; +struct rtnl_link *link; + +if (rtnl_link_alloc_cache(sock, AF_UNSPEC, &cache)) < 0) + /* error */ + +if (!(link = rtnl_link_get_by_name(cache, "eth1"))) + /* link does not exist */ + +/* do something with link */ + +rtnl_link_put(link); +nl_cache_put(cache); +----- + +==== Lookup Single Link (Direct Lookup) + +If only a single link is of interest, the link can be looked up directly +without the use of a link cache using the function +rtnl_link_get_kernel()+. + +[source,c] +----- +#include + +int rtnl_link_get_kernel(struct nl_sock *sk, int ifindex, const char *name, struct rtnl_link **result); +----- + +It will construct and send a +RTM_GETLINK+ request using the parameters +provided and wait for a +RTM_NEWLINK+ or netlink error message sent in +return. If the link exists, the link is returned as link object +(see <>). + +.Example: Direct link lookup +[source,c] +----- +struct rtnl_link *link; + +if (rtnl_link_get_kernel(sock, 0, "eth1", &link) < 0) + /* error */ + +/* do something with link */ + +rtnl_link_put(link); +----- + +NOTE: While using this function can save a substantial amount of bandwidth + on the netlink socket, the result will not be cached, subsequent calls + to rtnl_link_get_kernel() will always trigger sending a +RTM_GETLINK+ + request. + +==== Translating interface index to link name + +Applications which require to translate interface index to a link name or +vice verase may use the following functions to do so. Both functions require +a filled link cache to work with. + +[source,c] +----- +char *rtnl_link_i2name (struct nl_cache *cache, int ifindex, char *dst, size_t len); +int rtnl_link_name2i (struct nl_cache *cache, const char *name); +----- + +=== Add / Modify + +Several types of virtual link can be added on the fly using the function ++rtnl_link_add()+. + +[source,c] +----- +#include + +int rtnl_link_add(struct nl_sock *sk, struct rtnl_link *link, int flags); +----- + +=== Delete + +The deletion of virtual links such as VLAN devices or dummy devices is done +using the function +rtnl_link_delete()+. The link passed on to the function +can be a link from a link cache or it can be construct with the minimal +attributes needed to identify the link. + +[source,c] +----- +#include + +int rtnl_link_delete(struct nl_sock *sk, const struct rtnl_link *link); +----- + +The function will construct and send a +RTM_DELLINK+ request message and +returns any errors returned by the kernel. + +.Example: Delete link by name +[source,c] +----- +struct rtnl_link *link; + +if (!(link = rtnl_link_alloc())) + /* error */ + +rtnl_link_set_name(link, "my_vlan"); + +if (rtnl_link_delete(sock, link) < 0) + /* error */ + +rtnl_link_put(link); +----- + +[[link_object]] === Link Object Name:: @@ -86,6 +352,8 @@ The name of a network device is the human readable representation of a network device and secondary identification parameter besides the interface index. + +Kernels >= 2.6.11 support identification by link name. ++ [source,c] ----- void rtnl_link_set_name(struct rtnl_link *link, const char *name); @@ -141,8 +409,81 @@ void rtnl_link_set_weight(struct rtnl_link *link, unsigned int weight); unsigned int rtnl_link_get_weight(struct rtnl_link *link); ----- -=== Link Cache +=== Modules +[[link_bonding]] +==== Bonding + +.Example: Add bonding link +[source,c] +----- +#include + +struct rtnl_link *link; + +link = rtnl_link_alloc(); +rtnl_link_set_name(link, "my_bond"); +rtnl_link_set_type(link, "bond"); + +/* requires admin privileges */ +if (rtnl_link_add(sk, link, NLM_F_CREATE) < 0) + /* error */ + +rtnl_link_put(link); +----- + +==== VLAN + +[source,c] +----- +extern char * rtnl_link_vlan_flags2str(int, char *, size_t); +extern int rtnl_link_vlan_str2flags(const char *); + +extern int rtnl_link_vlan_set_id(struct rtnl_link *, int); +extern int rtnl_link_vlan_get_id(struct rtnl_link *); + +extern int rtnl_link_vlan_set_flags(struct rtnl_link *, + unsigned int); +extern int rtnl_link_vlan_unset_flags(struct rtnl_link *, + unsigned int); +extern unsigned int rtnl_link_vlan_get_flags(struct rtnl_link *); + +extern int rtnl_link_vlan_set_ingress_map(struct rtnl_link *, + int, uint32_t); +extern uint32_t * rtnl_link_vlan_get_ingress_map(struct rtnl_link *); + +extern int rtnl_link_vlan_set_egress_map(struct rtnl_link *, + uint32_t, int); +extern struct vlan_map *rtnl_link_vlan_get_egress_map(struct rtnl_link *, + int *); +----- + +.Example: Add a VLAN device +[source,c] +----- +struct rtnl_link *link; +int master_index; + +/* lookup interface index of eth0 */ +if (!(master_index = rtnl_link_name2i(link_cache, "eth0"))) + /* error */ + +/* allocate new link object to configure the vlan device */ +link = rtnl_link_alloc(); + +/* set eth0 to be our master device */ +rtnl_link_set_link(link, master_index); + +if ((err = rtnl_link_set_type(link, "vlan")) < 0) + /* error */ + +rtnl_link_vlan_set_id(link, 10); + +if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) + /* error */ + +rtnl_link_put(link); +----- == Neighbouring @@ -347,8 +688,7 @@ uint32_t rtnl_tc_get_parent(struct rtnl_tc *tc); ----- Statistics:: -Generic statistics, see <> for -additional information. +Generic statistics, see <> for additional information. + [source,c] ----- @@ -593,8 +933,7 @@ if (!(qdisc = rtnl_qdisc_alloc())) ----- The next step is to specify all generic qdisc attributes using the tc -object interface described in the section <>. +object interface described in the section <>. The following attributes must be specified: - IfIndex diff --git a/doc/stylesheets/asciidoc.css b/doc/stylesheets/asciidoc.css index 19796dd..8ded7c9 100644 --- a/doc/stylesheets/asciidoc.css +++ b/doc/stylesheets/asciidoc.css @@ -23,12 +23,16 @@ body { a { /* color: blue; */ color: #990000; - text-decoration: underline; + text-decoration: none; } a:visited { /* color: fuchsia; */ } +a:hover { + text-decoration: underline; +} + em { font-style: italic; /* color: navy; */