link: set ifi_change in link message
The ifi_change field can be set with the mask of the flags that need to be changed as part of the link message to the kernel. This means only the specific flags that have been changed will be modified in the kernel, rather than the entire flags entry. [thaller@redhat.com: add capability to indicate the change in behavior] https://github.com/thom311/libnl/pull/86
This commit is contained in:
parent
371226b834
commit
34ccb7210f
3 changed files with 18 additions and 0 deletions
|
@ -143,6 +143,14 @@ enum {
|
||||||
NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK = 8,
|
NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK = 8,
|
||||||
#define NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK
|
#define NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rtnl_link_build_change_request() and rtnl_link_change() would set ifi.ifi_flags but leave
|
||||||
|
* ifi.ifi_change at zero. This was later fixed to set ifi.ifi_change to the flags that are actually
|
||||||
|
* set in changes.
|
||||||
|
*/
|
||||||
|
NL_CAPABILITY_LINK_BUILD_CHANGE_REQUEST_SET_CHANGE = 9,
|
||||||
|
#define NL_CAPABILITY_LINK_BUILD_CHANGE_REQUEST_SET_CHANGE NL_CAPABILITY_LINK_BUILD_CHANGE_REQUEST_SET_CHANGE
|
||||||
|
|
||||||
__NL_CAPABILITY_MAX,
|
__NL_CAPABILITY_MAX,
|
||||||
NL_CAPABILITY_MAX = (__NL_CAPABILITY_MAX - 1),
|
NL_CAPABILITY_MAX = (__NL_CAPABILITY_MAX - 1),
|
||||||
#define NL_CAPABILITY_MAX NL_CAPABILITY_MAX
|
#define NL_CAPABILITY_MAX NL_CAPABILITY_MAX
|
||||||
|
|
|
@ -1465,6 +1465,7 @@ int rtnl_link_build_change_request(struct rtnl_link *orig,
|
||||||
if (changes->ce_mask & LINK_ATTR_FLAGS) {
|
if (changes->ce_mask & LINK_ATTR_FLAGS) {
|
||||||
ifi.ifi_flags = orig->l_flags & ~changes->l_flag_mask;
|
ifi.ifi_flags = orig->l_flags & ~changes->l_flag_mask;
|
||||||
ifi.ifi_flags |= changes->l_flags;
|
ifi.ifi_flags |= changes->l_flags;
|
||||||
|
ifi.ifi_change = changes->l_flag_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changes->l_family && changes->l_family != orig->l_family) {
|
if (changes->l_family && changes->l_family != orig->l_family) {
|
||||||
|
|
|
@ -1151,6 +1151,15 @@ int nl_has_capability (int capability)
|
||||||
NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO,
|
NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO,
|
||||||
NL_CAPABILITY_VERSION_3_2_26,
|
NL_CAPABILITY_VERSION_3_2_26,
|
||||||
NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK),
|
NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK),
|
||||||
|
_NL_SET(1,
|
||||||
|
NL_CAPABILITY_LINK_BUILD_CHANGE_REQUEST_SET_CHANGE,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0),
|
||||||
/* IMPORTANT: these capability numbers are intended to be universal and stable
|
/* IMPORTANT: these capability numbers are intended to be universal and stable
|
||||||
* for libnl3. Don't allocate new numbers on your own that differ from upstream
|
* for libnl3. Don't allocate new numbers on your own that differ from upstream
|
||||||
* libnl3.
|
* libnl3.
|
||||||
|
|
Loading…
Add table
Reference in a new issue