assert(manager || link);
assert(in);
- if (link) {
- existing = set_get(link->routes, in);
- if (existing) {
- if (ret)
- *ret = existing;
- return 1;
- }
-
- existing = set_get(link->routes_foreign, in);
- if (existing) {
- if (ret)
- *ret = existing;
- return 0;
- }
- } else {
- existing = set_get(manager->routes, in);
- if (existing) {
- if (ret)
- *ret = existing;
- return 1;
- }
+ existing = set_get(link ? link->routes : manager->routes, in);
+ if (existing) {
+ if (ret)
+ *ret = existing;
+ return 1;
+ }
- existing = set_get(manager->routes_foreign, in);
- if (existing) {
- if (ret)
- *ret = existing;
- return 0;
- }
+ existing = set_get(link ? link->routes_foreign : manager->routes_foreign, in);
+ if (existing) {
+ if (ret)
+ *ret = existing;
+ return 0;
}
return -ENOENT;
assert(dest);
assert(src);
+ /* This only copies entries used by the above hash and compare functions. */
+
dest->family = src->family;
dest->src = src->src;
dest->src_prefixlen = src->src_prefixlen;
is_new = true;
} else if (r == 0) {
/* Take over a foreign route */
- if (link) {
- r = set_ensure_put(&link->routes, &route_hash_ops, route);
- if (r < 0)
- return r;
-
- set_remove(link->routes_foreign, route);
- } else {
- r = set_ensure_put(&manager->routes, &route_hash_ops, route);
- if (r < 0)
- return r;
+ r = set_ensure_put(link ? &link->routes : &manager->routes, &route_hash_ops, route);
+ if (r < 0)
+ return r;
- set_remove(manager->routes_foreign, route);
- }
+ set_remove(link ? link->routes_foreign : manager->routes_foreign, route);
} else if (r == 1) {
/* Route exists, do nothing */
;