mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-10 00:58:20 +03:00
network: make address_configure() or friends return 1 when the address is new
This commit is contained in:
parent
e81fd9dd23
commit
d9eee312a7
@ -326,6 +326,7 @@ static int address_add_foreign(Link *link, const Address *in, Address **ret) {
|
||||
}
|
||||
|
||||
static int address_add(Link *link, const Address *in, Address **ret) {
|
||||
bool is_new = false;
|
||||
Address *address;
|
||||
int r;
|
||||
|
||||
@ -338,6 +339,7 @@ static int address_add(Link *link, const Address *in, Address **ret) {
|
||||
r = address_add_internal(link, &link->addresses, in, &address);
|
||||
if (r < 0)
|
||||
return r;
|
||||
is_new = true;
|
||||
} else if (r == 0) {
|
||||
/* Take over a foreign address */
|
||||
r = set_ensure_put(&link->addresses, &address_hash_ops, address);
|
||||
@ -353,8 +355,7 @@ static int address_add(Link *link, const Address *in, Address **ret) {
|
||||
|
||||
if (ret)
|
||||
*ret = address;
|
||||
|
||||
return 0;
|
||||
return is_new;
|
||||
}
|
||||
|
||||
static int address_update(Address *address, const Address *src) {
|
||||
@ -811,7 +812,7 @@ int address_configure(
|
||||
Address *acquired_address, *a;
|
||||
uint32_t flags;
|
||||
bool update;
|
||||
int r;
|
||||
int r, k;
|
||||
|
||||
assert(address);
|
||||
assert(IN_SET(address->family, AF_INET, AF_INET6));
|
||||
@ -889,9 +890,9 @@ int address_configure(
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append IFA_CACHEINFO attribute: %m");
|
||||
|
||||
r = address_add(link, address, &a);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not add address: %m");
|
||||
k = address_add(link, address, &a);
|
||||
if (k < 0)
|
||||
return log_link_error_errno(link, k, "Could not add address: %m");
|
||||
|
||||
r = address_set_masquerade(a, true);
|
||||
if (r < 0)
|
||||
@ -914,7 +915,7 @@ int address_configure(
|
||||
if (ret)
|
||||
*ret = a;
|
||||
|
||||
return 1;
|
||||
return k;
|
||||
}
|
||||
|
||||
static int static_address_ready_callback(Address *address) {
|
||||
|
@ -170,6 +170,7 @@ static int neighbor_add_internal(Link *link, Set **neighbors, const Neighbor *in
|
||||
}
|
||||
|
||||
static int neighbor_add(Link *link, const Neighbor *in, Neighbor **ret) {
|
||||
bool is_new = false;
|
||||
Neighbor *neighbor;
|
||||
int r;
|
||||
|
||||
@ -179,6 +180,7 @@ static int neighbor_add(Link *link, const Neighbor *in, Neighbor **ret) {
|
||||
r = neighbor_add_internal(link, &link->neighbors, in, &neighbor);
|
||||
if (r < 0)
|
||||
return r;
|
||||
is_new = true;
|
||||
} else if (r == 0) {
|
||||
/* Neighbor is foreign, claim it as recognized */
|
||||
r = set_ensure_put(&link->neighbors, &neighbor_hash_ops, neighbor);
|
||||
@ -188,12 +190,13 @@ static int neighbor_add(Link *link, const Neighbor *in, Neighbor **ret) {
|
||||
set_remove(link->neighbors_foreign, neighbor);
|
||||
} else if (r == 1) {
|
||||
/* Neighbor already exists */
|
||||
;
|
||||
} else
|
||||
return r;
|
||||
|
||||
if (ret)
|
||||
*ret = neighbor;
|
||||
return 0;
|
||||
return is_new;
|
||||
}
|
||||
|
||||
static int neighbor_add_foreign(Link *link, const Neighbor *in, Neighbor **ret) {
|
||||
@ -279,7 +282,7 @@ static int neighbor_configure(Neighbor *neighbor, Link *link) {
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not add neighbor: %m");
|
||||
|
||||
return 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
int link_set_neighbors(Link *link) {
|
||||
|
@ -188,6 +188,7 @@ static int nexthop_add_foreign(Link *link, NextHop *in, NextHop **ret) {
|
||||
}
|
||||
|
||||
static int nexthop_add(Link *link, NextHop *in, NextHop **ret) {
|
||||
bool is_new = false;
|
||||
NextHop *nexthop;
|
||||
int r;
|
||||
|
||||
@ -197,6 +198,7 @@ static int nexthop_add(Link *link, NextHop *in, NextHop **ret) {
|
||||
r = nexthop_add_internal(link, &link->nexthops, in, &nexthop);
|
||||
if (r < 0)
|
||||
return r;
|
||||
is_new = true;
|
||||
} else if (r == 0) {
|
||||
/* Take over a foreign nexthop */
|
||||
r = set_ensure_put(&link->nexthops, &nexthop_hash_ops, nexthop);
|
||||
@ -212,8 +214,7 @@ static int nexthop_add(Link *link, NextHop *in, NextHop **ret) {
|
||||
|
||||
if (ret)
|
||||
*ret = nexthop;
|
||||
|
||||
return 0;
|
||||
return is_new;
|
||||
}
|
||||
|
||||
static int nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
|
||||
@ -297,7 +298,7 @@ static int nexthop_configure(NextHop *nexthop, Link *link) {
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not add nexthop: %m");
|
||||
|
||||
return 1;
|
||||
return r;
|
||||
}
|
||||
|
||||
int link_set_nexthop(Link *link) {
|
||||
|
@ -549,6 +549,7 @@ static int route_add_foreign(Manager *manager, Link *link, const Route *in, Rout
|
||||
|
||||
static int route_add(Manager *manager, Link *link, const Route *in, const MultipathRoute *m, Route **ret) {
|
||||
_cleanup_(route_freep) Route *tmp = NULL;
|
||||
bool is_new = false;
|
||||
Route *route;
|
||||
int r;
|
||||
|
||||
@ -572,6 +573,7 @@ static int route_add(Manager *manager, Link *link, const Route *in, const Multip
|
||||
r = route_add_internal(manager, link, link ? &link->routes : &manager->routes, in, &route);
|
||||
if (r < 0)
|
||||
return r;
|
||||
is_new = true;
|
||||
} else if (r == 0) {
|
||||
/* Take over a foreign route */
|
||||
if (link) {
|
||||
@ -595,8 +597,7 @@ static int route_add(Manager *manager, Link *link, const Route *in, const Multip
|
||||
|
||||
if (ret)
|
||||
*ret = route;
|
||||
|
||||
return 0;
|
||||
return is_new;
|
||||
}
|
||||
|
||||
static bool route_type_is_reject(const Route *route) {
|
||||
@ -949,15 +950,15 @@ static int route_expire_handler(sd_event_source *s, uint64_t usec, void *userdat
|
||||
static int route_add_and_setup_timer(Link *link, const Route *route, const MultipathRoute *m, Route **ret) {
|
||||
_cleanup_(sd_event_source_unrefp) sd_event_source *expire = NULL;
|
||||
Route *nr;
|
||||
int r;
|
||||
int r, k;
|
||||
|
||||
assert(link);
|
||||
assert(route);
|
||||
|
||||
if (route_type_is_reject(route))
|
||||
r = route_add(link->manager, NULL, route, NULL, &nr);
|
||||
k = route_add(link->manager, NULL, route, NULL, &nr);
|
||||
else if (!m || m->ifindex == 0 || m->ifindex == link->ifindex)
|
||||
r = route_add(NULL, link, route, m, &nr);
|
||||
k = route_add(NULL, link, route, m, &nr);
|
||||
else {
|
||||
Link *link_gw;
|
||||
|
||||
@ -965,10 +966,10 @@ static int route_add_and_setup_timer(Link *link, const Route *route, const Multi
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to get link with ifindex %d: %m", m->ifindex);
|
||||
|
||||
r = route_add(NULL, link_gw, route, m, &nr);
|
||||
k = route_add(NULL, link_gw, route, m, &nr);
|
||||
}
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not add route: %m");
|
||||
if (k < 0)
|
||||
return log_link_error_errno(link, k, "Could not add route: %m");
|
||||
|
||||
/* TODO: drop expiration handling once it can be pushed into the kernel */
|
||||
if (nr->lifetime != USEC_INFINITY && !kernel_route_expiration_supported()) {
|
||||
@ -984,7 +985,7 @@ static int route_add_and_setup_timer(Link *link, const Route *route, const Multi
|
||||
if (ret)
|
||||
*ret = nr;
|
||||
|
||||
return 0;
|
||||
return k;
|
||||
}
|
||||
|
||||
static int append_nexthop_one(const Route *route, const MultipathRoute *m, struct rtattr **rta, size_t offset) {
|
||||
@ -1075,7 +1076,7 @@ int route_configure(
|
||||
Route **ret) {
|
||||
|
||||
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
|
||||
int r;
|
||||
int r, k = 0;
|
||||
|
||||
assert(link);
|
||||
assert(link->manager);
|
||||
@ -1165,9 +1166,9 @@ int route_configure(
|
||||
if (ordered_set_isempty(route->multipath_routes)) {
|
||||
Route *nr;
|
||||
|
||||
r = route_add_and_setup_timer(link, route, NULL, &nr);
|
||||
if (r < 0)
|
||||
return r;
|
||||
k = route_add_and_setup_timer(link, route, NULL, &nr);
|
||||
if (k < 0)
|
||||
return k;
|
||||
|
||||
if (ret)
|
||||
*ret = nr;
|
||||
@ -1180,6 +1181,8 @@ int route_configure(
|
||||
r = route_add_and_setup_timer(link, route, m, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r > 0)
|
||||
k = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1190,7 +1193,7 @@ int route_configure(
|
||||
|
||||
link_ref(link);
|
||||
|
||||
return 0;
|
||||
return k;
|
||||
}
|
||||
|
||||
static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
|
||||
|
@ -326,6 +326,7 @@ static int routing_policy_rule_get(Manager *m, const RoutingPolicyRule *rule, Ro
|
||||
static int routing_policy_rule_add(Manager *m, const RoutingPolicyRule *in, int family, RoutingPolicyRule **ret) {
|
||||
_cleanup_(routing_policy_rule_freep) RoutingPolicyRule *rule = NULL;
|
||||
RoutingPolicyRule *existing;
|
||||
bool is_new = false;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
@ -353,6 +354,7 @@ static int routing_policy_rule_add(Manager *m, const RoutingPolicyRule *in, int
|
||||
|
||||
rule->manager = m;
|
||||
existing = TAKE_PTR(rule);
|
||||
is_new = true;
|
||||
} else if (r == 0) {
|
||||
/* Take over a foreign rule. */
|
||||
r = set_ensure_put(&m->rules, &routing_policy_rule_hash_ops, existing);
|
||||
@ -369,8 +371,7 @@ static int routing_policy_rule_add(Manager *m, const RoutingPolicyRule *in, int
|
||||
|
||||
if (ret)
|
||||
*ret = existing;
|
||||
|
||||
return 0;
|
||||
return is_new;
|
||||
}
|
||||
|
||||
static int routing_policy_rule_consume_foreign(Manager *m, RoutingPolicyRule *rule) {
|
||||
@ -635,7 +636,7 @@ static int routing_policy_rule_configure_internal(const RoutingPolicyRule *rule,
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not add rule: %m");
|
||||
|
||||
return 1;
|
||||
return r;
|
||||
}
|
||||
|
||||
static int routing_policy_rule_configure(const RoutingPolicyRule *rule, Link *link) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user