Skip to content

Commit

Permalink
Merge pull request #928
Browse files Browse the repository at this point in the history
compat-team: Set <link> node in slaves (bsc#1200505)
  • Loading branch information
mtomaschewski committed Oct 5, 2022
2 parents 0cbb9cf + 37791bb commit 687644d
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 30 deletions.
63 changes: 46 additions & 17 deletions client/compat.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,16 @@ ni_compat_netdev_free(ni_compat_netdev_t *compat)
ni_string_free(&compat->dhcp6.client_id);
ni_dhcp6_prefix_req_list_destroy(&compat->dhcp6.prefix_reqs);
ni_string_array_destroy(&compat->dhcp6.request_options);
switch(compat->port.type) {
case NI_IFTYPE_TEAM:
ni_team_port_config_destroy(&compat->port.conf.team);
break;
case NI_IFTYPE_OVS_BRIDGE:
ni_ovs_bridge_port_config_destroy(&compat->port.conf.ovsbr);
break;
default:
break;
}

free(compat);
}
Expand Down Expand Up @@ -841,6 +851,28 @@ __ni_compat_generate_team_link_watch(xml_node_t *tnode, const ni_team_link_watch
return TRUE;
}

static ni_bool_t
__ni_compat_generate_team_port_config(xml_node_t *port, const ni_team_port_config_t *config)
{

if (config->queue_id != -1U)
xml_node_new_element("queue_id", port, ni_sprint_uint(config->queue_id));

if (config->ab.prio)
xml_node_new_element("prio", port, ni_sprint_uint(config->ab.prio));

if (config->ab.sticky)
xml_node_new_element("sticky", port, ni_format_boolean(config->ab.sticky));

if (config->lacp.prio)
xml_node_new_element("lacp_prio", port, ni_sprint_uint(config->lacp.prio));

if (config->lacp.key)
xml_node_new_element("lacp_key", port, ni_sprint_uint(config->lacp.key));

return TRUE;
}

