mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-01 14:58:05 +02:00
platform,device: merge branch 'replace-sysfs-with-netlink'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1127
This commit is contained in:
commit
d1dfcc4c9d
4 changed files with 120 additions and 40 deletions
|
|
@ -791,23 +791,68 @@ bridge_set_vlan_options(NMDevice *device, NMSettingBridge *s_bridge)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_platform_lnk_bridge_init_from_setting(NMSettingBridge *s_bridge, NMPlatformLnkBridge *props)
|
||||
{
|
||||
*props = (NMPlatformLnkBridge){
|
||||
.forward_delay = _DEFAULT_IF_ZERO(nm_setting_bridge_get_forward_delay(s_bridge) * 100u,
|
||||
NM_BRIDGE_FORWARD_DELAY_DEF_SYS),
|
||||
.hello_time = _DEFAULT_IF_ZERO(nm_setting_bridge_get_hello_time(s_bridge) * 100u,
|
||||
NM_BRIDGE_HELLO_TIME_DEF_SYS),
|
||||
.max_age = _DEFAULT_IF_ZERO(nm_setting_bridge_get_max_age(s_bridge) * 100u,
|
||||
NM_BRIDGE_MAX_AGE_DEF_SYS),
|
||||
.ageing_time = nm_setting_bridge_get_ageing_time(s_bridge) * 100u,
|
||||
.stp_state = nm_setting_bridge_get_stp(s_bridge),
|
||||
.priority = nm_setting_bridge_get_priority(s_bridge),
|
||||
.vlan_protocol = to_sysfs_vlan_protocol_sys(nm_setting_bridge_get_vlan_protocol(s_bridge)),
|
||||
.vlan_stats_enabled = nm_setting_bridge_get_vlan_stats_enabled(s_bridge),
|
||||
.group_fwd_mask = nm_setting_bridge_get_group_forward_mask(s_bridge),
|
||||
.mcast_snooping = nm_setting_bridge_get_multicast_snooping(s_bridge),
|
||||
.mcast_router =
|
||||
to_sysfs_multicast_router_sys(nm_setting_bridge_get_multicast_router(s_bridge)),
|
||||
.mcast_query_use_ifaddr = nm_setting_bridge_get_multicast_query_use_ifaddr(s_bridge),
|
||||
.mcast_querier = nm_setting_bridge_get_multicast_querier(s_bridge),
|
||||
.mcast_hash_max = nm_setting_bridge_get_multicast_hash_max(s_bridge),
|
||||
.mcast_last_member_count = nm_setting_bridge_get_multicast_last_member_count(s_bridge),
|
||||
.mcast_startup_query_count = nm_setting_bridge_get_multicast_startup_query_count(s_bridge),
|
||||
.mcast_last_member_interval =
|
||||
nm_setting_bridge_get_multicast_last_member_interval(s_bridge),
|
||||
.mcast_membership_interval = nm_setting_bridge_get_multicast_membership_interval(s_bridge),
|
||||
.mcast_querier_interval = nm_setting_bridge_get_multicast_querier_interval(s_bridge),
|
||||
.mcast_query_interval = nm_setting_bridge_get_multicast_query_interval(s_bridge),
|
||||
.mcast_query_response_interval =
|
||||
nm_setting_bridge_get_multicast_query_response_interval(s_bridge),
|
||||
.mcast_startup_query_interval =
|
||||
nm_setting_bridge_get_multicast_startup_query_interval(s_bridge),
|
||||
};
|
||||
|
||||
to_sysfs_group_address_sys(nm_setting_bridge_get_group_address(s_bridge), &props->group_addr);
|
||||
}
|
||||
|
||||
static NMActStageReturn
|
||||
act_stage1_prepare(NMDevice *device, NMDeviceStateReason *out_failure_reason)
|
||||
{
|
||||
NMConnection *connection;
|
||||
NMSetting *s_bridge;
|
||||
const Option *option;
|
||||
NMConnection *connection;
|
||||
NMSettingBridge *s_bridge;
|
||||
NMPlatformLnkBridge props;
|
||||
int r;
|
||||
int ifindex = nm_device_get_ifindex(device);
|
||||
|
||||
connection = nm_device_get_applied_connection(device);
|
||||
g_return_val_if_fail(connection, NM_ACT_STAGE_RETURN_FAILURE);
|
||||
|
||||
s_bridge = (NMSetting *) nm_connection_get_setting_bridge(connection);
|
||||
s_bridge = nm_connection_get_setting_bridge(connection);
|
||||
g_return_val_if_fail(s_bridge, NM_ACT_STAGE_RETURN_FAILURE);
|
||||
|
||||
for (option = master_options; option->name; option++)
|
||||
commit_option(device, s_bridge, option, FALSE);
|
||||
_platform_lnk_bridge_init_from_setting(s_bridge, &props);
|
||||
|
||||
if (!bridge_set_vlan_options(device, (NMSettingBridge *) s_bridge)) {
|
||||
r = nm_platform_link_bridge_change(nm_device_get_platform(device), ifindex, &props);
|
||||
if (r < 0) {
|
||||
NM_SET_OUT(out_failure_reason, NM_DEVICE_STATE_REASON_CONFIG_FAILED);
|
||||
return NM_ACT_STAGE_RETURN_FAILURE;
|
||||
}
|
||||
|
||||
if (!bridge_set_vlan_options(device, s_bridge)) {
|
||||
NM_SET_OUT(out_failure_reason, NM_DEVICE_STATE_REASON_CONFIG_FAILED);
|
||||
return NM_ACT_STAGE_RETURN_FAILURE;
|
||||
}
|
||||
|
|
@ -1054,39 +1099,7 @@ create_and_realize(NMDevice *device,
|
|||
}
|
||||
}
|
||||
|
||||
props = (NMPlatformLnkBridge){
|
||||
.forward_delay = _DEFAULT_IF_ZERO(nm_setting_bridge_get_forward_delay(s_bridge) * 100u,
|
||||
NM_BRIDGE_FORWARD_DELAY_DEF_SYS),
|
||||
.hello_time = _DEFAULT_IF_ZERO(nm_setting_bridge_get_hello_time(s_bridge) * 100u,
|
||||
NM_BRIDGE_HELLO_TIME_DEF_SYS),
|
||||
.max_age = _DEFAULT_IF_ZERO(nm_setting_bridge_get_max_age(s_bridge) * 100u,
|
||||
NM_BRIDGE_MAX_AGE_DEF_SYS),
|
||||
.ageing_time = nm_setting_bridge_get_ageing_time(s_bridge) * 100u,
|
||||
.stp_state = nm_setting_bridge_get_stp(s_bridge),
|
||||
.priority = nm_setting_bridge_get_priority(s_bridge),
|
||||
.vlan_protocol = to_sysfs_vlan_protocol_sys(nm_setting_bridge_get_vlan_protocol(s_bridge)),
|
||||
.vlan_stats_enabled = nm_setting_bridge_get_vlan_stats_enabled(s_bridge),
|
||||
.group_fwd_mask = nm_setting_bridge_get_group_forward_mask(s_bridge),
|
||||
.mcast_snooping = nm_setting_bridge_get_multicast_snooping(s_bridge),
|
||||
.mcast_router =
|
||||
to_sysfs_multicast_router_sys(nm_setting_bridge_get_multicast_router(s_bridge)),
|
||||
.mcast_query_use_ifaddr = nm_setting_bridge_get_multicast_query_use_ifaddr(s_bridge),
|
||||
.mcast_querier = nm_setting_bridge_get_multicast_querier(s_bridge),
|
||||
.mcast_hash_max = nm_setting_bridge_get_multicast_hash_max(s_bridge),
|
||||
.mcast_last_member_count = nm_setting_bridge_get_multicast_last_member_count(s_bridge),
|
||||
.mcast_startup_query_count = nm_setting_bridge_get_multicast_startup_query_count(s_bridge),
|
||||
.mcast_last_member_interval =
|
||||
nm_setting_bridge_get_multicast_last_member_interval(s_bridge),
|
||||
.mcast_membership_interval = nm_setting_bridge_get_multicast_membership_interval(s_bridge),
|
||||
.mcast_querier_interval = nm_setting_bridge_get_multicast_querier_interval(s_bridge),
|
||||
.mcast_query_interval = nm_setting_bridge_get_multicast_query_interval(s_bridge),
|
||||
.mcast_query_response_interval =
|
||||
nm_setting_bridge_get_multicast_query_response_interval(s_bridge),
|
||||
.mcast_startup_query_interval =
|
||||
nm_setting_bridge_get_multicast_startup_query_interval(s_bridge),
|
||||
};
|
||||
|
||||
to_sysfs_group_address_sys(nm_setting_bridge_get_group_address(s_bridge), &props.group_addr);
|
||||
_platform_lnk_bridge_init_from_setting(s_bridge, &props);
|
||||
|
||||
/* If mtu != 0, we set the MTU of the new bridge at creation time. However, kernel will still
|
||||
* automatically adjust the MTU of the bridge based on the minimum of the slave's MTU.
|
||||
|
|
|
|||
|
|
@ -7538,6 +7538,21 @@ out:
|
|||
return result;
|
||||
}
|
||||
|
||||
static int
|
||||
link_change(NMPlatform *platform, NMLinkType type, int ifindex, gconstpointer extra_data)
|
||||
{
|
||||
nm_auto_nlmsg struct nl_msg *nlmsg = NULL;
|
||||
|
||||
nlmsg = _nl_msg_new_link(RTM_NEWLINK, 0, ifindex, 0);
|
||||
if (!nlmsg)
|
||||
return -NME_UNSPEC;
|
||||
|
||||
if (!_nl_msg_new_link_set_linkinfo(nlmsg, type, extra_data))
|
||||
return -NME_UNSPEC;
|
||||
|
||||
return do_change_link(platform, CHANGE_LINK_TYPE_UNSPEC, ifindex, nlmsg, NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
link_add(NMPlatform *platform,
|
||||
NMLinkType type,
|
||||
|
|
@ -9920,6 +9935,7 @@ nm_linux_platform_class_init(NMLinuxPlatformClass *klass)
|
|||
platform_class->sysctl_get = sysctl_get;
|
||||
|
||||
platform_class->link_add = link_add;
|
||||
platform_class->link_change = link_change;
|
||||
platform_class->link_delete = link_delete;
|
||||
|
||||
platform_class->link_refresh = link_refresh;
|
||||
|
|
|
|||
|
|
@ -1304,6 +1304,45 @@ nm_platform_link_add(NMPlatform *self,
|
|||
->link_add(self, type, name, parent, address, address_len, mtu, extra_data, out_link);
|
||||
}
|
||||
|
||||
int
|
||||
nm_platform_link_change(NMPlatform *self, NMLinkType type, int ifindex, gconstpointer extra_data)
|
||||
{
|
||||
char buf[512];
|
||||
const char *name = nm_platform_link_get_name(self, ifindex);
|
||||
|
||||
_CHECK_SELF(self, klass, -NME_BUG);
|
||||
|
||||
_LOG2D("link: changing link: "
|
||||
"%s " /* type */
|
||||
"\"%s\"" /* name */
|
||||
"%s" /* extra_data */
|
||||
"",
|
||||
nm_link_type_to_string(type),
|
||||
name,
|
||||
({
|
||||
char *buf_p = buf;
|
||||
gsize buf_len = sizeof(buf);
|
||||
|
||||
buf[0] = '\0';
|
||||
|
||||
switch (type) {
|
||||
case NM_LINK_TYPE_BRIDGE:
|
||||
nm_strbuf_append_str(&buf_p, &buf_len, ", ");
|
||||
nm_platform_lnk_bridge_to_string((const NMPlatformLnkBridge *) extra_data,
|
||||
buf_p,
|
||||
buf_len);
|
||||
break;
|
||||
default:
|
||||
nm_assert(!extra_data);
|
||||
break;
|
||||
}
|
||||
|
||||
buf;
|
||||
}));
|
||||
|
||||
return klass->link_change(self, type, ifindex, extra_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_platform_link_delete:
|
||||
* @self: platform instance
|
||||
|
|
|
|||
|
|
@ -1113,6 +1113,9 @@ typedef struct {
|
|||
guint32 mtu,
|
||||
gconstpointer extra_data,
|
||||
const NMPlatformLink **out_link);
|
||||
|
||||
int (*link_change)(NMPlatform *self, NMLinkType type, int ifindex, gconstpointer extra_data);
|
||||
|
||||
gboolean (*link_delete)(NMPlatform *self, int ifindex);
|
||||
gboolean (*link_refresh)(NMPlatform *self, int ifindex);
|
||||
gboolean (*link_set_netns)(NMPlatform *self, int ifindex, int netns_fd);
|
||||
|
|
@ -1586,6 +1589,9 @@ int nm_platform_link_add(NMPlatform *self,
|
|||
gconstpointer extra_data,
|
||||
const NMPlatformLink **out_link);
|
||||
|
||||
int
|
||||
nm_platform_link_change(NMPlatform *self, NMLinkType type, int ifindex, gconstpointer extra_data);
|
||||
|
||||
static inline int
|
||||
nm_platform_link_veth_add(NMPlatform *self,
|
||||
const char *name,
|
||||
|
|
@ -1621,6 +1627,12 @@ nm_platform_link_bridge_add(NMPlatform *self,
|
|||
out_link);
|
||||
}
|
||||
|
||||
static inline int
|
||||
nm_platform_link_bridge_change(NMPlatform *self, int ifindex, const NMPlatformLnkBridge *props)
|
||||
{
|
||||
return nm_platform_link_change(self, NM_LINK_TYPE_BRIDGE, ifindex, props);
|
||||
}
|
||||
|
||||
static inline int
|
||||
nm_platform_link_bond_add(NMPlatform *self, const char *name, const NMPlatformLink **out_link)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue