| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This header has a very specific purpose. To give access to the unit
tests to some internals.
It only is usable to parts that statically link with libnl-route-3
sources (e.g. "tests/check-direct") and libnl-route-3 itself.
The point is that the symbol there is not exported by the libnl-route-3
shared library, so a test that dynamically links against libnl-route-3
couldn't access them. Hence the internal purpose of static linking the
test with libnl-route-3 sources, and a special header for that.
Move "include/netlink-private/route/utils.h" to a separate place, to
make that usage clearer.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This header is entirely private to the source files in "lib/genl".
It's confusing to keep it separate. Place it beside the source files,
which can use it.
I guess, I just disagree with this notion, that all headers must be
under "include/" directory. Not, if the header is entirely local to one
module.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We have "include/netlink-private/netlink.h", which is private
API used internally.
However, it's confusing where "include/netlink-private/netlink.h" can be
used. For example, it contains some "libnl-route-3.so" specific
extensions like "link_lookup()", hence you would think that it
can only be used with libraries that also use "libnl-route-3.so".
Well, since it's a header, you actually can also use it for example
under "lib/xfrm/", you couldn't just use those declarations because they
are implemented and accessible only under "lib/route/"
In a first step to clean this up, and move helper to separate headers,
add "include/nl-aux-{core,route}" headers with certain clear usage.
Clear in the sense who may use those headers, and what the
implementation of those headers may use.
|
|
|
|
|
|
|
|
|
|
| |
"base/nl-base-utils.h" (formerly "netlink-private/utils.h") contains
no libnl3 specific references, just a bunch of C helpers.
It's also a header-only "library", so it can be freely used by all our
C-code.
Move it to a separate directory, to make that clear.
|
|
|
|
|
|
| |
- use consistent name _DIFF() for macro
- spell out the full attribute, and don't join the name via ##.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
"netlink-private/utils.h" is our header-only, internal helper header.
We should be able to use it everywhere, not only inside the library
itself.
Unlike for exapmle <netlink-private/netlink.h>, which is only
usable from the libraries.
|
|
|
|
|
| |
We should have things with "nl" prefix in our headers. Also, netlink-private/netlink.h
is not header-only, preferably header-only stuff is in netlink-private/utils.h
|
| |
|
|
|
|
|
|
|
|
|
|
| |
I find macros that stitch together names like "FAMILY_ATTR_##ATTR"
very confusing, because we no longer see where a certain name is used.
It breaks grepping for symbols, and it breaks cscope.
Yes, it's more verbose to not do that. If you really think that those
names are too verbose, then maybe they should get a shorter name. And
not use macros to make them palatable.
|
|
|
|
|
|
|
|
|
|
|
| |
a negative count is a bug in the caller. Still, handle it better than
just crashing. Maybe we should assert, but it doesn't seem best to
assert against user input.
Also, if count is zero, don't call memcpy(). Calling memcpy() requires
that the source and destination pointers are valid, otherwise it's
undefined behavior. I think if the caller tells us to copy zero bytes,
we should never look at the destination pointer.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replace the use of the previous min()/min_t()/max()/max_t().
- min_t()/max_t() required a type, and would do plain assignment, which
C would not complain about. It is thus a cumbersome and not very safe
pattern. Avoid it.
- min()/max() did better, it used typeof() to preserve the argument types
and automatically detect it. However, it also required that both
arguments had the same integer type, which is unnecessarily strict.
_NL_MIN()/_NL_MAX() does better. It accepts arguments of any integer
types, but has a static assertions that they match in signedness.
So it's more flexible to use than min()/max() and still quite safe.
Prefer the new macros.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
following API has been added to bonding
bond_alloc
bond_free
rtnl_link_bond_set_activeslave
rtnl_link_bond_set_mode
bond_put_attrs
Signed-off-by: Mallikarjun Nemagoudar <MallikarjunRamappa.Nemagoudar@infineon.com>
https://github.com/thom311/libnl/pull/349
|
|
|
|
|
| |
Previously, a NULL argument would most likely also do thing, but it also
hits undefined behavior.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently, rtnl_link_macsec_set_offload rejects any value
greater than 1 limiting the MACSEC_ATTR_OFFLOAD attribute
to the values 0 and 1 where other values are also legal.
Drop such a check since it is redundant, eventually the user
will send the netlink message to kernel, and whether the
message is valid depends on kernel.
Fixes: b6cc13d76b29 ('Supporting Hardware offload capability for MACsec')
Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
http://lists.infradead.org/pipermail/libnl/2023-February/002417.html
http://lists.infradead.org/pipermail/libnl/2023-February/002420.html
http://lists.infradead.org/pipermail/libnl/2023-February/002424.html
https://github.com/thom311/libnl/pull/336
https://github.com/thom311/libnl/pull/341
|
|
|
|
|
|
| |
Fixes: 1a4031d6db73 ('lib/route: Support IFLA_BRIDGE_MODE')
https://github.com/thom311/libnl/pull/339
|
|
|
|
|
|
|
|
|
| |
Check that ops->ao_override_rtm() is set before using it,
which prevents a segfault whenever af_request_type() is
called with a type that has ops but that does not initialize
said function in their ops struct.
https://github.com/thom311/libnl/pull/333
|
|
|
|
| |
https://github.com/thom311/libnl/pull/345
|
|
|
|
|
|
|
|
|
|
| |
On the netlink API, IFLA_INET6_CONF is a list of uint32_t integers, but
the number of actually provided values depends on the kernel version (and
the DEVCONF_MAX value that it was compiled with.
We clone the kernel header in our source tree, so DEVCONF_MAX from the
libnl3 build may differ from the running kernel. We need to keep track
how many values kernel actually provides.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It's not clear how this API is useful. I don't think that kernel accepts
netlink requests to change the settings. So constructing a libnl3 object
in the user application seems not useful.
Also, because of the difficulty that DEVCONF_MAX is depending on the
current kernel, and changing. We need to improve how to handle the
option, and a rtnl_link_inet6_set_conf() only makes that more confusing.
The same is the case for rtnl_link_inet6_set_flags(), but that API
already exists, while rtnl_link_inet6_set_conf() is still new and
unreleased.
|
| |
|
|
|
|
| |
Signed-off-by: Abdurrahman Hussain <abdurrahman@hussain.rocks>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
rtnl_link_bridge_set_vlan_filtering() to boolean
In bridge-info, we have two u8 attributes (vlan-filtering and
stats-enabled). In both cases, kernel only expects there a boolean
value (either zero or one).
In case of vlan-filtering, I think kernel actually doesn't care, and
would treat any non-zero value as true. In case of stats-enabled, kernel
would reject values outside the values zero or one.
Previously, libnl3 would normalize the boolean value for vlan-filtering,
but not for stats-enabled. That is at least inconsistent, in particular
considering that kernel requires a normalized value for stats-enabled, but
not for vlan-filtering.
Our public API has uint8_t parameters (and not bool). That makes sense,
as it follows the netlink API.
It's not clear how to handle these boolean u8 attributes best. Should
the API be bool or uint8_t? Should we normalize the boolean values?
In any case, do something consistently. For no particular reason, choose
to not add additional logic. The user can set any value, whether that
value makes sense, it's up to them.
|
|
|
|
|
| |
On netlink, IFLA_BR_VLAN_PROTOCOL attribute is be16. In the libnl3 API,
expose the number in native endianness.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Signed-off-by: Robert Dabrowski <rdabrowski@maxlinear.com>
Co-Authored-By: Kacper Ludwinski <kludwinski@maxlinear.com>
|
|
|
|
|
|
|
|
| |
And functions to access some new bridge attributes.
Signed-off-by: Langer Thomas <tlanger@maxlinear.com>
Co-Authored-By: Kacper Ludwinski <kludwinski@maxlinear.com>
|
| |
|
|
|
|
|
|
|
|
| |
related to goto label nla_put_failure
Signed-off-by: Langer Thomas <tlanger@maxlinear.com>
Co-Authored-By: Kacper Ludwinski <kludwinski@maxlinear.com>
|
| |
|
| |
|
|
|
|
|
|
|
| |
A zero length address is not a valid address in netlink, so we should
not try to send them to the kernel.
Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A default route is equivalent to a 0.0.0.0/0 or ::/0 route, so we should
construct the dst as such with a all-zero address.
Since this breaks the assumption that a dst with a 0 address length is a
default route, switch to checking the prefix length being 0, and make
sure that there is an address part that is all-zero.
This ensures we will print the actual dst in case the address is not
zero, or does not exist.
Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
|
|
|
|
|
|
|
|
| |
Allow easy contruction of all-zero addresses by not passing a buf to
copy. Since the object is allocated with calloc, the address data will
default to all-zero, and only the length needs to be set.
Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When calling nl_addr_parse() is called with "any" or "default", the
constructed address will have zero-length address data. This has the
side effect that a comparison with e.g. an address contructed from
"0.0.0.0/0" will fail, since their address has different lengths, even
if they should be equal.
Fix this by allocating an appropriate zeroed address for "any" and
"default", but do not for "none", since "none" implies no address.
Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
|
| |
|
|
|
|
|
|
| |
Signed-off-by: Volodymyr Bendiuga <volodymyr.bendiuga@westermo.com>
https://github.com/thom311/libnl/pull/319
|
|
|
|
|
|
| |
https://github.com/thom311/libnl/pull/324
Fixes: 5d6e43ebef12 ('lib/route: SRIOV Parse and Read support')
|
| |
|
|
|
|
|
|
|
| |
Signed-off-by: Magnus Öberg <magnus.oberg@westermo.se>
Signed-off-by: Volodymyr Bendiuga <volodymyr.bendiuga@gmail.com>
https://github.com/thom311/libnl/pull/317
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The following API has been added:
rtnl_flower_set_ipv4_src
rtnl_flower_get_ipv4_src
rtnl_flower_set_ipv4_dst
rtnl_flower_get_ipv4_dst
Signed-off-by: Volodymyr Bendiuga <volodymyr.bendiuga@westermo.com>
https://github.com/thom311/libnl/pull/309
|
|
|
|
|
|
|
|
| |
Signed-off-by: Volodymyr Bendiuga <volodymyr.bendiuga@westermo.com>
Fixes: ef46de143206 ('route/cls: add flower classifier')
https://github.com/thom311/libnl/pull/316
|