summaryrefslogtreecommitdiffstats
path: root/include/netlink
Commit message (Collapse)AuthorAgeFilesLines
...
* link/ipvti: Fix and add function prototypes in public headerTobias Klauser2017-01-201-4/+6
| | | | | | | | | | | | | | | | | | | Add missing "_ipvti" part to function prototypes so they match the exported name. Also add the missing prototype for rtnl_link_is_ipvti(). This fixes the following GCC warnings when compiling with -Wmissing-prototypes: route/link/ipvti.c:281:5: warning: no previous prototype for ‘rtnl_link_is_ipvti’ [-Wmissing-prototypes] route/link/ipvti.c:369:10: warning: no previous prototype for ‘rtnl_link_ipvti_get_ikey’ [-Wmissing-prototypes] route/link/ipvti.c:403:10: warning: no previous prototype for ‘rtnl_link_ipvti_get_okey’ [-Wmissing-prototypes] route/link/ipvti.c:437:10: warning: no previous prototype for ‘rtnl_link_ipvti_get_local’ [-Wmissing-prototypes] route/link/ipvti.c:471:10: warning: no previous prototype for ‘rtnl_link_ipvti_get_remote’ [-Wmissing-prototypes] Also fix the corresponding names in documentation. Fixes: 8f6301426a00 ("ipvti: introduce vti tunnel support") Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* link/ipip: Add missing prototype for rtnl_link_is_ipip()Tobias Klauser2017-01-201-1/+2
| | | | | | | | | | | Add the function prototype for rtnl_link_is_ipip() to the public header. This fixes the following GCC warning when compiling with -Wmissing-prototypes: route/link/ipip.c:296:5: warning: no previous prototype for ‘rtnl_link_is_ipip’ [-Wmissing-prototypes] Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* fib_lookup: Add missing prototypes to public headerTobias Klauser2017-01-201-0/+7
| | | | | | | | | | | | | | | | | Add the function prototypes for the struct flnl_result attribute access functions to the public header fib_lookup/lookup.h This fixes the following GCC warnings when compiling with -Wmissing-prototypes: fib_lookup/lookup.c:284:5: warning: no previous prototype for ‘flnl_result_get_table_id’ [-Wmissing-prototypes] fib_lookup/lookup.c:289:5: warning: no previous prototype for ‘flnl_result_get_prefixlen’ [-Wmissing-prototypes] fib_lookup/lookup.c:294:5: warning: no previous prototype for ‘flnl_result_get_nexthop_sel’ [-Wmissing-prototypes] fib_lookup/lookup.c:299:5: warning: no previous prototype for ‘flnl_result_get_type’ [-Wmissing-prototypes] fib_lookup/lookup.c:304:5: warning: no previous prototype for ‘flnl_result_get_scope’ [-Wmissing-prototypes] fib_lookup/lookup.c:309:5: warning: no previous prototype for ‘flnl_result_get_error’ [-Wmissing-prototypes] Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* qdisc/red: Add missing prototypes for rtnl_red_set_limit() and ↵Tobias Klauser2017-01-201-0/+3
| | | | | | | | | | | | rtnl_red_get_limit() This fixes the following GCC warnings when compiling with -Wmissing-prototypes: route/qdisc/red.c:136:6: warning: no previous prototype for ‘rtnl_red_set_limit’ [-Wmissing-prototypes] route/qdisc/red.c:152:5: warning: no previous prototype for ‘rtnl_red_get_limit’ [-Wmissing-prototypes] Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* sriov: Add missing prototype for rtnl_link_vf_vlan_free()Tobias Klauser2017-01-201-0/+1
| | | | | | | | | | | | | Add missing function prototyoe for rtnl_link_vf_vlan_free() to the public header. This fixes the following GCC warning when compiling with -Wmissing-prototypes: route/link/sriov.c:1339:6: warning: no previous prototype for ‘rtnl_link_vf_vlan_free’ [-Wmissing-prototypes] Fixes: 5d6e43ebef12 ("lib/route: SRIOV Parse and Read support") Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* sit: Fix invalid function prototypes in public headerTobias Klauser2017-01-201-1/+1
| | | | | | | | | | Change rtnl_link_get_sit_local() rtnl_link_sit_get_local() as this is the function's exported name. This fixes a GCC -Wmissing-prototypes warning. Fixes: d715b8a5f6ec ("introduce sit tunnel support") Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* libnl-3.2.29 releaselibnl3_2_29Thomas Haller2016-12-301-0/+6
| | | | Signed-off-by: Thomas Haller <thaller@redhat.com>
* link: add support for IFLA_GSO_MAX_SEGS and IFLA_GSO_MAX_SIZETobias Klauser2016-12-061-0/+4
| | | | Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* link: add support for IFLA_PHYS_SWITCH_IDTobias Klauser2016-12-061-0/+2
| | | | Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* link: add support for IFLA_PHYS_PORT_NAMETobias Klauser2016-12-061-0/+2
| | | | Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* link: add support for IFLA_CARRIER_CHANGESTobias Klauser2016-12-061-0/+2
| | | | | | Also expose the attribute value via link_dump_details() Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* route/act: add gact tc actionSushma Sitaram2016-12-021-0/+31
| | | | | | | Signed-off-by: Sushma Sitaram <sushma.sitaram@intel.com> Signed-off-by: Thomas Haller <thaller@redhat.com> http://lists.infradead.org/pipermail/libnl/2016-November/002249.html
* cache_mngr: add include callback v2Tobias Jungel2016-12-011-0/+9
| | | | | | | | | | | | | | | | | | | | | This patch adds change_func_v2_t to add a more detailed callback in case of a cache change. The change function is registered using the new nl_cache_mngr_add_cache_v2. In case the new change function is set, nl_cache_include_v2 and thus cache_include_v2 will be used to perform the cache inclusion. The parameter of change_func_v2_t are the following: * struct nl_cache * => cache * struct nl_object * => the old/deleted nl_object * struct nl_object * => the new nl_object * uint64_t => the result of nl_object_diff64 in case of a change * int => NL_ACT_* * void * => data https://github.com/thom311/libnl/issues/71 http://lists.infradead.org/pipermail/libnl/2016-September/002214.html http://lists.infradead.org/pipermail/libnl/2016-October/002229.html http://lists.infradead.org/pipermail/libnl/2016-November/002250.html
* lib: use MSG_PEEK by default for nl_recvmsgs()Thomas Haller2016-11-301-0/+15
| | | | | | | | | | | | | | | The MSG_PEEK API of recvmsg() should be avoid because it requires an additional syscall. But worse is to choose a too small buffer size and failing to receive the message. A user who is aware of the issue can avoid MSG_PEEK by either nl_socket_disable_msg_peek()/nl_socket_enable_msg_peek() or by setting a buffer size via nl_socket_set_msg_buf_size(). By default however we now use MSG_PEEK. This is more important since commit 90c6ebec9bd7a where the link dump request can be rather large. Signed-off-by: Thomas Haller <thaller@redhat.com>
* link: set ifi_change flags for rtnl_link_build_add_request()Thomas Haller2016-11-291-0/+8
| | | | | | | | For the add-request, we should set ifi_change flags together with the ifi_flags. A similar thing is done by rtnl_link_build_change_request() in commit 34ccb7210f1238f89229c117dc3d28cea7ae00bb. https://github.com/thom311/libnl/issues/111
* lib/route: add rx_nohandler link stats fieldTobias Klauser2016-11-291-0/+1
| | | | | | | | A new counter rx_nohandler was added to the link stats in kernel commit 6e7333d315a7 ("net: add rx_nohandler stat counter"). Wire it up in the libnl link stats as well. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
* route/cls: support setting of selector fieldsSushma Sitaram2016-11-281-0/+1
| | | | | | | | | | Enables to set the shift, offset, mask and flags of the position to next header http://lists.infradead.org/pipermail/libnl/2016-September/002227.html http://lists.infradead.org/pipermail/libnl/2016-October/002232.html Signed-off-by: Sushma Sitaram <sushma.sitaram@intel.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
* ppp: fix API in ppp.h headerThomas Haller2016-11-281-2/+2
| | | | Signed-off-by: Thomas Haller <thaller@redhat.com>
* Add PPP supportJonas Johansson2016-11-281-0/+30
| | | | | | This patch add support for kernel PPP interfaces. Signed-off-by: Jonas Johansson <jonasj76@gmail.com>
* lib/route: SRIOV Set FunctionalityJef Oliver2016-11-241-0/+25
| | | | | | | | | | * This patch adds functionality to set attributes on an SRIOV VF object. * This patch adds functionality to append attributes to the link change request sent to the kernel. Signed-off-by: Jef Oliver <jef.oliver@intel.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
* lib/route: SRIOV Utility FunctionsJef Oliver2016-11-241-0/+7
| | | | | | | | This patch adds utility functions for translating link state and VLAN protocols for SRIOV VFs. Signed-off-by: Jef Oliver <jef.oliver@intel.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
* lib/route: SRIOV Parse and Read supportJef Oliver2016-11-242-0/+116
| | | | | | | | | | | | | | | | | | * This patch adds support for parsing SRIOV VF specific information on a link. * Adds LINK_ATTR_VF_LIST to add to link->ce_mask. * Extends the rtnl_link object to include 'l_vf_list', a member to carry information for SRIOV VFs. * Adds rtnl_link_sriov, a private structure to fill link->l_vf_list. * This patch adds support for reading parsed SRIOV VF specific informatino on a link. * This patch adds support for freeing stored SRIOV VF specific information on a link. Signed-off-by: Jef Oliver <jef.oliver@intel.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
* xfrm: fix xfrm security context managementThomas Egerer2016-11-061-0/+7
| | | | | | | | | | | | | | | | The data structure of choice when adding/processing a security context for xfrm is struct xfrm(nl)_user_sec_ctx. The previous code did however use the (also exported) struct xfrm(nl)_sec_ctx. While sizeof(struct xfrm(nl)_*sec_ctx) yields the same result, the interpretation of one of the data structures as the other one messes up the contents. With this fix, the wrong data structure has been replaced with the correct one. Also -- since the size of the context string is not known -- one can now call xfrmnl_sa_get_sec_ctx with ctx_str being NULL, thus retrieving the length of the context string. A new capability has been introduced, to test whether libnl3 supports the modified semantics of this function. Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com>
* lib/route: Export correct ipgre functionalityJef Oliver2016-11-051-0/+3
| | | | | | | | | | | | | | * Rename rtnl_link_get_pmtudisc to rtnl_link_ipgre_get_pmtudisc in ipgre.c, making the function correctly match the exported functionality in ipgre.h. This fixes an error when trying to use the function, returning an incorrect type usage due to the link module already having a function of the same name. * Export rtnl_link_is_[ipgre/ipgretap] allowing for usage per documentation. Reported-by: Sharada Shiddibhavi <sharada.shiddibhavi@intel.com> Signed-off-by: Jef Oliver <jef.oliver@intel.com>
* vxlan: refactor setting/getting vxlan flagsThomas Haller2016-11-051-8/+2
| | | | | | | | | | | | As these properties are FLAG types in the netlink API, we should also expose them as such in the libnl API. It is less code and require less code to support a new flag. The point is really to keep the API smaller instead of wasting a getter and setter for each flag.
* vxlan: don't store vxlan flags as ce_maskThomas Haller2016-11-051-0/+9
| | | | | | | | The ce_mask is there to indicate whether a certain attribute is set or not. The VXLAN flags are different, because the flag is either set or not. It cannot have the meaning of being missing. Therefore, it should not be stored as a VXLAN_ATTR in ce_mask.
* vxlan: remove redundant enable/disable API from vxlanThomas Haller2016-11-051-18/+0
| | | | | | | | | The enable/disable API is redundant and increases the library in binary size and documentation. There should be one sensible way to do something, not several. Yes, there is prior act to that like rtnl_link_vxlan_disable_proxy(). That doesn't mean it should be repeated.
* vxlan: add support for additional VXLAN attributes.Brandon Carpenter2016-10-301-5/+56
| | | | | | | | | | | | | | | | | | | Includes all VXLAN attributes as of Linux kernel 4.7.5. In particular it adds the following attributes: * IFLA_VXLAN_PORT, * IFLA_VXLAN_UDP_CSUM, * IFLA_VXLAN_UDP_ZERO_CSUM6_TX, * IFLA_VXLAN_UDP_ZERO_CSUM6_RX, * IFLA_VXLAN_REMCSUM_TX, * IFLA_VXLAN_REMCSUM_RX, * IFLA_VXLAN_GBP, * IFLA_VXLAN_REMCSUM_NOPARTIAL, * IFLA_VXLAN_COLLECT_METADATA, * IFLA_VXLAN_LABEL, * IFLA_VXLAN_GPE https://github.com/thom311/libnl/pull/110
* macvlan: adjust types and merge MACVLAN_HAS_MACCOUNT and MACVLAN_HAS_MACDATAThomas Haller2016-09-271-1/+1
| | | | | | | | | | | | | | | | mvi_maccount only makes sense together with the data. They should be treated as one setting, and both should be consistent. That means, if there are no addresses, mvi_maccount should always be set to zero. This is regardless of whether the mvi_mask indicates that MACVLAN_HAS_MACADDR is set. Similarly, if mvi_maccount is larger then zero, the mvi_macaddr must point to some valid addresses. The only exception is, when mvi_maccount is zero, mvi_macaddr may be NULL or point to some data of zero allocated bytes. Also, ensure that uint32_t is used for all the types that compare with mvi_maccount. Signed-off-by: Thomas Haller <thaller@redhat.com>
* macvlan: add support for "source" modeMichael Braun2016-09-261-0/+18
| | | | | | This adds libnl support for new "source" mode. Signed-off-by: Michael Braun <michael-dev@fami-braun.de>
* lib/route: Support IFLA_BRIDGE_MODEJef Oliver2016-09-241-0/+13
| | | | | | | | | | | | | | | | | | | | | | | This patch adds support for hardware assisted bridge modes stored in IFLA_AF_SPEC[IFLA_BRIDGE_MODE]. This patch adds rtnl_link_[g/s]et_hwmode() functions, allowing for getting and setting the hardware mode for a bridged link. This patch adds the convenience functions for translating between integer and string names for hardware modes. This patch adds rtnl_link_bridge_set_self(), a function that stores flags in IFLA_AF_SPEC[IFLA_BRIDGE_FLAGS], an attribute that tells the kernel whether it should apply settings to the virtual bridge device or the hardware device itself. This requires hardware that supports the hardware flags. This patch adds bridge_fill_af(), a function to fill IFLA_AF_SPEC with AF_BRIDGE specific information. Signed-off-by: Jef Oliver <jef.oliver@intel.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
* lib/route: Extend Bridge FlagsJef Oliver2016-09-241-0/+3
| | | | | | | | | | | This patch adds support for the following bridge port flags: IFLA_BRPORT_UNICAST_FLOOD IFLA_BRPORT_LEARNING IFLA_BRPORT_LEARNING_SYNC Signed-off-by: Jef Oliver <jef.oliver@intel.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
* lib/route: Add port state translation functionsJef Oliver2016-09-241-0/+3
| | | | | | | | This patch adds translation functions for translating the port state between integers and strings. Signed-off-by: Jef Oliver <jef.oliver@intel.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
* nl-addr: avoid read-out-of-bound in nl_addr_fill_sockaddr()Thomas Haller2016-08-141-0/+7
| | | | | | https://github.com/thom311/libnl/issues/103 Signed-off-by: Thomas Haller <thaller@redhat.com>
* lib: capability NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX for ID comparison of v4 ↵Thomas Haller2016-08-141-0/+7
| | | | | | | | | | | addresses The ID attributes for IPv4 addresses were broken which causes wrong nl_object_identical() and cache lookup. This capability shall indicate that the bug was fixed. Signed-off-by: Thomas Haller <thaller@redhat.com>
* cli: add noreturn attributesPeter Wu2016-08-141-2/+4
| | | | | | | | | Teach static code analyzers (such as Clang static analyzer) that code following nl_cli_fatal can never be executed. Avoids false positives such as detecting use of NULL pointers when that cannot happen. Signed-off-by: Peter Wu <peter@lekensteyn.nl> Signed-off-by: Thomas Haller <thaller@redhat.com>
* build: fixup headers for C++ inclusionCraig Gallek2016-08-124-8/+11
| | | | | | | | | | | | | - Fix typos in extern "C" wrappers. - 'class' is a reserved word, change to cls. - int -> enum casts are not automatic. - Static strings must be of type const char* - Add a few implicit header dependencies explicitly. http://lists.infradead.org/pipermail/libnl/2016-July/002165.html Signed-off-by: Craig Gallek <kraig@google.com> Signed-off-by: Thomas Haller <thaller@redhat.com>
* libnl-3.2.28 releaselibnl3_2_28Thomas Haller2016-07-081-0/+6
| | | | Signed-off-by: Thomas Haller <thaller@redhat.com>
* route/addr: add capability NL_CAPABILITY_RTNL_ADDR_PEER_FIX to indicate ↵Thomas Haller2016-06-291-0/+7
| | | | | | address fixes Signed-off-by: Thomas Haller <thaller@redhat.com>
* xfrm: allow avoiding buffer overflow for key in xfrmnl_sa_get_*_params()Thomas Haller2016-06-291-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous API of xfrmnl_sa_get_*_params() would always require a @key buffer, but it was not possible to avoid buffer overflow because the required size was unknown. That is not really fixable, because the old API is broken. Now, allow omitting the @key argument to only request the @key_size. That allows the caller to ask beforehand how large the @key buffer must be: ((@key_size + 7) / 8). Unfortunately, omitting the key against previous versions of libnl leads to a crash. And passing a key against older versions makes it impossible to avoid buffer-overflow. Another option would be to add functions like xfrmnl_sa_get_crypto_params_keylen() so the user can query the required buffer size by calling that instead of xfrmnl_sa_get_crypto_params(). However, then the user also requires a backport of the new API and this will not be possible against older libnl3 versions either. Thus, if the user already requires the fix, he can just as well require a backport of this patch and then safely call xfrmnl_sa_get_crypto_params() without @key argument. This way has the advantage/disadvantage, that it can detect the presence of the patch at runtime. The cumbersome way to get it right would be: unsiged key_len; char *key; int r; if (!nl_has_capability(17 /*NL_CAPABILITY_XFRM_SA_KEY_SIZE*/)) { /* no way to use this API safely. Abort. */ return -NLE_OPNOTSUPP; } r = xfrmnl_sa_get_crypto_params(sa, NULL, &key_len, NULL); if (r < 0) return r; key = malloc((key_len + 7) / 8); if (!key) return -NLE_NOMEM; r = xfrmnl_sa_get_crypto_params(sa, NULL, &key_len, &key); if (r < 0) { free(key); return r; } ... http://lists.infradead.org/pipermail/libnl/2016-June/002155.html Signed-off-by: Thomas Haller <thaller@redhat.com>
* lib/route: add macsec supportSabrina Dubroca2016-06-251-0/+73
| | | | Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
* xfrm: make character pointers in setters constThomas Egerer2016-06-251-7/+9
| | | | | | | | | | | | All of these pointers are either strcpy'd or memcpy'd and usually const in a calling application. Changing them to const in the header does not break the compatibility and allows for users with const pointers to use the library without compiler warnings. Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com> Signed-off-by: Thomas Haller <thaller@redhat.com> http://lists.infradead.org/pipermail/libnl/2016-June/002137.html
* lib: return error on Netlink attribute length overflowPrzemyslaw Szczerbik2016-06-241-1/+2
| | | | | | | | | | | | | | Netlink attribute length is defined as u16. It's possible to exceed nla_len when creating nested attributes. Storing incorrect length due to overflow will cause a reader to read only a part of nested attribute or skip it entirely. As a solution cancel the addition of a nested attribute when nla_len size is exceeded. Signed-off-by: Przemyslaw Szczerbik <przemek.szczerbik@gmail.com> Signed-off-by: Thomas Haller <thaller@redhat.com> http://lists.infradead.org/pipermail/libnl/2016-May/002131.html
* neigh: add function to look up neighbour (fdb) by ifindex, mac and vlanJonas Johansson2016-05-291-0/+2
| | | | | | | | | | | | | | | | | The rtnl_neigh_get() function can not be used to look up a fdb entry in the neigh cache. This is due to that the function searches among destination addresses (NDA_DST) and not among link layer addresses (NDA_LLADDR), which is used by fdb entries. A fdb entry can also exist in several vlans, so a vlan id parameter is also needed to find a unique entry. This commit adds a function, rtnl_neigh_get_by_vlan() which searches the neigh cache for a specific neighbour (fdb) entry by interface index, link layer address and vlan id. Signed-off-by: Jonas Johansson <jonas.johansson@westermo.se> Signed-off-by: Thomas Haller <thaller@redhat.com> http://lists.infradead.org/pipermail/libnl/2016-May/002124.html https://github.com/thom311/libnl/pull/98
* sit: add public API for sit 6RD supportThomas Haller2016-04-151-0/+12
| | | | Signed-off-by: Thomas Haller <thaller@redhat.com>
* sit: fix invalid declaration of rtnl_link_sit_get_proto() in sit.hThomas Haller2016-04-151-1/+1
| | | | | | Fixes: d715b8a5f6ec8faf205ae77950a1c625440be22f Signed-off-by: Thomas Haller <thaller@redhat.com>
* ipgre: add support for gretap tunnelHaishuang Yan2016-04-151-0/+2
| | | | | | | | | | | | | Since kernel support both gre/gretap tunnel, so add support for gretap appropriately. Signed-off-by: Haishuang Yan <yanhaishuang@cmss.chinamobile.com> Signed-off-by: Thomas Haller <thaller@redhat.com> [thaller@redhat.com: modified original patch to move symbols in libnl-route-3.sym to proper section] http://lists.infradead.org/pipermail/libnl/2016-April/002102.html
* lib: add type casting for nla_for_each_nested macroPrzemyslaw Szczerbik2016-02-251-1/+1
| | | | | | | | | | | g++ is unable to compile code with nla_for_each_nested macro due to implicit type conversion from void* to nlattr*. This patch adds type casting for nla_for_each_nested macro to address this issue. Signed-off-by: Przemyslaw Szczerbik <przemek.szczerbik@gmail.com> Signed-off-by: Thomas Haller <thaller@redhat.com> http://lists.infradead.org/pipermail/libnl/2016-February/002095.html
* lib/utils: add NL_CAPABILITY_NL_OBJECT_DIFF64 capabilityThomas Haller2016-02-121-0/+6
| | | | Signed-off-by: Thomas Haller <thaller@redhat.com>
* lib: update ce-mask to uint64_tDavid Ahern2016-02-121-0/+2
| | | | | | | | | | | | | | | | | | | | lib/route/link.c already defines 32 attributes which fills the current uint32_t used for ce_mask. To accommodate more attributes the mask needs to be expanded. This patch updates the definition to uint64_t. The nl_object_diff API is maintained for ABI with existing users. A new nl_object_diff64 API is added for the expanded attribute list. The MSB of the 32-bit API is used to indicate if higher order attributes had a mismatch. (Suggested by Thomas). Note that LINK_ATTR_LINK_NETNSID changes. But since the attribute flags are not public API it shouldn't be a problem. http://lists.infradead.org/pipermail/libnl/2015-December/002078.html http://lists.infradead.org/pipermail/libnl/2015-December/002083.html Signed-off-by: David Ahern <dsa@cumulusnetworks.com> Signed-off-by: Thomas Haller <thaller@redhat.com>