summaryrefslogtreecommitdiff
path: root/src/network/networkd-nexthop.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-02-05 12:01:07 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-02-19 22:42:39 +0900
commit69e244e321e4c51ebd266555a5ec286b117ad5c6 (patch)
tree1ee17c1176450d5e14f04d7196b043f90429b1da /src/network/networkd-nexthop.c
parent3d81e41190539553ae3b364f08ee8b167ae0f128 (diff)
downloadsystemd-69e244e321e4c51ebd266555a5ec286b117ad5c6.tar.gz
network: also manage nexthops by ID
It will be used in later commits.
Diffstat (limited to 'src/network/networkd-nexthop.c')
-rw-r--r--src/network/networkd-nexthop.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/network/networkd-nexthop.c b/src/network/networkd-nexthop.c
index 028aaad313..9f94b64107 100644
--- a/src/network/networkd-nexthop.c
+++ b/src/network/networkd-nexthop.c
@@ -28,6 +28,9 @@ NextHop *nexthop_free(NextHop *nexthop) {
if (nexthop->link) {
set_remove(nexthop->link->nexthops, nexthop);
set_remove(nexthop->link->nexthops_foreign, nexthop);
+
+ if (nexthop->link->manager && nexthop->id > 0)
+ hashmap_remove(nexthop->link->manager->nexthops_by_id, UINT32_TO_PTR(nexthop->id));
}
return mfree(nexthop);
@@ -221,14 +224,18 @@ static int nexthop_update(Link *link, NextHop *nexthop, const NextHop *in) {
int r;
assert(link);
+ assert(link->manager);
assert(nexthop);
assert(in);
assert(in->id > 0);
- /* Currently, this only updates ID. */
+ /* This updates nexthop ID if necessary, and register the nexthop to Manager. */
- if (nexthop->id > 0)
- return nexthop->id == in->id ? 0 : -EINVAL;
+ if (nexthop->id > 0) {
+ if (nexthop->id == in->id)
+ goto set_manager;
+ return -EINVAL;
+ }
nexthop = set_remove(link->nexthops, nexthop);
if (!nexthop)
@@ -251,7 +258,8 @@ static int nexthop_update(Link *link, NextHop *nexthop, const NextHop *in) {
return r < 0 ? r : -EEXIST;
}
- return 0;
+set_manager:
+ return hashmap_ensure_put(&link->manager->nexthops_by_id, NULL, UINT32_TO_PTR(nexthop->id), nexthop);
}
static void log_nexthop_debug(const NextHop *nexthop, uint32_t id, const char *str, const Link *link) {