libnm,core: enable "onlink" flags also for IPv6 routes
Previously, onlink (RTNH_F_ONLINK) did not work for IPv6. In the meantime, this works in kernel ([1], [2]). Enable it also in NetworkManager. [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fc1e64e1092f62290d59151d16f9de0210e303c8 [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=68e2ffdeb5dbf54bc3a0684aa4e73c6db8675eed https://github.com/NetworkManager/NetworkManager/pull/337
This commit is contained in:
@@ -1218,7 +1218,7 @@ static const NMVariantAttributeSpec * const ip_route_attribute_spec[] = {
|
|||||||
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_SRC, G_VARIANT_TYPE_STRING, TRUE, TRUE, 'a'),
|
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_SRC, G_VARIANT_TYPE_STRING, TRUE, TRUE, 'a'),
|
||||||
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_FROM, G_VARIANT_TYPE_STRING, FALSE, TRUE, 'p'),
|
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_FROM, G_VARIANT_TYPE_STRING, FALSE, TRUE, 'p'),
|
||||||
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_TOS, G_VARIANT_TYPE_BYTE, TRUE, FALSE, 0 ),
|
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_TOS, G_VARIANT_TYPE_BYTE, TRUE, FALSE, 0 ),
|
||||||
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_ONLINK, G_VARIANT_TYPE_BOOLEAN, TRUE, FALSE, 0 ),
|
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_ONLINK, G_VARIANT_TYPE_BOOLEAN, TRUE, TRUE, 0 ),
|
||||||
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_WINDOW, G_VARIANT_TYPE_UINT32, TRUE, TRUE, 0 ),
|
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_WINDOW, G_VARIANT_TYPE_UINT32, TRUE, TRUE, 0 ),
|
||||||
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_CWND, G_VARIANT_TYPE_UINT32, TRUE, TRUE, 0 ),
|
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_CWND, G_VARIANT_TYPE_UINT32, TRUE, TRUE, 0 ),
|
||||||
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_INITCWND, G_VARIANT_TYPE_UINT32, TRUE, TRUE, 0 ),
|
ATTR_SPEC_PTR (NM_IP_ROUTE_ATTRIBUTE_INITCWND, G_VARIANT_TYPE_UINT32, TRUE, TRUE, 0 ),
|
||||||
|
@@ -859,15 +859,12 @@ _nm_ip_config_merge_route_attributes (int addr_family,
|
|||||||
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_TABLE, table, UINT32, uint32, 0);
|
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_TABLE, table, UINT32, uint32, 0);
|
||||||
r->table_coerced = nm_platform_route_table_coerce (table ?: (route_table ?: RT_TABLE_MAIN));
|
r->table_coerced = nm_platform_route_table_coerce (table ?: (route_table ?: RT_TABLE_MAIN));
|
||||||
|
|
||||||
if (addr_family == AF_INET) {
|
if (addr_family == AF_INET)
|
||||||
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_TOS, r4->tos, BYTE, byte, 0);
|
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_TOS, r4->tos, BYTE, byte, 0);
|
||||||
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_ONLINK, onlink, BOOLEAN, boolean, FALSE);
|
|
||||||
} else
|
|
||||||
onlink = FALSE;
|
|
||||||
|
|
||||||
r->r_rtm_flags = 0;
|
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_ONLINK, onlink, BOOLEAN, boolean, FALSE);
|
||||||
if (onlink)
|
|
||||||
r->r_rtm_flags = RTNH_F_ONLINK;
|
r->r_rtm_flags = ((onlink) ? (unsigned) RTNH_F_ONLINK : 0u);
|
||||||
|
|
||||||
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_WINDOW, r->window, UINT32, uint32, 0);
|
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_WINDOW, r->window, UINT32, uint32, 0);
|
||||||
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_CWND, r->cwnd, UINT32, uint32, 0);
|
GET_ATTR (NM_IP_ROUTE_ATTRIBUTE_CWND, r->cwnd, UINT32, uint32, 0);
|
||||||
|
@@ -4016,9 +4016,7 @@ _nl_msg_new_route (int nlmsg_type,
|
|||||||
? nm_platform_route_scope_inv (obj->ip4_route.scope_inv)
|
? nm_platform_route_scope_inv (obj->ip4_route.scope_inv)
|
||||||
: RT_SCOPE_NOWHERE,
|
: RT_SCOPE_NOWHERE,
|
||||||
.rtm_type = RTN_UNICAST,
|
.rtm_type = RTN_UNICAST,
|
||||||
.rtm_flags = obj->ip_route.r_rtm_flags & (is_v4
|
.rtm_flags = obj->ip_route.r_rtm_flags & ((unsigned) (RTNH_F_ONLINK)),
|
||||||
? (unsigned) (RTNH_F_ONLINK)
|
|
||||||
: (unsigned) 0),
|
|
||||||
.rtm_dst_len = obj->ip_route.plen,
|
.rtm_dst_len = obj->ip_route.plen,
|
||||||
.rtm_src_len = is_v4
|
.rtm_src_len = is_v4
|
||||||
? 0
|
? 0
|
||||||
|
@@ -429,7 +429,7 @@ typedef union {
|
|||||||
* Such a route is not alive, according to nmp_object_is_alive().
|
* Such a route is not alive, according to nmp_object_is_alive().
|
||||||
*
|
*
|
||||||
* NOTE: currently we ignore all flags except RTM_F_CLONED
|
* NOTE: currently we ignore all flags except RTM_F_CLONED
|
||||||
* and RTNH_F_ONLINK for IPv4.
|
* and RTNH_F_ONLINK.
|
||||||
* We also may not properly consider the flags as part of the ID
|
* We also may not properly consider the flags as part of the ID
|
||||||
* in route-cmp. */ \
|
* in route-cmp. */ \
|
||||||
unsigned r_rtm_flags; \
|
unsigned r_rtm_flags; \
|
||||||
|
Reference in New Issue
Block a user