if (!ret)
break;
- D(SYSTEM, "Failed to add device '%s' to bridge '%s' (tries=%d): %s\n",
+ D(SYSTEM, "Failed to add device '%s' to bridge '%s' (tries=%d): %s",
dev->ifname, bridge->ifname, tries, strerror(errno));
}
return NL_SKIP;
if (type == RTM_DELRULE)
- D(SYSTEM, "Remove a rule\n");
+ D(SYSTEM, "Remove a rule");
else
- D(SYSTEM, "Remove %s from device %s\n",
+ D(SYSTEM, "Remove %s from device %s",
type == RTM_DELADDR ? "an address" : "a route",
clr->dev->ifname);
ret = nl_send_auto_complete(sock_rtnl, clr->msg);
if (ret < 0) {
if (type == RTM_DELRULE)
- D(SYSTEM, "Error deleting a rule: %d\n", ret);
+ D(SYSTEM, "Error deleting a rule: %d", ret);
else
- D(SYSTEM, "Error deleting %s from device '%s': %d\n",
+ D(SYSTEM, "Error deleting %s from device '%s': %d",
type == RTM_DELADDR ? "an address" : "a route",
clr->dev->ifname, ret);
}
system_if_flags(dev->ifname, 0, IFF_UP);
if (system_is_bridge(dev->ifname)) {
- D(SYSTEM, "Delete existing bridge named '%s'\n", dev->ifname);
+ D(SYSTEM, "Delete existing bridge named '%s'", dev->ifname);
system_bridge_delbr(dev);
return;
}
bridge = system_get_bridge(dev->ifname, buf, sizeof(buf));
if (bridge) {
- D(SYSTEM, "Remove device '%s' from bridge '%s'\n", dev->ifname, bridge);
+ D(SYSTEM, "Remove device '%s' from bridge '%s'", dev->ifname, bridge);
system_bridge_if(bridge, dev, SIOCBRDELIF, NULL);
}
rv = system_rtnl_call(msg);
if (rv)
- D(SYSTEM, "Error adding bridge '%s': %d\n", bridge->ifname, rv);
+ D(SYSTEM, "Error adding bridge '%s': %d", bridge->ifname, rv);
return rv;
rv = system_rtnl_call(msg);
if (rv)
- D(SYSTEM, "Error adding macvlan '%s' over '%s': %d\n", macvlan->ifname, dev->ifname, rv);
+ D(SYSTEM, "Error adding macvlan '%s' over '%s': %d", macvlan->ifname, dev->ifname, rv);
return rv;
rv = system_rtnl_call(msg);
if (rv) {
if (cfg->flags & VETH_OPT_PEER_NAME)
- D(SYSTEM, "Error adding veth '%s' with peer '%s': %d\n", veth->ifname, cfg->peer_name, rv);
+ D(SYSTEM, "Error adding veth '%s' with peer '%s': %d", veth->ifname, cfg->peer_name, rv);
else
- D(SYSTEM, "Error adding veth '%s': %d\n", veth->ifname, rv);
+ D(SYSTEM, "Error adding veth '%s': %d", veth->ifname, rv);
}
return rv;
rv = system_rtnl_call(msg);
if (rv)
- D(SYSTEM, "Error adding vlandev '%s' over '%s': %d\n", vlandev->ifname, dev->ifname, rv);
+ D(SYSTEM, "Error adding vlandev '%s' over '%s': %d", vlandev->ifname, dev->ifname, rv);
return rv;
struct if_get_master_data {
int ifindex;
int master_ifindex;
- int pending;
+ bool pending;
};
static void if_get_master_dsa_linkinfo_attr(struct if_get_master_data *data,
continue;
data->master_ifindex = *(__u32 *)RTA_DATA(cur);
+ return;
}
}
continue;
if (cur->rta_type == IFLA_INFO_KIND && strcmp("dsa", (char *)RTA_DATA(cur)))
- break;
+ return;
if (cur->rta_type == IFLA_INFO_DATA)
if_get_master_dsa_linkinfo_attr(data, cur);
rem = nh->nlmsg_len - NLMSG_LENGTH(sizeof(*ifi));
while (RTA_OK(attr, rem)) {
- if (attr->rta_type == IFLA_LINKINFO)
+ if (attr->rta_type == IFLA_LINKINFO) {
if_get_master_linkinfo_attr(data, attr);
+ data->pending = false;
+ break;
+ }
attr = RTA_NEXT(attr, rem);
}
static int cb_if_get_master_ack(struct nl_msg *msg, void *arg)
{
struct if_get_master_data *data = (struct if_get_master_data *)arg;
- data->pending = 0;
+ data->pending = false;
+
return NL_STOP;
}
static int cb_if_get_master_error(struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg)
{
struct if_get_master_data *data = (struct if_get_master_data *)arg;
- data->pending = 0;
+ data->pending = false;
+
return NL_STOP;
}
struct if_get_master_data data = {
.ifindex = if_nametoindex(dev->ifname),
.master_ifindex = -1,
- .pending = 1,
+ .pending = true,
};
int ret = -1;
if (ret < 0)
goto free;
- while (data.pending > 0)
+ while (data.pending)
nl_recvmsgs(sock_rtnl, cb);
if (data.master_ifindex >= 0)
apply_mask &= s->flags;
+ if (apply_mask & DEV_OPT_MASTER) {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0)
+ system_set_master(dev, s->master_ifindex);
+ if (!(apply_mask & (DEV_OPT_MACADDR | DEV_OPT_DEFAULT_MACADDR)) || dev->external)
+ system_refresh_orig_macaddr(dev, &dev->orig_settings);
+#else
+ netifd_log_message(L_WARNING, "%s Your kernel is older than linux 6.1.0, changing DSA port conduit is not supported!", dev->ifname);
+#endif
+ }
+
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name) - 1);
if (apply_mask & DEV_OPT_MTU) {
system_set_drop_unsolicited_na(dev, s->drop_unsolicited_na ? "1" : "0");
if (apply_mask & DEV_OPT_ARP_ACCEPT)
system_set_arp_accept(dev, s->arp_accept ? "1" : "0");
- if (apply_mask & DEV_OPT_MASTER) {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0)
- system_set_master(dev, s->master_ifindex);
- system_refresh_orig_macaddr(dev, &dev->orig_settings);
-#else
- netifd_log_message(L_WARNING, "%s Your kernel is older than linux 6.1.0, changing DSA port conduit is not supported!", dev->ifname);
-#endif
- }
system_set_ethtool_settings(dev, s);
}
ret = system_rtnl_call(msg);
if (ret)
- D(SYSTEM, "Error adding vxlan '%s': %d\n", name, ret);
+ D(SYSTEM, "Error adding vxlan '%s': %d", name, ret);
return ret;