assert(nexthop);
assert(manager);
- /* If a nexthop is removed, the kernel silently removes nexthops and routes that depend on the
- * removed nexthop. Let's remove them for safety (though, they are already removed in the kernel,
- * hence that should fail), and forget them. */
-
- void *id;
- SET_FOREACH(id, nexthop->nexthops) {
- NextHop *nh;
-
- if (nexthop_get_by_id(manager, PTR_TO_UINT32(id), &nh) < 0)
- continue;
-
- RET_GATHER(r, nexthop_remove(nh, manager));
- }
+ /* If a nexthop is removed, the kernel silently removes routes that depend on the removed nexthop.
+ * Let's remove them for safety (though, they are already removed in the kernel, hence that should
+ * fail), and forget them. */
Route *route;
SET_FOREACH(route, nexthop->routes)
# Remove nexthop with ID 20
check_output('ip nexthop del id 20')
+
+ # Check the nexthop ID 20 is dropped from the group nexthop.
+ output = check_output('ip -0 nexthop list id 21')
+ print(output)
+ self.assertRegex(output, r'id 21 group 1,3')
+
+ # Remove nexthop with ID 21
+ check_output('ip nexthop del id 21')
copy_network_unit('11-dummy.netdev', '25-nexthop-test1.network')
networkctl_reload()
- # 25-nexthop-test1.network requests a route with nexthop ID 21,
- # which is silently removed by the kernel when nexthop with ID 20 is removed in the above,
+ # 25-nexthop-test1.network requests a route with nexthop ID 21, which is removed in the above,
# hence test1 should be stuck in the configuring state.
self.wait_operstate('test1', operstate='routable', setup_state='configuring')
output = networkctl_status('test1')
self.assertIn('State: routable (configuring)', output)
- # Check if the route which needs nexthop 20 and 21 are forgotten.
+ # Check if the route which needs nexthop 21 are forgotten.
output = networkctl_json()
check_json(output)
self.assertNotIn('"Destination":[10.10.10.14]', output)