static ni_bool_t
__ni_compat_generate_team_ports(xml_node_t *tnode, const ni_team_port_array_t *array)
{
Expand All @@ -863,20 +895,7 @@ __ni_compat_generate_team_ports(xml_node_t *tnode, const ni_team_port_array_t *a

port = xml_node_new("port", ports);
xml_node_new_element("device", port, p->device.name);

if (p->config.queue_id != -1U)
xml_node_new_element("queue_id", port, ni_sprint_uint(p->config.queue_id));

if (p->config.ab.prio)
xml_node_new_element("prio", port, ni_sprint_uint(p->config.ab.prio));
if (p->config.ab.sticky)
xml_node_new_element("sticky", port, ni_format_boolean(p->config.ab.sticky));

if (p->config.lacp.prio)
xml_node_new_element("lacp_prio", port, ni_sprint_uint(p->config.lacp.prio));
if (p->config.lacp.key)
xml_node_new_element("lacp_key", port, ni_sprint_uint(p->config.lacp.key));

__ni_compat_generate_team_port_config(port, &p->config);
}

return TRUE;
Expand Down Expand Up @@ -2904,10 +2923,20 @@ ni_compat_generate_ifnode_content(xml_node_t *ifnode, const ni_compat_netdev_t *
xml_node_t *port;

xml_node_new_element("master", linknode, dev->link.masterdev.name);
if (compat->link_port.ovsbr.bridge.name) {
if (compat->port.type != NI_IFTYPE_UNKNOWN) {
port = xml_node_new("port", linknode);
xml_node_add_attr(port, "type", ni_linktype_type_to_name(NI_IFTYPE_OVS_BRIDGE));
xml_node_new_element("bridge", port, compat->link_port.ovsbr.bridge.name);
xml_node_add_attr(port, "type", ni_linktype_type_to_name(compat->port.type));

switch(compat->port.type) {
case NI_IFTYPE_OVS_BRIDGE:
xml_node_new_element("bridge", port, compat->port.conf.ovsbr.bridge.name);
break;
case NI_IFTYPE_TEAM:
__ni_compat_generate_team_port_config(port, &compat->port.conf.team);
break;
default:
break;
}
}
}
if (dev->link.mtu)
Expand Down
32 changes: 21 additions & 11 deletions client/suse/compat-suse.c
Original file line number Diff line number Diff line change
Expand Up @@ -6433,11 +6433,12 @@ __ni_suse_adjust_bond_slaves(ni_compat_netdev_array_t *netdevs, ni_compat_netdev
}

static void
__ni_suse_adjust_team_ports(ni_compat_netdev_array_t *netdevs, ni_compat_netdev_t *master)
__ni_suse_adjust_team_ports(ni_compat_netdev_array_t *netdevs, ni_compat_netdev_t *master)
{
ni_team_t *team = ni_netdev_get_team(master->dev);
const char *port;
ni_netdev_t *dev;
ni_compat_netdev_t *compat;
unsigned int i;
ni_bool_t nsna_enabled = FALSE;
ni_team_link_watch_t *lw;
Expand All @@ -6449,18 +6450,24 @@ static void
nsna_enabled = TRUE;
}

if (!nsna_enabled)
return;

for (i = 0; i < team->ports.count; i++) {
if (!team->ports.data[i])
continue;
port = team->ports.data[i]->device.name;
dev = __ni_suse_find_compat_device(netdevs, port);
if (dev && (ipv6 = ni_netdev_get_ipv6(dev)))
ni_tristate_set(&ipv6->conf.enabled, TRUE);
}
compat = __ni_suse_find_compat(netdevs, port);
if (!compat)
compat = __ni_suse_create_compat_slave(netdevs, master, master->dev->name, port);

if (compat && (dev = compat->dev)) {
if (!__ni_suse_set_link_master(dev, master->dev->name, master->dev->name))
continue;
if (nsna_enabled && (ipv6 = ni_netdev_get_ipv6(dev)))
ni_tristate_set(&ipv6->conf.enabled, TRUE);

compat->port.type = NI_IFTYPE_TEAM;
compat->port.conf.team = team->ports.data[i]->config;
}
}
}

static void
Expand Down Expand Up @@ -6546,11 +6553,14 @@ __ni_suse_adjust_ovs_bridge_ports(ni_compat_netdev_array_t *netdevs, ni_compat_n
port = p->device.name;
compat = __ni_suse_find_compat(netdevs, port);
if (compat) {
__ni_suse_set_link_master(compat->dev, ovs_system, master->dev->name);
ni_netdev_ref_set_ifname(&compat->link_port.ovsbr.bridge, master->dev->name);
if (__ni_suse_set_link_master(compat->dev, ovs_system, master->dev->name)) {
compat->port.type = NI_IFTYPE_OVS_BRIDGE;
ni_netdev_ref_set_ifname(&compat->port.conf.ovsbr.bridge, master->dev->name);
}
} else
if ((compat = __ni_suse_create_compat_slave(netdevs, master, ovs_system, port))) {
ni_netdev_ref_set_ifname(&compat->link_port.ovsbr.bridge, master->dev->name);
compat->port.type = NI_IFTYPE_OVS_BRIDGE;
ni_netdev_ref_set_ifname(&compat->port.conf.ovsbr.bridge, master->dev->name);
}
}
}
Expand Down
9 changes: 7 additions & 2 deletions client/wicked-client.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include <wicked/route.h>
#include <wicked/fsm.h>
#include <wicked/ovs.h>
#include <wicked/team.h>

extern int opt_global_dryrun;
extern char * opt_global_rootdir;
Expand All @@ -56,8 +57,12 @@ typedef struct ni_compat_netdev {
} identify;

struct {
ni_ovs_bridge_port_config_t ovsbr;
} link_port;
ni_iftype_t type;
union {
ni_ovs_bridge_port_config_t ovsbr;
ni_team_port_config_t team;
} conf;
} port;

ni_rule_array_t rules;

Expand Down

0 comments on commit 687644d

Please sign in to comment.