link_detach_from_manager(link);
}
-static int link_joined(Link *link) {
+int link_activate(Link *link) {
int r;
assert(link);
_fallthrough_;
case ACTIVATION_POLICY_ALWAYS_UP:
r = link_up(link);
- if (r < 0) {
- link_enter_failed(link);
+ if (r < 0)
return r;
- }
break;
case ACTIVATION_POLICY_DOWN:
if (link->activated)
_fallthrough_;
case ACTIVATION_POLICY_ALWAYS_DOWN:
r = link_down(link, NULL);
- if (r < 0) {
- link_enter_failed(link);
+ if (r < 0)
return r;
- }
break;
default:
break;
}
link->activated = true;
+ return 0;
+}
+
+static int link_joined(Link *link) {
+ int r;
+
+ assert(link);
+ assert(link->network);
+
+ r = link_activate(link);
+ if (r < 0)
+ return r;
+
if (link->network->bridge) {
r = link_set_bridge(link);
if (r < 0)
int link_up(Link *link);
int link_down(Link *link, link_netlink_message_handler_t callback);
+int link_activate(Link *link);
void link_enter_failed(Link *link);