mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-24 20:40:06 +01:00
merge: branch 'ff/drop_offensive_code'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1984
This commit is contained in:
commit
ccee88ad5a
109 changed files with 2329 additions and 2254 deletions
14
Makefile.am
14
Makefile.am
|
|
@ -3440,10 +3440,10 @@ EXTRA_DIST += \
|
|||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_New_Wireless_Group_Names \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_1 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_2 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_1 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_2 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_3 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_slave_4 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_port_1 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_port_2 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_port_3 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_minimal_port_4 \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_Missing_Vlan_Setting \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_Missing_Vlan_Flags \
|
||||
src/core/settings/plugins/keyfile/tests/keyfiles/Test_Missing_ID_UUID \
|
||||
|
|
@ -3603,13 +3603,13 @@ EXTRA_DIST += \
|
|||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-netmask-1.cexpected \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection.cexpected \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-random_wifi_connection_2.cexpected \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-team-slave-enp31s0f1-142.cexpected \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-team-port-enp31s0f1-142.cexpected \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-eth-type \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-main \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-mode-numeric \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-port \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-slave \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-slave-ib \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-port \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-port-ib \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-component \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-main \
|
||||
src/core/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-missing-stp \
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ no-auto-default=*
|
|||
if specified (See <xref linkend="ignore-carrier"/>).
|
||||
Otherwise, it is a list of matches to specify for which device
|
||||
carrier should be ignored. See <xref linkend="device-spec"/> for the
|
||||
syntax how to specify a device. Note that master types like
|
||||
syntax how to specify a device. Note that controller types like
|
||||
bond, bridge, and team ignore carrier by default. You can however
|
||||
revert that default using the "except:" specifier (or better,
|
||||
use the per-device setting instead of the deprecated setting).
|
||||
|
|
@ -856,8 +856,13 @@ ipv6.ip6-privacy=0
|
|||
<listitem><para>If left unspecified, the default value is 3 tries before failing the connection.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>connection.autoconnect-ports</varname></term>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>connection.autoconnect-slaves</varname></term>
|
||||
<listitem><para>This is deprecated, please use "connection.autoconnect-ports" instead.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>connection.down-on-poweroff</varname></term>
|
||||
|
|
@ -1124,7 +1129,7 @@ ipv6.ip6-privacy=0
|
|||
<programlisting>
|
||||
[connection]
|
||||
ipv6.ip6-privacy=0
|
||||
connection.autoconnect-slaves=1
|
||||
connection.autoconnect-ports=1
|
||||
vpn.timeout=120
|
||||
|
||||
[connection-wifi-wlan0]
|
||||
|
|
|
|||
|
|
@ -57,8 +57,8 @@
|
|||
</listitem>
|
||||
<listitem>
|
||||
<para>The configuration is made up of Bridges, Ports and
|
||||
Interfaces. Interfaces are always enslaved to Ports, and Ports are always
|
||||
enslaved to Bridges.</para>
|
||||
Interfaces. Interfaces are always attached to Ports, and Ports are always
|
||||
attached to Bridges.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>NetworkManager only creates Bridges, Ports and Interfaces
|
||||
|
|
@ -66,7 +66,7 @@
|
|||
local interface nor its port automatically.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>You can't enslave Interface directly to a Bridge. You
|
||||
<para>You can't attach Interface directly to a Bridge. You
|
||||
always need a Port, even if it has just one interface.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
|
@ -89,7 +89,7 @@
|
|||
<link linkend="nm-settings.property.connection.type">type</link>.
|
||||
Due to the limitations of OVSDB, "empty" Bridges (with no Ports) can't exist.
|
||||
NetworkManager inserts the records for Bridges into OVSDB when a Port is
|
||||
enslaved.
|
||||
attached.
|
||||
</para>
|
||||
</refsect2>
|
||||
|
||||
|
|
@ -101,18 +101,18 @@
|
|||
Due to the limitations of OVSDB, "empty" Ports (with no Interfaces) can't
|
||||
exist. Ports can also be configured to do VLAN tagging or Bonding.
|
||||
NetworkManager inserts the records for Ports into OVSDB when an Interface is
|
||||
enslaved. Ports must be enslaved to a Bridge.</para>
|
||||
attached. Ports must be attached to a Bridge.</para>
|
||||
</refsect2>
|
||||
|
||||
<refsect2>
|
||||
<title>Interfaces</title>
|
||||
|
||||
<para>Interfaces are represented by a connections enslaved to a Port. The
|
||||
<para>Interfaces are represented by a connections attached to a Port. The
|
||||
system interfaces (that have a corresponding Linux link) have a respective
|
||||
<link linkend="nm-settings.property.connection.type">connection.type</link>
|
||||
of the link (e.g. "wired", "bond", "dummy", etc.). Other interfaces ("internal"
|
||||
or "patch" interfaces) are of ovs-interface type. The OVSDB entries are
|
||||
inserted upon enslavement to a Port.</para>
|
||||
inserted upon attachment to a Port.</para>
|
||||
</refsect2>
|
||||
</refsect1>
|
||||
|
||||
|
|
@ -123,10 +123,10 @@
|
|||
<example><title>Creating a Bridge with a single internal Interface</title>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli conn add type ovs-bridge conn.interface bridge0</userinput>
|
||||
Connection 'ovs-bridge-bridge0' (d10fc64d-1d48-4394-a1b8-e1aea72f27d5) successfully added.
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ovs-port conn.interface port0 master bridge0</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ovs-port conn.interface port0 controller bridge0</userinput>
|
||||
Connection 'ovs-port-port0' (5ae22bae-bba4-4815-9ade-7e635633e1f0) successfully added.
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ovs-interface slave-type ovs-port conn.interface iface0 \
|
||||
master port0 ipv4.method manual ipv4.address 192.0.2.1/24</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ovs-interface port-type ovs-port conn.interface iface0 \
|
||||
controller port0 ipv4.method manual ipv4.address 192.0.2.1/24</userinput>
|
||||
Connection 'ovs-interface-iface0' (3640d2a1-a2fd-4718-92f1-cffadb5b6cdc) successfully added.
|
||||
</screen>
|
||||
<para>As said above, you need to create a Port even for a single interface.
|
||||
|
|
@ -136,29 +136,29 @@ Connection 'ovs-interface-iface0' (3640d2a1-a2fd-4718-92f1-cffadb5b6cdc) success
|
|||
</example>
|
||||
|
||||
<example><title>Adding a Linux interface to a Bridge</title>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli conn add type ovs-port conn.interface port1 master bridge0</userinput>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli conn add type ovs-port conn.interface port1 controller bridge0</userinput>
|
||||
Connection 'ovs-port-port1' (67d041eb-8e7b-4458-afee-a1d07c9c4552) successfully added.
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ethernet conn.interface eth0 master port1</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ethernet conn.interface eth0 controller port1</userinput>
|
||||
Connection 'ovs-slave-eth0' (d459c45c-cf78-4c1c-b4b7-505e71379624) successfully added.
|
||||
</screen>
|
||||
<para>Again, you need a port.</para>
|
||||
</example>
|
||||
|
||||
<example><title>Creating a VLAN</title>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli conn add type ovs-port conn.interface port2 master bridge0 ovs-port.tag 120</userinput>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli conn add type ovs-port conn.interface port2 controller bridge0 ovs-port.tag 120</userinput>
|
||||
Connection 'ovs-port-port2' (3994c093-4ef7-4549-a4fd-627b831c3cb8) successfully added.
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ethernet conn.interface eth1 master port2</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ethernet conn.interface eth1 controller port2</userinput>
|
||||
Connection 'ovs-slave-eth1' (099be06e-71ad-484d-8d5a-fcadc5f207f5) successfully added.
|
||||
</screen>
|
||||
<para>It's just a port with a tag.</para>
|
||||
</example>
|
||||
|
||||
<example><title>Creating a Bond</title>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli conn add type ovs-port conn.interface bond0 master bridge0</userinput>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli conn add type ovs-port conn.interface bond0 controller bridge0</userinput>
|
||||
Connection 'ovs-port-bond0' (d154ebf9-e999-4e1b-a084-a3de53d25d8a) successfully added.
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ethernet conn.interface eth2 master bond0</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ethernet conn.interface eth2 controller bond0</userinput>
|
||||
Connection 'ovs-slave-eth2' (475ac1bf-30b2-4534-a877-27f33f58b082) successfully added.
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ethernet conn.interface eth3 master bond0</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli conn add type ethernet conn.interface eth3 controller bond0</userinput>
|
||||
Connection 'ovs-slave-eth3' (8dedeecb-ed12-482b-b77a-24a4fb835136) successfully added.
|
||||
</screen>
|
||||
<para>It's just a Port with multiple interfaces. See nm-settings-nmcli manual for
|
||||
|
|
|
|||
|
|
@ -153,8 +153,8 @@ BOOTPROTO=dhcp
|
|||
<para>
|
||||
<programlisting>
|
||||
<emphasis role="bold">Bonding configuration:</emphasis>
|
||||
ifcfg-BOND: ifcfg-BOND-slave:
|
||||
NAME=BOND NAME=BOND-slave
|
||||
ifcfg-BOND: ifcfg-BOND-port:
|
||||
NAME=BOND NAME=BOND-port
|
||||
UUID=b41888aa-924c-450c-b0f8-85a4f0a51b4a UUID=9bb048e4-286a-4cc3-b104-007dbd20decb
|
||||
DEVICE=bond100 DEVICE=eth0
|
||||
BONDING_OPTS="mode=balance-rr miimon=100" ONBOOT=yes
|
||||
|
|
@ -177,16 +177,16 @@ NAME=team0-profile
|
|||
UUID=1d3460a0-7b37-457f-a300-fe8d92da4807
|
||||
ONBOOT=yes
|
||||
|
||||
ifcfg-my_team0_slave1:
|
||||
NAME=team0-slave1
|
||||
ifcfg-my_team0_port1:
|
||||
NAME=team0-port1
|
||||
UUID=d5aed298-c567-4cc1-b808-6d38ecef9e64
|
||||
DEVICE=eth1
|
||||
ONBOOT=yes
|
||||
TEAM_MASTER=team0
|
||||
DEVICETYPE=TeamPort
|
||||
|
||||
ifcfg-my_team0_slave2:
|
||||
NAME=team0-slave2
|
||||
ifcfg-my_team0_port2:
|
||||
NAME=team0-port2
|
||||
UUID=94e75f4e-e5ad-401c-8962-31e0ae5d2215
|
||||
DEVICE=eth2
|
||||
ONBOOT=yes
|
||||
|
|
|
|||
|
|
@ -173,8 +173,8 @@ id=MainBridge id=br-port-1
|
|||
uuid=171ae855-a0ab-42b6-bd0c-60f5812eea9d uuid=d6e8ae98-71f8-4b3d-9d2d-2e26048fe794
|
||||
interface-name=MainBridge interface-name=em1
|
||||
type=bridge type=ethernet
|
||||
master=MainBridge
|
||||
[bridge] slave-type=bridge
|
||||
controller=MainBridge
|
||||
[bridge] port-type=bridge
|
||||
interface-name=MainBridge
|
||||
</programlisting>
|
||||
</para>
|
||||
|
|
|
|||
|
|
@ -187,56 +187,56 @@ B,DISPATCH</screen>
|
|||
</para>
|
||||
</example>
|
||||
|
||||
<example><title>Adding a bonding master and two slave connection profiles</title>
|
||||
<example><title>Adding a bonding controller and two port connection profiles</title>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli con add type bond ifname mybond0 mode active-backup</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet ifname eth1 master mybond0</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet ifname eth2 master mybond0</userinput></screen>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet ifname eth1 controller mybond0</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet ifname eth2 controller mybond0</userinput></screen>
|
||||
<para>
|
||||
This example demonstrates adding a bond master connection and two slaves. The
|
||||
first command adds a master bond connection, naming the bonding interface
|
||||
This example demonstrates adding a bond controller connection and two ports. The
|
||||
first command adds a controller bond connection, naming the bonding interface
|
||||
<emphasis>mybond0</emphasis> and using <emphasis>active-backup</emphasis> mode.
|
||||
The next two commands add slaves connections, both enslaved to <emphasis>mybond0</emphasis>.
|
||||
The first slave will be bound to <emphasis>eth1</emphasis> interface, the second to
|
||||
The next two commands add port connections, both attached as port to <emphasis>mybond0</emphasis>.
|
||||
The first port will be bound to <emphasis>eth1</emphasis> interface, the second to
|
||||
<emphasis>eth2</emphasis>.
|
||||
</para>
|
||||
</example>
|
||||
|
||||
<example><title>Adding a team master and two slave connection profiles</title>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli con add type team con-name Team1 ifname Team1 config team1-master-json.conf</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet con-name Team1-slave1 ifname em1 master Team1</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet con-name Team1-slave2 ifname em2 master Team1</userinput></screen>
|
||||
<example><title>Adding a team controller and two port connection profiles</title>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli con add type team con-name Team1 ifname Team1 config team1-controller-json.conf</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet con-name Team1-port1 ifname em1 controller Team1</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet con-name Team1-port2 ifname em2 controller Team1</userinput></screen>
|
||||
<para>
|
||||
This example demonstrates adding a team master connection profile and two slaves. It is
|
||||
very similar to the bonding example. The first command adds a master team profile, naming
|
||||
This example demonstrates adding a team controller connection profile and two ports. It is
|
||||
very similar to the bonding example. The first command adds a controller team profile, naming
|
||||
the team interface and the profile <emphasis>Team1</emphasis>. The team configuration
|
||||
for the master is read from <emphasis>team1-master-json.conf</emphasis> file. Later, you can
|
||||
for the controller is read from <emphasis>team1-controller-json.conf</emphasis> file. Later, you can
|
||||
change the configuration with <emphasis>modify</emphasis> command
|
||||
(<emphasis role="bold">nmcli con modify Team1 team.config team1-master-another-json.conf</emphasis>).
|
||||
The last two commands add slaves profiles, both enslaved to <emphasis>Team1</emphasis>.
|
||||
The first slave will be bound to the <emphasis>em1</emphasis> interface, the second to
|
||||
<emphasis>em2</emphasis>. The slaves don't specify <emphasis>config</emphasis> and thus
|
||||
(<emphasis role="bold">nmcli con modify Team1 team.config team1-controller-another-json.conf</emphasis>).
|
||||
The last two commands add port profiles, both attached as port to <emphasis>Team1</emphasis>.
|
||||
The first port will be bound to the <emphasis>em1</emphasis> interface, the second to
|
||||
<emphasis>em2</emphasis>. The ports don't specify <emphasis>config</emphasis> and thus
|
||||
<emphasis>teamd</emphasis> will use its default configuration. You will activate the whole setup
|
||||
by activating both slaves:
|
||||
<screen> <prompt>$ </prompt><userinput>nmcli con up Team1-slave1</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con up Team1-slave2</userinput></screen>
|
||||
by activating both ports:
|
||||
<screen> <prompt>$ </prompt><userinput>nmcli con up Team1-port1</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con up Team1-port2</userinput></screen>
|
||||
By default, the created profiles are marked for auto-activation. But if another
|
||||
connection has been activated on the device, the new profile won't activate
|
||||
automatically and you need to activate it manually.
|
||||
</para>
|
||||
</example>
|
||||
|
||||
<example><title>Adding a bridge and two slave profiles</title>
|
||||
<example><title>Adding a bridge and two port profiles</title>
|
||||
<screen><prompt>$ </prompt><userinput>nmcli con add type bridge con-name TowerBridge ifname TowerBridge</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet con-name br-slave-1 ifname ens3 master TowerBridge</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet con-name br-slave-2 ifname ens4 master TowerBridge</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet con-name br-port-1 ifname ens3 controller TowerBridge</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con add type ethernet con-name br-port-2 ifname ens4 controller TowerBridge</userinput>
|
||||
<prompt>$ </prompt><userinput>nmcli con modify TowerBridge bridge.stp no</userinput></screen>
|
||||
<para>
|
||||
This example demonstrates adding a bridge master connection and two slaves. The
|
||||
first command adds a master bridge connection, naming the bridge interface and
|
||||
This example demonstrates adding a bridge controller connection and two ports. The
|
||||
first command adds a controller bridge connection, naming the bridge interface and
|
||||
the profile as <emphasis>TowerBridge</emphasis>.
|
||||
The next two commands add slaves profiles, both will be enslaved to
|
||||
The next two commands add ports profiles, both will be attached as port to
|
||||
<emphasis>TowerBridge</emphasis>.
|
||||
The first slave will be tied to <emphasis>ens3</emphasis> interface, the second to
|
||||
The first port will be tied to <emphasis>ens3</emphasis> interface, the second to
|
||||
<emphasis>ens4</emphasis>.
|
||||
The last command will disable 802.1D STP for the TowerBridge profile.
|
||||
</para>
|
||||
|
|
@ -375,8 +375,8 @@ connection.timestamp: 0
|
|||
connection.read-only: no
|
||||
connection.permissions:
|
||||
connection.zone: --
|
||||
connection.master: --
|
||||
connection.slave-type: --
|
||||
connection.controller: --
|
||||
connection.port-type: --
|
||||
connection.secondaries:
|
||||
connection.gateway-ping-timeout: 0
|
||||
---------------------------------------------------------------------------
|
||||
|
|
@ -465,8 +465,8 @@ connection.timestamp: 0
|
|||
connection.read-only: no
|
||||
connection.permissions:
|
||||
connection.zone: --
|
||||
connection.master: --
|
||||
connection.slave-type: --
|
||||
connection.controller: --
|
||||
connection.port-type: --
|
||||
connection.secondaries:
|
||||
connection.gateway-ping-timeout: 0
|
||||
---------------------------------------------------------------------------
|
||||
|
|
@ -525,8 +525,8 @@ connection.timestamp: 0
|
|||
connection.read-only: no
|
||||
connection.permissions:
|
||||
connection.zone: --
|
||||
connection.master: --
|
||||
connection.slave-type: --
|
||||
connection.controller: --
|
||||
connection.port-type: --
|
||||
connection.secondaries:
|
||||
connection.gateway-ping-timeout: 0
|
||||
---------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -1031,7 +1031,7 @@
|
|||
sort |
|
||||
awk '
|
||||
/^(bond|bridge|team)-slave$/ {
|
||||
printf " <listitem><para><literal>%s</literal> (deprecated for ethernet with master)</para></listitem>\n", $0;
|
||||
printf " <listitem><para><literal>%s</literal> (deprecated for ethernet with controller)</para></listitem>\n", $0;
|
||||
next;
|
||||
}
|
||||
/^(wifi|ethernet|olpc-mash)$/ {
|
||||
|
|
@ -1059,9 +1059,9 @@
|
|||
<listitem><para><literal>adsl</literal></para></listitem>
|
||||
<listitem><para><literal>bluetooth</literal></para></listitem>
|
||||
<listitem><para><literal>bond</literal></para></listitem>
|
||||
<listitem><para><literal>bond-slave</literal> (deprecated for ethernet with master)</para></listitem>
|
||||
<listitem><para><literal>bond-slave</literal> (deprecated for ethernet with controller)</para></listitem>
|
||||
<listitem><para><literal>bridge</literal></para></listitem>
|
||||
<listitem><para><literal>bridge-slave</literal> (deprecated for ethernet with master)</para></listitem>
|
||||
<listitem><para><literal>bridge-slave</literal> (deprecated for ethernet with controller)</para></listitem>
|
||||
<listitem><para><literal>cdma</literal></para></listitem>
|
||||
<listitem><para><literal>dummy</literal></para></listitem>
|
||||
<listitem><para><literal>generic</literal></para></listitem>
|
||||
|
|
@ -1078,7 +1078,7 @@
|
|||
<listitem><para><literal>ovs-port</literal></para></listitem>
|
||||
<listitem><para><literal>pppoe</literal></para></listitem>
|
||||
<listitem><para><literal>team</literal></para></listitem>
|
||||
<listitem><para><literal>team-slave</literal> (deprecated for ethernet with master)</para></listitem>
|
||||
<listitem><para><literal>team-slave</literal> (deprecated for ethernet with controller)</para></listitem>
|
||||
<listitem><para><literal>tun</literal></para></listitem>
|
||||
<listitem><para><literal>veth</literal></para></listitem>
|
||||
<listitem><para><literal>vlan</literal></para></listitem>
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ _set_bond_attr(NMDevice *device, const char *attr, const char *value)
|
|||
/* kernel does not allow setting ad_actor_system to "00:00:00:00:00:00". We would thus
|
||||
* log an EINVAL error. Avoid that... at least, if the value is already "00:00:00:00:00:00". */
|
||||
cur_val =
|
||||
nm_platform_sysctl_master_get_option(nm_device_get_platform(device), ifindex, attr);
|
||||
nm_platform_sysctl_controller_get_option(nm_device_get_platform(device), ifindex, attr);
|
||||
if (nm_streq0(cur_val, NM_BOND_AD_ACTOR_SYSTEM_DEFAULT))
|
||||
return TRUE;
|
||||
|
||||
|
|
@ -129,8 +129,10 @@ _set_bond_attr(NMDevice *device, const char *attr, const char *value)
|
|||
* That will fail, and we will log a warning. There is nothing else to do. */
|
||||
}
|
||||
|
||||
ret =
|
||||
nm_platform_sysctl_master_set_option(nm_device_get_platform(device), ifindex, attr, value);
|
||||
ret = nm_platform_sysctl_controller_set_option(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
attr,
|
||||
value);
|
||||
if (!ret)
|
||||
_LOGW(LOGD_PLATFORM, "failed to set bonding attribute '%s' to '%s'", attr, value);
|
||||
return ret;
|
||||
|
|
@ -187,8 +189,9 @@ update_connection(NMDevice *device, NMConnection *connection)
|
|||
NM_SETTING_BOND_OPTION_BALANCE_SLB))
|
||||
continue;
|
||||
|
||||
value =
|
||||
nm_platform_sysctl_master_get_option(nm_device_get_platform(device), ifindex, option);
|
||||
value = nm_platform_sysctl_controller_get_option(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
option);
|
||||
|
||||
if (value && _nm_setting_bond_get_option_type(s_bond, option) == NM_BOND_OPTION_TYPE_BOTH) {
|
||||
p = strchr(value, ' ');
|
||||
|
|
@ -349,9 +352,10 @@ set_bond_arp_ip_targets(NMDevice *device, NMSettingBond *s_bond)
|
|||
gs_free char *cur_arp_ip_target = NULL;
|
||||
|
||||
/* ARP targets: clear and initialize the list */
|
||||
cur_arp_ip_target = nm_platform_sysctl_master_get_option(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
|
||||
cur_arp_ip_target =
|
||||
nm_platform_sysctl_controller_get_option(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
|
||||
set_arp_targets(
|
||||
device,
|
||||
cur_arp_ip_target,
|
||||
|
|
@ -659,7 +663,7 @@ commit_port_options(NMDevice *bond_device, NMDevice *port, NMSettingBondPort *s_
|
|||
* one of those modes, don't try to set the priority explicitly to zero. */
|
||||
prio_has = FALSE;
|
||||
} else if (nm_platform_kernel_support_get_full(
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BOND_SLAVE_PRIO,
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BOND_PORT_PRIO,
|
||||
FALSE)
|
||||
== NM_OPTION_BOOL_TRUE) {
|
||||
/* We can only detect support if we have it. We cannot detect lack of support if
|
||||
|
|
@ -699,15 +703,15 @@ attach_port(NMDevice *device,
|
|||
NMDeviceBond *self = NM_DEVICE_BOND(device);
|
||||
NMSettingBondPort *s_port;
|
||||
|
||||
nm_device_master_check_slave_physical_port(device, port, LOGD_BOND);
|
||||
nm_device_controller_check_port_physical_port(device, port, LOGD_BOND);
|
||||
|
||||
if (configure) {
|
||||
gboolean success;
|
||||
|
||||
nm_device_take_down(port, TRUE);
|
||||
success = nm_platform_link_enslave(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
nm_device_get_ip_ifindex(port));
|
||||
success = nm_platform_link_attach_port(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
nm_device_get_ip_ifindex(port));
|
||||
nm_device_bring_up(port);
|
||||
|
||||
if (!success) {
|
||||
|
|
@ -737,7 +741,7 @@ detach_port(NMDevice *device,
|
|||
NMDeviceBond *self = NM_DEVICE_BOND(device);
|
||||
gboolean success;
|
||||
gs_free char *address = NULL;
|
||||
int ifindex_slave;
|
||||
int ifindex_port;
|
||||
int ifindex;
|
||||
|
||||
if (configure) {
|
||||
|
|
@ -746,9 +750,9 @@ detach_port(NMDevice *device,
|
|||
configure = FALSE;
|
||||
}
|
||||
|
||||
ifindex_slave = nm_device_get_ip_ifindex(port);
|
||||
ifindex_port = nm_device_get_ip_ifindex(port);
|
||||
|
||||
if (ifindex_slave <= 0)
|
||||
if (ifindex_port <= 0)
|
||||
_LOGD(LOGD_BOND, "bond port %s is already detached", nm_device_get_ip_iface(port));
|
||||
|
||||
if (configure) {
|
||||
|
|
@ -758,10 +762,10 @@ detach_port(NMDevice *device,
|
|||
|
||||
address = g_strdup(nm_device_get_hw_address(device));
|
||||
|
||||
if (ifindex_slave > 0) {
|
||||
success = nm_platform_link_release(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
ifindex_slave);
|
||||
if (ifindex_port > 0) {
|
||||
success = nm_platform_link_release_port(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
ifindex_port);
|
||||
|
||||
if (success) {
|
||||
_LOGI(LOGD_BOND, "detached bond port %s", nm_device_get_ip_iface(port));
|
||||
|
|
@ -773,7 +777,7 @@ detach_port(NMDevice *device,
|
|||
if ((applied = nm_device_get_applied_connection(device))
|
||||
&& ((s_wired = nm_connection_get_setting_wired(applied)))
|
||||
&& ((cloned_mac = nm_setting_wired_get_cloned_mac_address(s_wired)))) {
|
||||
/* When the last slave is released the bond MAC will be set to a random
|
||||
/* When the last port is released the bond MAC will be set to a random
|
||||
* value by kernel; if we have set a cloned-mac-address, we need to
|
||||
* restore it to the previous value. */
|
||||
nm_platform_process_events(nm_device_get_platform(device));
|
||||
|
|
@ -781,16 +785,16 @@ detach_port(NMDevice *device,
|
|||
nm_device_hw_addr_set(device, address, "restore", FALSE);
|
||||
}
|
||||
|
||||
/* Kernel bonding code "closes" the slave when releasing it, (which clears
|
||||
/* Kernel bonding code "closes" the port when releasing it, (which clears
|
||||
* IFF_UP), so we must bring it back up here to ensure carrier changes and
|
||||
* other state is noticed by the now-released slave.
|
||||
* other state is noticed by the now-released port.
|
||||
*/
|
||||
if (ifindex_slave > 0) {
|
||||
if (ifindex_port > 0) {
|
||||
if (!nm_device_bring_up(port))
|
||||
_LOGW(LOGD_BOND, "detached bond port could not be brought up.");
|
||||
}
|
||||
} else {
|
||||
if (ifindex_slave > 0) {
|
||||
if (ifindex_port > 0) {
|
||||
_LOGI(LOGD_BOND, "bond port %s was detached", nm_device_get_ip_iface(port));
|
||||
}
|
||||
}
|
||||
|
|
@ -962,8 +966,8 @@ nm_device_bond_class_init(NMDeviceBondClass *klass)
|
|||
device_class->get_generic_capabilities = get_generic_capabilities;
|
||||
device_class->complete_connection = complete_connection;
|
||||
|
||||
device_class->update_connection = update_connection;
|
||||
device_class->master_update_slave_connection = controller_update_port_connection;
|
||||
device_class->update_connection = update_connection;
|
||||
device_class->controller_update_port_connection = controller_update_port_connection;
|
||||
|
||||
device_class->create_and_realize = create_and_realize;
|
||||
device_class->act_stage1_prepare = act_stage1_prepare;
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@ typedef struct {
|
|||
|
||||
#define OPTION_TYPE_TOFROM(to, fro) .to_sysfs = (to), .from_sysfs = (fro)
|
||||
|
||||
static const Option master_options[] = {
|
||||
static const Option controller_options[] = {
|
||||
OPTION(NM_SETTING_BRIDGE_STP, /* this must stay as the first item */
|
||||
"stp_state",
|
||||
OPTION_TYPE_BOOL(NM_BRIDGE_STP_DEF), ),
|
||||
|
|
@ -487,12 +487,12 @@ update_connection(NMDevice *device, NMConnection *connection)
|
|||
gs_free char *stp = NULL;
|
||||
int stp_value;
|
||||
|
||||
option = master_options;
|
||||
option = controller_options;
|
||||
nm_assert(nm_streq(option->sysname, "stp_state"));
|
||||
|
||||
stp = nm_platform_sysctl_master_get_option(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
option->sysname);
|
||||
stp = nm_platform_sysctl_controller_get_option(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
option->sysname);
|
||||
stp_value =
|
||||
_nm_utils_ascii_str_to_int64(stp, 10, option->nm_min, option->nm_max, option->nm_default);
|
||||
g_object_set(s_bridge, option->name, stp_value, NULL);
|
||||
|
|
@ -503,9 +503,9 @@ update_connection(NMDevice *device, NMConnection *connection)
|
|||
gs_free char *str = NULL;
|
||||
GParamSpec *pspec;
|
||||
|
||||
str = nm_platform_sysctl_master_get_option(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
option->sysname);
|
||||
str = nm_platform_sysctl_controller_get_option(nm_device_get_platform(device),
|
||||
ifindex,
|
||||
option->sysname);
|
||||
pspec = g_object_class_find_property(G_OBJECT_GET_CLASS(s_bridge), option->name);
|
||||
|
||||
if (!stp_value && option->only_with_stp)
|
||||
|
|
@ -575,22 +575,22 @@ out:
|
|||
}
|
||||
|
||||
static gboolean
|
||||
master_update_slave_connection(NMDevice *device,
|
||||
NMDevice *slave,
|
||||
NMConnection *connection,
|
||||
GError **error)
|
||||
controller_update_port_connection(NMDevice *device,
|
||||
NMDevice *port,
|
||||
NMConnection *connection,
|
||||
GError **error)
|
||||
{
|
||||
NMSettingConnection *s_con;
|
||||
NMSettingBridgePort *s_port;
|
||||
int ifindex_slave = nm_device_get_ifindex(slave);
|
||||
int ifindex_port = nm_device_get_ifindex(port);
|
||||
NMConnection *applied_connection = nm_device_get_applied_connection(device);
|
||||
const NMPlatformLink *pllink;
|
||||
|
||||
g_return_val_if_fail(ifindex_slave > 0, FALSE);
|
||||
g_return_val_if_fail(ifindex_port > 0, FALSE);
|
||||
|
||||
s_con = nm_connection_get_setting_connection(connection);
|
||||
s_port = _nm_connection_ensure_setting(connection, NM_TYPE_SETTING_BRIDGE_PORT);
|
||||
pllink = nm_platform_link_get(nm_device_get_platform(slave), ifindex_slave);
|
||||
pllink = nm_platform_link_get(nm_device_get_platform(port), ifindex_port);
|
||||
|
||||
if (pllink && pllink->port_kind == NM_PORT_KIND_BRIDGE) {
|
||||
g_object_set(s_port,
|
||||
|
|
@ -917,19 +917,19 @@ attach_port(NMDevice *device,
|
|||
gpointer user_data)
|
||||
{
|
||||
NMDeviceBridge *self = NM_DEVICE_BRIDGE(device);
|
||||
NMConnection *master_connection;
|
||||
NMConnection *controller_connection;
|
||||
NMSettingBridge *s_bridge;
|
||||
NMSettingBridgePort *s_port;
|
||||
|
||||
if (configure) {
|
||||
if (!nm_platform_link_enslave(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
nm_device_get_ip_ifindex(port)))
|
||||
if (!nm_platform_link_attach_port(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
nm_device_get_ip_ifindex(port)))
|
||||
return FALSE;
|
||||
|
||||
master_connection = nm_device_get_applied_connection(device);
|
||||
nm_assert(master_connection);
|
||||
s_bridge = nm_connection_get_setting_bridge(master_connection);
|
||||
controller_connection = nm_device_get_applied_connection(device);
|
||||
nm_assert(controller_connection);
|
||||
s_bridge = nm_connection_get_setting_bridge(controller_connection);
|
||||
nm_assert(s_bridge);
|
||||
s_port = nm_connection_get_setting_bridge_port(connection);
|
||||
|
||||
|
|
@ -945,7 +945,7 @@ attach_port(NMDevice *device,
|
|||
|
||||
plat_vlans = setting_vlans_to_platform(vlans);
|
||||
|
||||
/* Since the link was just enslaved, there are no existing VLANs
|
||||
/* Since the link was just enportd, there are no existing VLANs
|
||||
* (except for the default one) and so there's no need to flush. */
|
||||
|
||||
if (plat_vlans
|
||||
|
|
@ -976,7 +976,7 @@ detach_port(NMDevice *device,
|
|||
{
|
||||
NMDeviceBridge *self = NM_DEVICE_BRIDGE(device);
|
||||
gboolean success;
|
||||
int ifindex_slave;
|
||||
int ifindex_port;
|
||||
int ifindex;
|
||||
|
||||
if (configure) {
|
||||
|
|
@ -985,17 +985,17 @@ detach_port(NMDevice *device,
|
|||
configure = FALSE;
|
||||
}
|
||||
|
||||
ifindex_slave = nm_device_get_ip_ifindex(port);
|
||||
ifindex_port = nm_device_get_ip_ifindex(port);
|
||||
|
||||
if (ifindex_slave <= 0) {
|
||||
if (ifindex_port <= 0) {
|
||||
_LOGD(LOGD_TEAM, "bridge port %s is already detached", nm_device_get_ip_iface(port));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (configure) {
|
||||
success = nm_platform_link_release(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
ifindex_slave);
|
||||
success = nm_platform_link_release_port(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
ifindex_port);
|
||||
|
||||
if (success) {
|
||||
_LOGI(LOGD_BRIDGE, "detached bridge port %s", nm_device_get_ip_iface(port));
|
||||
|
|
@ -1061,7 +1061,7 @@ create_and_realize(NMDevice *device,
|
|||
mtu = nm_setting_wired_get_mtu(s_wired);
|
||||
|
||||
/* 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.
|
||||
* automatically adjust the MTU of the bridge based on the minimum of the port's MTU.
|
||||
* We don't want this automatism as the user asked for a fixed MTU.
|
||||
*
|
||||
* To workaround this behavior of kernel, we will later toggle the MTU twice. See
|
||||
|
|
@ -1199,8 +1199,8 @@ nm_device_bridge_class_init(NMDeviceBridgeClass *klass)
|
|||
device_class->check_connection_available = check_connection_available;
|
||||
device_class->complete_connection = complete_connection;
|
||||
|
||||
device_class->update_connection = update_connection;
|
||||
device_class->master_update_slave_connection = master_update_slave_connection;
|
||||
device_class->update_connection = update_connection;
|
||||
device_class->controller_update_port_connection = controller_update_port_connection;
|
||||
|
||||
device_class->create_and_realize = create_and_realize;
|
||||
device_class->act_stage1_prepare_set_hwaddr_ethernet = TRUE;
|
||||
|
|
|
|||
|
|
@ -58,10 +58,11 @@ void nm_device_activate_schedule_stage3_ip_config(NMDevice *device, gboolean do_
|
|||
|
||||
void nm_device_recheck_available_connections(NMDevice *device);
|
||||
|
||||
void
|
||||
nm_device_master_check_slave_physical_port(NMDevice *self, NMDevice *slave, NMLogDomain log_domain);
|
||||
void nm_device_controller_check_port_physical_port(NMDevice *self,
|
||||
NMDevice *port,
|
||||
NMLogDomain log_domain);
|
||||
|
||||
void nm_device_master_release_slaves_all(NMDevice *self);
|
||||
void nm_device_controller_release_ports_all(NMDevice *self);
|
||||
|
||||
void nm_device_set_carrier(NMDevice *self, gboolean carrier);
|
||||
|
||||
|
|
|
|||
|
|
@ -222,13 +222,13 @@ attach_port(NMDevice *device,
|
|||
gboolean success = TRUE;
|
||||
const char *port_iface = nm_device_get_ip_iface(port);
|
||||
|
||||
nm_device_master_check_slave_physical_port(device, port, LOGD_DEVICE);
|
||||
nm_device_controller_check_port_physical_port(device, port, LOGD_DEVICE);
|
||||
|
||||
if (configure) {
|
||||
nm_device_take_down(port, TRUE);
|
||||
success = nm_platform_link_enslave(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
nm_device_get_ip_ifindex(port));
|
||||
success = nm_platform_link_attach_port(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
nm_device_get_ip_ifindex(port));
|
||||
nm_device_bring_up(port);
|
||||
|
||||
if (!success)
|
||||
|
|
@ -267,9 +267,9 @@ detach_port(NMDevice *device,
|
|||
|
||||
if (configure) {
|
||||
if (ifindex_port > 0) {
|
||||
success = nm_platform_link_release(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
ifindex_port);
|
||||
success = nm_platform_link_release_port(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
ifindex_port);
|
||||
|
||||
if (success) {
|
||||
_LOGI(LOGD_DEVICE, "detached VRF port %s", nm_device_get_ip_iface(port));
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -375,10 +375,10 @@ typedef struct _NMDeviceClass {
|
|||
/* Update the connection with currently configured L2 settings */
|
||||
void (*update_connection)(NMDevice *device, NMConnection *connection);
|
||||
|
||||
gboolean (*master_update_slave_connection)(NMDevice *self,
|
||||
NMDevice *slave,
|
||||
NMConnection *connection,
|
||||
GError **error);
|
||||
gboolean (*controller_update_port_connection)(NMDevice *self,
|
||||
NMDevice *port,
|
||||
NMConnection *connection,
|
||||
GError **error);
|
||||
|
||||
/* Attachs a port asynchronously. Returns TRUE/FALSE on immediate
|
||||
* success/error; in such cases, the callback is not invoked. If the
|
||||
|
|
@ -526,14 +526,14 @@ gboolean nm_device_is_available(NMDevice *dev, NMDeviceCheckDevAvailableFlags fl
|
|||
gboolean nm_device_has_carrier(NMDevice *dev);
|
||||
|
||||
NMConnection *nm_device_generate_connection(NMDevice *self,
|
||||
NMDevice *master,
|
||||
NMDevice *controller,
|
||||
gboolean *out_maybe_later,
|
||||
GError **error);
|
||||
|
||||
gboolean nm_device_master_update_slave_connection(NMDevice *master,
|
||||
NMDevice *slave,
|
||||
NMConnection *connection,
|
||||
GError **error);
|
||||
gboolean nm_device_controller_update_port_connection(NMDevice *controller,
|
||||
NMDevice *port,
|
||||
NMConnection *connection,
|
||||
GError **error);
|
||||
|
||||
gboolean
|
||||
nm_device_can_auto_connect(NMDevice *self, NMSettingsConnection *sett_conn, char **specific_object);
|
||||
|
|
@ -549,7 +549,7 @@ gboolean nm_device_check_connection_compatible(NMDevice *device,
|
|||
gboolean check_properties,
|
||||
GError **error);
|
||||
|
||||
gboolean nm_device_check_slave_connection_compatible(NMDevice *device, NMConnection *connection);
|
||||
gboolean nm_device_check_port_connection_compatible(NMDevice *device, NMConnection *connection);
|
||||
gboolean nm_device_can_be_parent(NMDevice *device);
|
||||
|
||||
gboolean nm_device_can_assume_connections(NMDevice *self);
|
||||
|
|
@ -603,9 +603,9 @@ void nm_device_copy_ip6_dns_config(NMDevice *self, NMDevice *from_device);
|
|||
* them by default
|
||||
* @NM_UNMANAGED_USER_UDEV: %TRUE when unmanaged by user decision (via UDev rule)
|
||||
* @NM_UNMANAGED_EXTERNAL_DOWN: %TRUE when unmanaged because !IFF_UP and not created by NM
|
||||
* @NM_UNMANAGED_IS_SLAVE: indicates that the device is enslaved. Note that
|
||||
* setting the NM_UNMANAGED_IS_SLAVE to %TRUE makes no sense, this flag has only
|
||||
* meaning to set a slave device as managed if the parent is managed too.
|
||||
* @NM_UNMANAGED_IS_PORT: indicates that the device is attached as port. Note that
|
||||
* setting the NM_UNMANAGED_IS_PORT to %TRUE makes no sense, this flag has only
|
||||
* meaning to set a port device as managed if the parent is managed too.
|
||||
*/
|
||||
typedef enum {
|
||||
NM_UNMANAGED_NONE = 0,
|
||||
|
|
@ -624,7 +624,7 @@ typedef enum {
|
|||
NM_UNMANAGED_USER_CONF = (1LL << 6),
|
||||
NM_UNMANAGED_USER_UDEV = (1LL << 7),
|
||||
NM_UNMANAGED_EXTERNAL_DOWN = (1LL << 8),
|
||||
NM_UNMANAGED_IS_SLAVE = (1LL << 9),
|
||||
NM_UNMANAGED_IS_PORT = (1LL << 9),
|
||||
|
||||
NM_UNMANAGED_ALL = ((1LL << 10) - 1),
|
||||
} NMUnmanagedFlags;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ create_and_realize(NMDevice *device,
|
|||
const NMPlatformLink **out_plink,
|
||||
GError **error)
|
||||
{
|
||||
/* The actual backing resources will be created on enslavement by the port
|
||||
/* The actual backing resources will be created on attachment by the port
|
||||
* when it can identify the port and the bridge. */
|
||||
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ create_and_realize(NMDevice *device,
|
|||
const NMPlatformLink **out_plink,
|
||||
GError **error)
|
||||
{
|
||||
/* The port will be added to ovsdb when an interface is enslaved,
|
||||
/* The port will be added to ovsdb when an interface is attached as port,
|
||||
* because there's no such thing like an empty port. */
|
||||
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -238,10 +238,10 @@ update_connection(NMDevice *device, NMConnection *connection)
|
|||
/*****************************************************************************/
|
||||
|
||||
static gboolean
|
||||
master_update_slave_connection(NMDevice *device,
|
||||
NMDevice *slave,
|
||||
NMConnection *connection,
|
||||
GError **error)
|
||||
controller_update_port_connection(NMDevice *device,
|
||||
NMDevice *port,
|
||||
NMConnection *connection,
|
||||
GError **error)
|
||||
{
|
||||
NMDeviceTeam *self = NM_DEVICE_TEAM(device);
|
||||
NMSettingTeamPort *s_port;
|
||||
|
|
@ -251,23 +251,24 @@ master_update_slave_connection(NMDevice *device,
|
|||
struct teamdctl *tdc;
|
||||
const char *team_port_config = NULL;
|
||||
const char *iface = nm_device_get_iface(device);
|
||||
const char *iface_slave = nm_device_get_iface(slave);
|
||||
const char *iface_port = nm_device_get_iface(port);
|
||||
NMConnection *applied_connection = nm_device_get_applied_connection(device);
|
||||
|
||||
tdc = _tdc_connect_new(self, iface, &connect_error);
|
||||
if (!tdc) {
|
||||
g_set_error(error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_FAILED,
|
||||
"update slave connection for slave '%s' failed to connect to teamd for master "
|
||||
"%s (%s)",
|
||||
iface_slave,
|
||||
iface,
|
||||
connect_error->message);
|
||||
g_set_error(
|
||||
error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_FAILED,
|
||||
"update port connection for port '%s' failed to connect to teamd for controller "
|
||||
"%s (%s)",
|
||||
iface_port,
|
||||
iface,
|
||||
connect_error->message);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
err = teamdctl_port_config_get_raw_direct(tdc, iface_slave, (char **) &team_port_config);
|
||||
err = teamdctl_port_config_get_raw_direct(tdc, iface_port, (char **) &team_port_config);
|
||||
port_config = g_strdup(team_port_config);
|
||||
teamdctl_disconnect(tdc);
|
||||
teamdctl_free(tdc);
|
||||
|
|
@ -275,9 +276,9 @@ master_update_slave_connection(NMDevice *device,
|
|||
g_set_error(error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_FAILED,
|
||||
"update slave connection for slave '%s' failed to get configuration from teamd "
|
||||
"master %s (err=%d)",
|
||||
iface_slave,
|
||||
"update port connection for port '%s' failed to get configuration from teamd "
|
||||
"controller %s (err=%d)",
|
||||
iface_port,
|
||||
iface,
|
||||
err);
|
||||
g_free(port_config);
|
||||
|
|
@ -858,7 +859,7 @@ attach_port(NMDevice *device,
|
|||
const char *port_iface = nm_device_get_ip_iface(port);
|
||||
NMSettingTeamPort *s_team_port;
|
||||
|
||||
nm_device_master_check_slave_physical_port(device, port, LOGD_TEAM);
|
||||
nm_device_controller_check_port_physical_port(device, port, LOGD_TEAM);
|
||||
|
||||
if (configure) {
|
||||
nm_device_take_down(port, TRUE);
|
||||
|
|
@ -881,9 +882,9 @@ attach_port(NMDevice *device,
|
|||
return FALSE;
|
||||
}
|
||||
}
|
||||
success = nm_platform_link_enslave(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
nm_device_get_ip_ifindex(port));
|
||||
success = nm_platform_link_attach_port(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
nm_device_get_ip_ifindex(port));
|
||||
nm_device_bring_up(port);
|
||||
|
||||
if (!success)
|
||||
|
|
@ -927,9 +928,9 @@ detach_port(NMDevice *device,
|
|||
if (ifindex_port <= 0) {
|
||||
_LOGD(LOGD_TEAM, "team port %s is already detached", port_iface);
|
||||
} else if (do_release) {
|
||||
success = nm_platform_link_release(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
ifindex_port);
|
||||
success = nm_platform_link_release_port(nm_device_get_platform(device),
|
||||
nm_device_get_ip_ifindex(device),
|
||||
ifindex_port);
|
||||
if (success)
|
||||
_LOGI(LOGD_TEAM, "detached team port %s", port_iface);
|
||||
else
|
||||
|
|
@ -974,7 +975,7 @@ create_and_realize(NMDevice *device,
|
|||
g_set_error(error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_CREATION_FAILED,
|
||||
"Failed to create team master interface '%s' for '%s': %s",
|
||||
"Failed to create team controller interface '%s' for '%s': %s",
|
||||
iface,
|
||||
nm_connection_get_id(connection),
|
||||
nm_strerror(r));
|
||||
|
|
@ -1127,12 +1128,12 @@ nm_device_team_class_init(NMDeviceTeamClass *klass)
|
|||
device_class->connection_type_check_compatible = NM_SETTING_TEAM_SETTING_NAME;
|
||||
device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES(NM_LINK_TYPE_TEAM);
|
||||
|
||||
device_class->is_controller = TRUE;
|
||||
device_class->create_and_realize = create_and_realize;
|
||||
device_class->get_generic_capabilities = get_generic_capabilities;
|
||||
device_class->complete_connection = complete_connection;
|
||||
device_class->update_connection = update_connection;
|
||||
device_class->master_update_slave_connection = master_update_slave_connection;
|
||||
device_class->is_controller = TRUE;
|
||||
device_class->create_and_realize = create_and_realize;
|
||||
device_class->get_generic_capabilities = get_generic_capabilities;
|
||||
device_class->complete_connection = complete_connection;
|
||||
device_class->update_connection = update_connection;
|
||||
device_class->controller_update_port_connection = controller_update_port_connection;
|
||||
|
||||
device_class->act_stage1_prepare_also_for_external_or_assume = TRUE;
|
||||
device_class->act_stage1_prepare = act_stage1_prepare;
|
||||
|
|
|
|||
|
|
@ -3293,8 +3293,8 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason)
|
|||
GError *error = NULL;
|
||||
guint timeout;
|
||||
NMActRequest *request;
|
||||
NMActiveConnection *master_ac;
|
||||
NMDevice *master;
|
||||
NMActiveConnection *controller_ac;
|
||||
NMDevice *controller;
|
||||
|
||||
nm_clear_g_source(&priv->sup_timeout_id);
|
||||
nm_clear_g_source(&priv->link_timeout_id);
|
||||
|
|
@ -3374,10 +3374,10 @@ act_stage2_config(NMDevice *device, NMDeviceStateReason *out_failure_reason)
|
|||
|
||||
/* Tell the supplicant in which bridge the interface is */
|
||||
if ((request = nm_device_get_act_request(device))
|
||||
&& (master_ac = nm_active_connection_get_controller(NM_ACTIVE_CONNECTION(request)))
|
||||
&& (master = nm_active_connection_get_device(master_ac))
|
||||
&& nm_device_get_device_type(master) == NM_DEVICE_TYPE_BRIDGE) {
|
||||
nm_supplicant_interface_set_bridge(priv->sup_iface, nm_device_get_iface(master));
|
||||
&& (controller_ac = nm_active_connection_get_controller(NM_ACTIVE_CONNECTION(request)))
|
||||
&& (controller = nm_active_connection_get_device(controller_ac))
|
||||
&& nm_device_get_device_type(controller) == NM_DEVICE_TYPE_BRIDGE) {
|
||||
nm_supplicant_interface_set_bridge(priv->sup_iface, nm_device_get_iface(controller));
|
||||
} else
|
||||
nm_supplicant_interface_set_bridge(priv->sup_iface, NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -349,7 +349,7 @@ device_state_changed(NMActiveConnection *active,
|
|||
}
|
||||
|
||||
static void
|
||||
master_failed(NMActiveConnection *self)
|
||||
controller_failed(NMActiveConnection *self)
|
||||
{
|
||||
NMDevice *device;
|
||||
NMDeviceState device_state;
|
||||
|
|
@ -496,7 +496,7 @@ nm_act_request_class_init(NMActRequestClass *req_class)
|
|||
/* virtual methods */
|
||||
object_class->dispose = dispose;
|
||||
object_class->get_property = get_property;
|
||||
active_class->master_failed = master_failed;
|
||||
active_class->controller_failed = controller_failed;
|
||||
active_class->device_state_changed = device_state_changed;
|
||||
|
||||
/* properties */
|
||||
|
|
|
|||
|
|
@ -157,12 +157,12 @@ static NM_UTILS_FLAGS2STR_DEFINE(
|
|||
_state_flags_to_string,
|
||||
NMActivationStateFlags,
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_NONE, "none"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_IS_MASTER, "is-master"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_IS_SLAVE, "is-slave"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_IS_CONTROLLER, "is-controller"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_IS_PORT, "is-port"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_LAYER2_READY, "layer2-ready"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_IP4_READY, "ip4-ready"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_IP6_READY, "ip6-ready"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES, "master-has-slaves"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_CONTROLLER_HAS_PORTS, "controller-has-ports"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY,
|
||||
"lifetime-bound-to-profile-visibility"),
|
||||
NM_UTILS_FLAGS2STR(NM_ACTIVATION_STATE_FLAG_EXTERNAL, "external"), );
|
||||
|
|
@ -444,19 +444,19 @@ _set_applied_connection_take(NMActiveConnection *self, NMConnection *applied_con
|
|||
priv->applied_connection = applied_connection;
|
||||
nm_connection_clear_secrets(priv->applied_connection);
|
||||
|
||||
/* we determine whether the connection is a master/slave, based solely
|
||||
/* we determine whether the connection is a controller/port, based solely
|
||||
* on the connection properties itself. */
|
||||
s_con = nm_connection_get_setting_connection(priv->applied_connection);
|
||||
if (nm_setting_connection_get_controller(s_con))
|
||||
flags_val |= NM_ACTIVATION_STATE_FLAG_IS_SLAVE;
|
||||
flags_val |= NM_ACTIVATION_STATE_FLAG_IS_PORT;
|
||||
|
||||
if (_nm_connection_type_is_master(nm_setting_connection_get_connection_type(s_con)))
|
||||
flags_val |= NM_ACTIVATION_STATE_FLAG_IS_MASTER;
|
||||
if (_nm_connection_type_is_controller(nm_setting_connection_get_connection_type(s_con)))
|
||||
flags_val |= NM_ACTIVATION_STATE_FLAG_IS_CONTROLLER;
|
||||
|
||||
nm_active_connection_set_state_flags_full(self,
|
||||
flags_val,
|
||||
NM_ACTIVATION_STATE_FLAG_IS_MASTER
|
||||
| NM_ACTIVATION_STATE_FLAG_IS_SLAVE);
|
||||
NM_ACTIVATION_STATE_FLAG_IS_CONTROLLER
|
||||
| NM_ACTIVATION_STATE_FLAG_IS_PORT);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -642,12 +642,12 @@ device_state_changed(NMDevice *device,
|
|||
}
|
||||
|
||||
static void
|
||||
device_master_changed(GObject *object, GParamSpec *pspec, gpointer user_data)
|
||||
device_controller_changed(GObject *object, GParamSpec *pspec, gpointer user_data)
|
||||
{
|
||||
NMDevice *device = NM_DEVICE(object);
|
||||
NMActiveConnection *self = NM_ACTIVE_CONNECTION(user_data);
|
||||
NMActiveConnection *master;
|
||||
NMActiveConnectionState master_state;
|
||||
NMActiveConnection *controller;
|
||||
NMActiveConnectionState controller_state;
|
||||
|
||||
if (NM_ACTIVE_CONNECTION(nm_device_get_act_request(device)) != self)
|
||||
return;
|
||||
|
|
@ -655,14 +655,14 @@ device_master_changed(GObject *object, GParamSpec *pspec, gpointer user_data)
|
|||
return;
|
||||
if (!nm_active_connection_get_controller(self))
|
||||
return;
|
||||
g_signal_handlers_disconnect_by_func(device, G_CALLBACK(device_master_changed), self);
|
||||
g_signal_handlers_disconnect_by_func(device, G_CALLBACK(device_controller_changed), self);
|
||||
|
||||
master = nm_active_connection_get_controller(self);
|
||||
master_state = nm_active_connection_get_state(master);
|
||||
if (master_state >= NM_ACTIVE_CONNECTION_STATE_DEACTIVATING) {
|
||||
/* Master failed before attaching the slave */
|
||||
if (NM_ACTIVE_CONNECTION_GET_CLASS(self)->master_failed)
|
||||
NM_ACTIVE_CONNECTION_GET_CLASS(self)->master_failed(self);
|
||||
controller = nm_active_connection_get_controller(self);
|
||||
controller_state = nm_active_connection_get_state(controller);
|
||||
if (controller_state >= NM_ACTIVE_CONNECTION_STATE_DEACTIVATING) {
|
||||
/* Controller failed before attaching the port */
|
||||
if (NM_ACTIVE_CONNECTION_GET_CLASS(self)->controller_failed)
|
||||
NM_ACTIVE_CONNECTION_GET_CLASS(self)->controller_failed(self);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -704,7 +704,7 @@ nm_active_connection_set_device(NMActiveConnection *self, NMDevice *device)
|
|||
_device_cleanup(self);
|
||||
|
||||
if (device) {
|
||||
/* Device obviously can't be its own master */
|
||||
/* Device obviously can't be its own controller */
|
||||
g_return_val_if_fail(!priv->controller
|
||||
|| device != nm_active_connection_get_device(priv->controller),
|
||||
FALSE);
|
||||
|
|
@ -714,7 +714,7 @@ nm_active_connection_set_device(NMActiveConnection *self, NMDevice *device)
|
|||
g_signal_connect(device, NM_DEVICE_STATE_CHANGED, G_CALLBACK(device_state_changed), self);
|
||||
g_signal_connect(device,
|
||||
"notify::" NM_DEVICE_CONTROLLER,
|
||||
G_CALLBACK(device_master_changed),
|
||||
G_CALLBACK(device_controller_changed),
|
||||
self);
|
||||
g_signal_connect(device,
|
||||
"notify::" NM_DEVICE_METERED,
|
||||
|
|
@ -777,8 +777,8 @@ check_controller_ready(NMActiveConnection *self)
|
|||
gboolean signalling = FALSE;
|
||||
|
||||
/* ActiveConnetions don't enter the ACTIVATING state until they have a
|
||||
* NMDevice in PREPARE or higher states, so the master active connection's
|
||||
* device will be ready to accept slaves when the master is in ACTIVATING
|
||||
* NMDevice in PREPARE or higher states, so the controller active connection's
|
||||
* device will be ready to accept ports when the controller is in ACTIVATING
|
||||
* or higher states.
|
||||
*/
|
||||
if (!priv->controller_ready && priv->controller
|
||||
|
|
@ -812,18 +812,18 @@ check_controller_ready(NMActiveConnection *self)
|
|||
}
|
||||
|
||||
static void
|
||||
master_state_cb(NMActiveConnection *master, GParamSpec *pspec, gpointer user_data)
|
||||
controller_state_cb(NMActiveConnection *controller, GParamSpec *pspec, gpointer user_data)
|
||||
{
|
||||
NMActiveConnection *self = NM_ACTIVE_CONNECTION(user_data);
|
||||
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE(self);
|
||||
NMActiveConnectionState master_state = nm_active_connection_get_state(master);
|
||||
NMActiveConnection *self = NM_ACTIVE_CONNECTION(user_data);
|
||||
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE(self);
|
||||
NMActiveConnectionState controller_state = nm_active_connection_get_state(controller);
|
||||
|
||||
check_controller_ready(self);
|
||||
|
||||
if (master_state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATING && !priv->controller_ready) {
|
||||
/* Master disconnected before the slave was added */
|
||||
if (NM_ACTIVE_CONNECTION_GET_CLASS(self)->master_failed)
|
||||
NM_ACTIVE_CONNECTION_GET_CLASS(self)->master_failed(self);
|
||||
if (controller_state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATING && !priv->controller_ready) {
|
||||
/* Controller disconnected before the port was added */
|
||||
if (NM_ACTIVE_CONNECTION_GET_CLASS(self)->controller_failed)
|
||||
NM_ACTIVE_CONNECTION_GET_CLASS(self)->controller_failed(self);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -880,7 +880,7 @@ nm_active_connection_set_controller(NMActiveConnection *self, NMActiveConnection
|
|||
}
|
||||
|
||||
if (priv->device) {
|
||||
/* Note, the master ActiveConnection may not yet have a device */
|
||||
/* Note, the controller ActiveConnection may not yet have a device */
|
||||
g_return_if_fail(priv->device != nm_active_connection_get_device(controller));
|
||||
}
|
||||
|
||||
|
|
@ -895,7 +895,7 @@ nm_active_connection_set_controller(NMActiveConnection *self, NMActiveConnection
|
|||
|
||||
g_signal_connect(priv->controller,
|
||||
"notify::" NM_ACTIVE_CONNECTION_STATE,
|
||||
G_CALLBACK(master_state_cb),
|
||||
G_CALLBACK(controller_state_cb),
|
||||
self);
|
||||
|
||||
check_controller_ready(self);
|
||||
|
|
@ -1323,7 +1323,9 @@ _device_cleanup(NMActiveConnection *self)
|
|||
|
||||
if (priv->device) {
|
||||
g_signal_handlers_disconnect_by_func(priv->device, G_CALLBACK(device_state_changed), self);
|
||||
g_signal_handlers_disconnect_by_func(priv->device, G_CALLBACK(device_master_changed), self);
|
||||
g_signal_handlers_disconnect_by_func(priv->device,
|
||||
G_CALLBACK(device_controller_changed),
|
||||
self);
|
||||
g_signal_handlers_disconnect_by_func(priv->device,
|
||||
G_CALLBACK(device_metered_changed),
|
||||
self);
|
||||
|
|
@ -1345,7 +1347,7 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
|
|||
NMActiveConnection *self = NM_ACTIVE_CONNECTION(object);
|
||||
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE(self);
|
||||
char **strv;
|
||||
NMDevice *master_device = NULL;
|
||||
NMDevice *controller_device = NULL;
|
||||
|
||||
switch (prop_id) {
|
||||
/* note that while priv->settings_connection.obj might not be set initially,
|
||||
|
|
@ -1418,8 +1420,8 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
|
|||
case PROP_CONTROLLER:
|
||||
case PROP_MASTER:
|
||||
if (priv->controller)
|
||||
master_device = nm_active_connection_get_device(priv->controller);
|
||||
nm_dbus_utils_g_value_set_object_path(value, master_device);
|
||||
controller_device = nm_active_connection_get_device(priv->controller);
|
||||
nm_dbus_utils_g_value_set_object_path(value, controller_device);
|
||||
break;
|
||||
case PROP_INT_SUBJECT:
|
||||
g_value_set_object(value, priv->subject);
|
||||
|
|
@ -1600,7 +1602,9 @@ dispose(GObject *object)
|
|||
_device_cleanup(self);
|
||||
|
||||
if (priv->controller) {
|
||||
g_signal_handlers_disconnect_by_func(priv->controller, G_CALLBACK(master_state_cb), self);
|
||||
g_signal_handlers_disconnect_by_func(priv->controller,
|
||||
G_CALLBACK(controller_state_cb),
|
||||
self);
|
||||
}
|
||||
if (priv->controller_dev) {
|
||||
g_signal_handlers_disconnect_by_func(priv->controller_dev,
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ typedef struct {
|
|||
NMDeviceState new_state,
|
||||
NMDeviceState old_state,
|
||||
NMDeviceStateReason reason);
|
||||
void (*master_failed)(NMActiveConnection *connection);
|
||||
void (*controller_failed)(NMActiveConnection *connection);
|
||||
|
||||
void (*device_changed)(NMActiveConnection *connection,
|
||||
NMDevice *new_device,
|
||||
|
|
|
|||
|
|
@ -696,7 +696,7 @@ _reconfigure_check(NMBondManager *self, gboolean reapply)
|
|||
/* Find all the connected ports that are IFF_RUNNING. */
|
||||
pl_links_head_entry = nm_platform_lookup_obj_type(self->platform, NMP_OBJECT_TYPE_LINK);
|
||||
nmp_cache_iter_for_each_link (&pliter, pl_links_head_entry, &plink_port) {
|
||||
if (plink_port->master != self->ifindex)
|
||||
if (plink_port->controller != self->ifindex)
|
||||
continue;
|
||||
if (!NM_FLAGS_HAS(plink_port->n_ifi_flags, IFF_RUNNING))
|
||||
continue;
|
||||
|
|
@ -814,7 +814,7 @@ _link_changed_cb(NMPlatform *platform,
|
|||
if (ifindex == self->ifindex)
|
||||
goto schedule;
|
||||
|
||||
if (plink->master == self->ifindex)
|
||||
if (plink->controller == self->ifindex)
|
||||
goto schedule;
|
||||
|
||||
if (g_hash_table_contains(self->previous_ifindexes, GINT_TO_POINTER(ifindex)))
|
||||
|
|
|
|||
|
|
@ -383,8 +383,8 @@ nm_config_data_get_iwd_config_path(const NMConfigData *self)
|
|||
|
||||
gboolean
|
||||
nm_config_data_get_ignore_carrier_for_port(const NMConfigData *self,
|
||||
const char *master,
|
||||
const char *slave_type)
|
||||
const char *controller,
|
||||
const char *port_type)
|
||||
{
|
||||
const char *value;
|
||||
gboolean has_match;
|
||||
|
|
@ -393,15 +393,15 @@ nm_config_data_get_ignore_carrier_for_port(const NMConfigData *self,
|
|||
|
||||
g_return_val_if_fail(NM_IS_CONFIG_DATA(self), FALSE);
|
||||
|
||||
if (!master || !slave_type)
|
||||
if (!controller || !port_type)
|
||||
goto out_default;
|
||||
|
||||
if (!nm_utils_ifname_valid_kernel(master, NULL))
|
||||
if (!nm_utils_ifname_valid_kernel(controller, NULL))
|
||||
goto out_default;
|
||||
|
||||
match_data = (NMMatchSpecDeviceData){
|
||||
.interface_name = master,
|
||||
.device_type = slave_type,
|
||||
.interface_name = controller,
|
||||
.device_type = port_type,
|
||||
};
|
||||
|
||||
value = _config_data_get_device_config(self,
|
||||
|
|
@ -422,7 +422,7 @@ nm_config_data_get_ignore_carrier_for_port(const NMConfigData *self,
|
|||
return m;
|
||||
|
||||
out_default:
|
||||
/* if ignore-carrier is not explicitly or detected for the master, then we assume it's
|
||||
/* if ignore-carrier is not explicitly or detected for the controller, then we assume it's
|
||||
* enabled. This is in line with nm_config_data_get_ignore_carrier_by_device(), where
|
||||
* ignore-carrier is enabled based on nm_device_ignore_carrier_by_default().
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -188,8 +188,8 @@ const char *nm_config_data_get_rc_manager(const NMConfigData *self);
|
|||
gboolean nm_config_data_get_systemd_resolved(const NMConfigData *self);
|
||||
|
||||
gboolean nm_config_data_get_ignore_carrier_for_port(const NMConfigData *self,
|
||||
const char *master,
|
||||
const char *slave_type);
|
||||
const char *controller,
|
||||
const char *port_type);
|
||||
|
||||
gboolean nm_config_data_get_ignore_carrier_by_device(const NMConfigData *self, NMDevice *device);
|
||||
gboolean nm_config_data_get_assume_ipv6ll_only(const NMConfigData *self, NMDevice *device);
|
||||
|
|
|
|||
|
|
@ -3082,8 +3082,8 @@ nm_l3_config_data_new_from_platform(NMDedupMultiIndex *multi_idx,
|
|||
nm_assert(NM_IS_PLATFORM(platform));
|
||||
nm_assert(ifindex > 0);
|
||||
|
||||
/* Slaves have no IP configuration */
|
||||
if (nm_platform_link_get_master(platform, ifindex) > 0)
|
||||
/* Ports have no IP configuration */
|
||||
if (nm_platform_link_get_controller(platform, ifindex) > 0)
|
||||
return NULL;
|
||||
|
||||
self = nm_l3_config_data_new(multi_idx, ifindex, NM_IP_CONFIG_SOURCE_KERNEL);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1844,9 +1844,9 @@ unblock_autoconnect_for_children(NMPolicy *self,
|
|||
|
||||
static void
|
||||
unblock_autoconnect_for_ports(NMPolicy *self,
|
||||
const char *master_device,
|
||||
const char *master_uuid_settings,
|
||||
const char *master_uuid_applied,
|
||||
const char *controller_device,
|
||||
const char *controller_uuid_settings,
|
||||
const char *controller_uuid_applied,
|
||||
gboolean reset_devcon_autoconnect)
|
||||
{
|
||||
NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE(self);
|
||||
|
|
@ -1857,11 +1857,11 @@ unblock_autoconnect_for_ports(NMPolicy *self,
|
|||
_LOGT(LOGD_CORE,
|
||||
"block-autoconnect: unblocking port profiles for controller ifname=%s%s%s, uuid=%s%s%s"
|
||||
"%s%s%s",
|
||||
NM_PRINT_FMT_QUOTE_STRING(master_device),
|
||||
NM_PRINT_FMT_QUOTE_STRING(master_uuid_settings),
|
||||
NM_PRINT_FMT_QUOTED(master_uuid_applied,
|
||||
NM_PRINT_FMT_QUOTE_STRING(controller_device),
|
||||
NM_PRINT_FMT_QUOTE_STRING(controller_uuid_settings),
|
||||
NM_PRINT_FMT_QUOTED(controller_uuid_applied,
|
||||
", applied-uuid=\"",
|
||||
master_uuid_applied,
|
||||
controller_uuid_applied,
|
||||
"\"",
|
||||
""));
|
||||
|
||||
|
|
@ -1869,16 +1869,18 @@ unblock_autoconnect_for_ports(NMPolicy *self,
|
|||
connections = nm_settings_get_connections(priv->settings, NULL);
|
||||
for (i = 0; connections[i]; i++) {
|
||||
NMSettingsConnection *sett_conn = connections[i];
|
||||
NMSettingConnection *s_slave_con;
|
||||
const char *slave_master;
|
||||
NMSettingConnection *s_port_con;
|
||||
const char *port_controller;
|
||||
|
||||
s_slave_con =
|
||||
nm_settings_connection_get_setting(sett_conn, NM_META_SETTING_TYPE_CONNECTION);
|
||||
slave_master = nm_setting_connection_get_controller(s_slave_con);
|
||||
if (!slave_master)
|
||||
s_port_con = nm_settings_connection_get_setting(sett_conn, NM_META_SETTING_TYPE_CONNECTION);
|
||||
port_controller = nm_setting_connection_get_controller(s_port_con);
|
||||
if (!port_controller)
|
||||
continue;
|
||||
|
||||
if (!NM_IN_STRSET(slave_master, master_device, master_uuid_applied, master_uuid_settings))
|
||||
if (!NM_IN_STRSET(port_controller,
|
||||
controller_device,
|
||||
controller_uuid_applied,
|
||||
controller_uuid_settings))
|
||||
continue;
|
||||
|
||||
if (reset_devcon_autoconnect) {
|
||||
|
|
@ -1905,8 +1907,8 @@ unblock_autoconnect_for_ports(NMPolicy *self,
|
|||
static void
|
||||
unblock_autoconnect_for_ports_for_sett_conn(NMPolicy *self, NMSettingsConnection *sett_conn)
|
||||
{
|
||||
const char *master_device;
|
||||
const char *master_uuid_settings;
|
||||
const char *controller_device;
|
||||
const char *controller_uuid_settings;
|
||||
NMSettingConnection *s_con;
|
||||
|
||||
nm_assert(NM_IS_POLICY(self));
|
||||
|
|
@ -1916,10 +1918,10 @@ unblock_autoconnect_for_ports_for_sett_conn(NMPolicy *self, NMSettingsConnection
|
|||
|
||||
nm_assert(NM_IS_SETTING_CONNECTION(s_con));
|
||||
|
||||
master_uuid_settings = nm_setting_connection_get_uuid(s_con);
|
||||
master_device = nm_setting_connection_get_interface_name(s_con);
|
||||
controller_uuid_settings = nm_setting_connection_get_uuid(s_con);
|
||||
controller_device = nm_setting_connection_get_interface_name(s_con);
|
||||
|
||||
unblock_autoconnect_for_ports(self, master_device, master_uuid_settings, NULL, TRUE);
|
||||
unblock_autoconnect_for_ports(self, controller_device, controller_uuid_settings, NULL, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ typedef enum {
|
|||
NM_ACTIVATION_REASON_EXTERNAL,
|
||||
NM_ACTIVATION_REASON_ASSUME,
|
||||
NM_ACTIVATION_REASON_AUTOCONNECT,
|
||||
NM_ACTIVATION_REASON_AUTOCONNECT_SLAVES,
|
||||
NM_ACTIVATION_REASON_AUTOCONNECT_PORTS,
|
||||
NM_ACTIVATION_REASON_USER_REQUEST,
|
||||
} NMActivationReason;
|
||||
|
||||
|
|
|
|||
|
|
@ -199,14 +199,14 @@ link_add_prepare(NMPlatform *platform, NMFakePlatformLink *device, NMPObject *ob
|
|||
if (NM_FLAGS_HAS(obj_tmp->link.n_ifi_flags, IFF_UP)) {
|
||||
NMPLookup lookup;
|
||||
NMDedupMultiIter iter;
|
||||
const NMPObject *slave_candidate = NULL;
|
||||
const NMPObject *port_candidate = NULL;
|
||||
|
||||
nmp_cache_iter_for_each (
|
||||
&iter,
|
||||
nmp_cache_lookup(nm_platform_get_cache(platform),
|
||||
nmp_lookup_init_obj_type(&lookup, NMP_OBJECT_TYPE_LINK)),
|
||||
&slave_candidate) {
|
||||
if (nmp_cache_link_connected_for_slave(obj_tmp->link.ifindex, slave_candidate)) {
|
||||
&port_candidate) {
|
||||
if (nmp_cache_link_connected_for_port(obj_tmp->link.ifindex, port_candidate)) {
|
||||
connected = TRUE;
|
||||
break;
|
||||
}
|
||||
|
|
@ -589,11 +589,11 @@ link_changed(NMPlatform *platform,
|
|||
ip6_address_delete(platform, device->obj->link.ifindex, device->ip6_lladdr, 64);
|
||||
}
|
||||
|
||||
if (device->obj->link.master) {
|
||||
NMFakePlatformLink *master;
|
||||
if (device->obj->link.controller) {
|
||||
NMFakePlatformLink *controller;
|
||||
|
||||
master = link_get(platform, device->obj->link.master);
|
||||
link_set_obj(platform, master, NULL);
|
||||
controller = link_get(platform, device->obj->link.controller);
|
||||
link_set_obj(platform, controller, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -736,20 +736,20 @@ link_change(NMPlatform *platform,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
link_enslave(NMPlatform *platform, int master, int slave)
|
||||
link_attach_port(NMPlatform *platform, int controller, int port)
|
||||
{
|
||||
NMFakePlatformLink *device = link_get(platform, slave);
|
||||
NMFakePlatformLink *master_device = link_get(platform, master);
|
||||
NMFakePlatformLink *device = link_get(platform, port);
|
||||
NMFakePlatformLink *controller_device = link_get(platform, controller);
|
||||
|
||||
g_return_val_if_fail(device, FALSE);
|
||||
g_return_val_if_fail(master_device, FALSE);
|
||||
g_return_val_if_fail(controller_device, FALSE);
|
||||
|
||||
if (device->obj->link.master != master) {
|
||||
if (device->obj->link.controller != controller) {
|
||||
nm_auto_nmpobj NMPObject *obj_tmp = NULL;
|
||||
|
||||
obj_tmp = nmp_object_clone(device->obj, FALSE);
|
||||
obj_tmp->link.master = master;
|
||||
if (NM_IN_SET(master_device->obj->link.type, NM_LINK_TYPE_BOND, NM_LINK_TYPE_TEAM))
|
||||
obj_tmp = nmp_object_clone(device->obj, FALSE);
|
||||
obj_tmp->link.controller = controller;
|
||||
if (NM_IN_SET(controller_device->obj->link.type, NM_LINK_TYPE_BOND, NM_LINK_TYPE_TEAM))
|
||||
obj_tmp->link.n_ifi_flags = NM_FLAGS_SET(device->obj->link.n_ifi_flags, IFF_UP);
|
||||
link_set_obj(platform, device, obj_tmp);
|
||||
}
|
||||
|
|
@ -758,21 +758,21 @@ link_enslave(NMPlatform *platform, int master, int slave)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
link_release(NMPlatform *platform, int master_idx, int slave_idx)
|
||||
link_release_port(NMPlatform *platform, int controller_idx, int port_idx)
|
||||
{
|
||||
NMFakePlatformLink *master = link_get(platform, master_idx);
|
||||
NMFakePlatformLink *slave = link_get(platform, slave_idx);
|
||||
nm_auto_nmpobj NMPObject *obj_tmp = NULL;
|
||||
NMFakePlatformLink *controller = link_get(platform, controller_idx);
|
||||
NMFakePlatformLink *port = link_get(platform, port_idx);
|
||||
nm_auto_nmpobj NMPObject *obj_tmp = NULL;
|
||||
|
||||
g_return_val_if_fail(master, FALSE);
|
||||
g_return_val_if_fail(slave, FALSE);
|
||||
g_return_val_if_fail(controller, FALSE);
|
||||
g_return_val_if_fail(port, FALSE);
|
||||
|
||||
if (slave->obj->link.master != master->obj->link.ifindex)
|
||||
if (port->obj->link.controller != controller->obj->link.ifindex)
|
||||
return FALSE;
|
||||
|
||||
obj_tmp = nmp_object_clone(slave->obj, FALSE);
|
||||
obj_tmp->link.master = 0;
|
||||
link_set_obj(platform, slave, obj_tmp);
|
||||
obj_tmp = nmp_object_clone(port->obj, FALSE);
|
||||
obj_tmp->link.controller = 0;
|
||||
link_set_obj(platform, port, obj_tmp);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -1438,8 +1438,8 @@ nm_fake_platform_class_init(NMFakePlatformClass *klass)
|
|||
platform_class->link_supports_vlans = link_supports_vlans;
|
||||
platform_class->link_supports_sriov = link_supports_sriov;
|
||||
|
||||
platform_class->link_enslave = link_enslave;
|
||||
platform_class->link_release = link_release;
|
||||
platform_class->link_attach_port = link_attach_port;
|
||||
platform_class->link_release_port = link_release_port;
|
||||
|
||||
platform_class->link_vlan_change = link_vlan_change;
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
#define DUMMY_TYPEDESC "dummy"
|
||||
#define BOGUS_NAME "nm-bogus-device"
|
||||
#define BOGUS_IFINDEX INT_MAX
|
||||
#define SLAVE_NAME "nm-test-slave"
|
||||
#define PORT_NAME "nm-test-port"
|
||||
#define PARENT_NAME "nm-test-parent"
|
||||
#define VLAN_ID 4077
|
||||
#define VLAN_FLAGS 0
|
||||
|
|
@ -228,7 +228,7 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
SignalData *link_added = add_signal_ifname(NM_PLATFORM_SIGNAL_LINK_CHANGED,
|
||||
NM_PLATFORM_SIGNAL_ADDED,
|
||||
link_callback,
|
||||
SLAVE_NAME);
|
||||
PORT_NAME);
|
||||
SignalData *link_changed, *link_removed;
|
||||
NMLinkType controller_type = nm_platform_link_get_type(NM_PLATFORM_GET, controller);
|
||||
gboolean test_link_changed_signal_arg1;
|
||||
|
|
@ -236,8 +236,8 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
|
||||
g_assert(NM_IN_SET(controller_type, NM_LINK_TYPE_TEAM, NM_LINK_TYPE_BOND, NM_LINK_TYPE_BRIDGE));
|
||||
|
||||
g_assert(software_add(port_type, SLAVE_NAME));
|
||||
ifindex_port = nm_platform_link_get_ifindex(NM_PLATFORM_GET, SLAVE_NAME);
|
||||
g_assert(software_add(port_type, PORT_NAME));
|
||||
ifindex_port = nm_platform_link_get_ifindex(NM_PLATFORM_GET, PORT_NAME);
|
||||
g_assert(ifindex_port > 0);
|
||||
link_changed = add_signal_ifindex(NM_PLATFORM_SIGNAL_LINK_CHANGED,
|
||||
NM_PLATFORM_SIGNAL_CHANGED,
|
||||
|
|
@ -260,8 +260,8 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
|
||||
/* Attach port */
|
||||
link_changed->ifindex = ifindex_port;
|
||||
g_assert(nm_platform_link_enslave(NM_PLATFORM_GET, controller, ifindex_port));
|
||||
g_assert_cmpint(nm_platform_link_get_master(NM_PLATFORM_GET, ifindex_port), ==, controller);
|
||||
g_assert(nm_platform_link_attach_port(NM_PLATFORM_GET, controller, ifindex_port));
|
||||
g_assert_cmpint(nm_platform_link_get_controller(NM_PLATFORM_GET, ifindex_port), ==, controller);
|
||||
|
||||
accept_signals(link_changed, 1, 3);
|
||||
accept_signals(controller_changed, 0, 2);
|
||||
|
|
@ -279,7 +279,7 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
const NMPlatformLink *link;
|
||||
const NMPlatformLnkBond *lnk;
|
||||
|
||||
link = nmtstp_link_get_typed(NM_PLATFORM_GET, 0, SLAVE_NAME, NM_LINK_TYPE_DUMMY);
|
||||
link = nmtstp_link_get_typed(NM_PLATFORM_GET, 0, PORT_NAME, NM_LINK_TYPE_DUMMY);
|
||||
g_assert(link);
|
||||
|
||||
lnk = nm_platform_link_get_lnk_bond(NM_PLATFORM_GET, controller, NULL);
|
||||
|
|
@ -298,7 +298,7 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
g_assert(nm_platform_link_change(NM_PLATFORM_GET, ifindex_port, NULL, &bond_port, NULL, 0));
|
||||
accept_signals(link_changed, 1, 3);
|
||||
|
||||
link = nmtstp_link_get(NM_PLATFORM_GET, ifindex_port, SLAVE_NAME);
|
||||
link = nmtstp_link_get(NM_PLATFORM_GET, ifindex_port, PORT_NAME);
|
||||
g_assert(link);
|
||||
g_assert_cmpint(link->port_data.bond.queue_id, ==, 5);
|
||||
g_assert(link->port_data.bond.prio_has || link->port_data.bond.prio == 0);
|
||||
|
|
@ -309,7 +309,7 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
const NMPlatformLink *link;
|
||||
const NMPlatformLnkBridge *lnk;
|
||||
|
||||
link = nmtstp_link_get_typed(NM_PLATFORM_GET, 0, SLAVE_NAME, NM_LINK_TYPE_DUMMY);
|
||||
link = nmtstp_link_get_typed(NM_PLATFORM_GET, 0, PORT_NAME, NM_LINK_TYPE_DUMMY);
|
||||
g_assert(link);
|
||||
|
||||
lnk = nm_platform_link_get_lnk_bridge(NM_PLATFORM_GET, controller, NULL);
|
||||
|
|
@ -329,7 +329,7 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
0));
|
||||
accept_signals(link_changed, 1, 3);
|
||||
|
||||
link = nmtstp_link_get(NM_PLATFORM_GET, ifindex_port, SLAVE_NAME);
|
||||
link = nmtstp_link_get(NM_PLATFORM_GET, ifindex_port, PORT_NAME);
|
||||
g_assert(link);
|
||||
g_assert_cmpint(link->port_data.bridge.path_cost, ==, 100);
|
||||
g_assert_cmpint(link->port_data.bridge.priority, ==, 614);
|
||||
|
|
@ -415,7 +415,7 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
* Gracefully succeed if already attached port.
|
||||
*/
|
||||
ensure_no_signal(link_changed);
|
||||
g_assert(nm_platform_link_enslave(NM_PLATFORM_GET, controller, ifindex_port));
|
||||
g_assert(nm_platform_link_attach_port(NM_PLATFORM_GET, controller, ifindex_port));
|
||||
accept_signals(link_changed, 0, 2);
|
||||
accept_signals(controller_changed, 0, 2);
|
||||
|
||||
|
|
@ -423,8 +423,8 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
ensure_no_signal(link_added);
|
||||
ensure_no_signal(link_changed);
|
||||
ensure_no_signal(link_removed);
|
||||
g_assert(nm_platform_link_release(NM_PLATFORM_GET, controller, ifindex_port));
|
||||
g_assert_cmpint(nm_platform_link_get_master(NM_PLATFORM_GET, ifindex_port), ==, 0);
|
||||
g_assert(nm_platform_link_release_port(NM_PLATFORM_GET, controller, ifindex_port));
|
||||
g_assert_cmpint(nm_platform_link_get_controller(NM_PLATFORM_GET, ifindex_port), ==, 0);
|
||||
if (link_changed->received_count > 0) {
|
||||
accept_signals(link_added, 0, 1);
|
||||
accept_signals(link_changed, 1, 5);
|
||||
|
|
@ -442,7 +442,7 @@ test_port(int controller, int port_type, SignalData *controller_changed)
|
|||
|
||||
/* Release again */
|
||||
ensure_no_signal(link_changed);
|
||||
g_assert(!nm_platform_link_release(NM_PLATFORM_GET, controller, ifindex_port));
|
||||
g_assert(!nm_platform_link_release_port(NM_PLATFORM_GET, controller, ifindex_port));
|
||||
|
||||
ensure_no_signal(controller_changed);
|
||||
|
||||
|
|
@ -517,28 +517,29 @@ test_software(NMLinkType link_type, const char *link_typename)
|
|||
g_assert(nm_platform_link_uses_arp(NM_PLATFORM_GET, ifindex));
|
||||
accept_signal(link_changed);
|
||||
|
||||
/* Set master option */
|
||||
/* Set controller option */
|
||||
if (nmtstp_is_root_test()) {
|
||||
switch (link_type) {
|
||||
case NM_LINK_TYPE_BRIDGE:
|
||||
if (nmtstp_is_sysfs_writable()) {
|
||||
g_assert(nm_platform_sysctl_master_set_option(NM_PLATFORM_GET,
|
||||
ifindex,
|
||||
"forward_delay",
|
||||
"628"));
|
||||
value =
|
||||
nm_platform_sysctl_master_get_option(NM_PLATFORM_GET, ifindex, "forward_delay");
|
||||
g_assert(nm_platform_sysctl_controller_set_option(NM_PLATFORM_GET,
|
||||
ifindex,
|
||||
"forward_delay",
|
||||
"628"));
|
||||
value = nm_platform_sysctl_controller_get_option(NM_PLATFORM_GET,
|
||||
ifindex,
|
||||
"forward_delay");
|
||||
g_assert_cmpstr(value, ==, "628");
|
||||
g_free(value);
|
||||
}
|
||||
break;
|
||||
case NM_LINK_TYPE_BOND:
|
||||
if (nmtstp_is_sysfs_writable()) {
|
||||
g_assert(nm_platform_sysctl_master_set_option(NM_PLATFORM_GET,
|
||||
ifindex,
|
||||
"mode",
|
||||
"active-backup"));
|
||||
value = nm_platform_sysctl_master_get_option(NM_PLATFORM_GET, ifindex, "mode");
|
||||
g_assert(nm_platform_sysctl_controller_set_option(NM_PLATFORM_GET,
|
||||
ifindex,
|
||||
"mode",
|
||||
"active-backup"));
|
||||
value = nm_platform_sysctl_controller_get_option(NM_PLATFORM_GET, ifindex, "mode");
|
||||
/* When reading back, the output looks slightly different. */
|
||||
g_assert(g_str_has_prefix(value, "active-backup"));
|
||||
g_free(value);
|
||||
|
|
@ -549,7 +550,7 @@ test_software(NMLinkType link_type, const char *link_typename)
|
|||
}
|
||||
}
|
||||
|
||||
/* Enslave and release */
|
||||
/* Attach port and release */
|
||||
switch (link_type) {
|
||||
case NM_LINK_TYPE_BRIDGE:
|
||||
case NM_LINK_TYPE_BOND:
|
||||
|
|
@ -2908,7 +2909,7 @@ test_nl_bugs_spuroius_newlink(void)
|
|||
pllink = nm_platform_link_get(NM_PLATFORM_GET, ifindex_dummy0);
|
||||
g_assert(pllink);
|
||||
g_assert(!nm_platform_link_get_permanent_address(NM_PLATFORM_GET, pllink, &hw_perm_addr));
|
||||
if (pllink->master == ifindex_bond0)
|
||||
if (pllink->controller == ifindex_bond0)
|
||||
break;
|
||||
});
|
||||
|
||||
|
|
@ -2965,7 +2966,7 @@ test_nl_bugs_spuroius_dellink(void)
|
|||
pllink = nm_platform_link_get(NM_PLATFORM_GET, ifindex_dummy0);
|
||||
g_assert(pllink);
|
||||
g_assert(!nm_platform_link_get_permanent_address(NM_PLATFORM_GET, pllink, &hw_perm_addr));
|
||||
if (pllink->master == ifindex_bridge0)
|
||||
if (pllink->controller == ifindex_bridge0)
|
||||
break;
|
||||
});
|
||||
|
||||
|
|
@ -4064,10 +4065,10 @@ void
|
|||
_nmtstp_setup_tests(void)
|
||||
{
|
||||
nmtstp_link_delete(NM_PLATFORM_GET, -1, -1, DEVICE_NAME, FALSE);
|
||||
nmtstp_link_delete(NM_PLATFORM_GET, -1, -1, SLAVE_NAME, FALSE);
|
||||
nmtstp_link_delete(NM_PLATFORM_GET, -1, -1, PORT_NAME, FALSE);
|
||||
nmtstp_link_delete(NM_PLATFORM_GET, -1, -1, PARENT_NAME, FALSE);
|
||||
g_assert(!nm_platform_link_get_by_ifname(NM_PLATFORM_GET, DEVICE_NAME));
|
||||
g_assert(!nm_platform_link_get_by_ifname(NM_PLATFORM_GET, SLAVE_NAME));
|
||||
g_assert(!nm_platform_link_get_by_ifname(NM_PLATFORM_GET, PORT_NAME));
|
||||
g_assert(!nm_platform_link_get_by_ifname(NM_PLATFORM_GET, PARENT_NAME));
|
||||
|
||||
g_test_add_func("/link/bogus", test_bogus);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ typedef enum {
|
|||
NM_PPP_STATUS_TERMINATE = 9,
|
||||
NM_PPP_STATUS_DISCONNECT = 10,
|
||||
NM_PPP_STATUS_HOLDOFF = 11,
|
||||
NM_PPP_STATUS_MASTER = 12,
|
||||
NM_PPP_STATUS_CONTROLLER = 12,
|
||||
|
||||
/* these states are internal and not announced by the pppd plugin. */
|
||||
NM_PPP_STATUS_INTERN_UNKNOWN = 20,
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ G_STATIC_ASSERT((gint64) NM_PPP_STATUS_RUNNING == PHASE_RUNNING);
|
|||
G_STATIC_ASSERT((gint64) NM_PPP_STATUS_TERMINATE == PHASE_TERMINATE);
|
||||
G_STATIC_ASSERT((gint64) NM_PPP_STATUS_DISCONNECT == PHASE_DISCONNECT);
|
||||
G_STATIC_ASSERT((gint64) NM_PPP_STATUS_HOLDOFF == PHASE_HOLDOFF);
|
||||
G_STATIC_ASSERT((gint64) NM_PPP_STATUS_MASTER == PHASE_MASTER);
|
||||
G_STATIC_ASSERT((gint64) NM_PPP_STATUS_CONTROLLER == PHASE_MASTER);
|
||||
|
||||
G_STATIC_ASSERT(NM_PPPD_COMPAT_MAXNAMELEN == MAXNAMELEN);
|
||||
G_STATIC_ASSERT(NM_PPPD_COMPAT_MAXSECRETLEN == MAXSECRETLEN);
|
||||
|
|
|
|||
|
|
@ -73,8 +73,8 @@ nm_phasechange(int arg)
|
|||
case NM_PPP_STATUS_HOLDOFF:
|
||||
ppp_phase = "holdoff";
|
||||
break;
|
||||
case NM_PPP_STATUS_MASTER:
|
||||
ppp_phase = "master";
|
||||
case NM_PPP_STATUS_CONTROLLER:
|
||||
ppp_phase = "controller";
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -286,21 +286,21 @@ _cert_set_from_ifcfg(gpointer setting,
|
|||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
check_if_bond_slave(shvarFile *ifcfg, NMSettingConnection *s_con)
|
||||
check_if_bond_port(shvarFile *ifcfg, NMSettingConnection *s_con)
|
||||
{
|
||||
gs_free char *value = NULL;
|
||||
const char *v;
|
||||
const char *master;
|
||||
const char *controller;
|
||||
|
||||
v = svGetValueStr(ifcfg, "MASTER_UUID", &value);
|
||||
if (!v)
|
||||
v = svGetValueStr(ifcfg, "MASTER", &value);
|
||||
|
||||
if (v) {
|
||||
master = nm_setting_connection_get_controller(s_con);
|
||||
if (master) {
|
||||
PARSE_WARNING("Already configured as slave of %s. Ignoring MASTER{_UUID}=\"%s\"",
|
||||
master,
|
||||
controller = nm_setting_connection_get_controller(s_con);
|
||||
if (controller) {
|
||||
PARSE_WARNING("Already configured as port of %s. Ignoring MASTER{_UUID}=\"%s\"",
|
||||
controller,
|
||||
v);
|
||||
return;
|
||||
}
|
||||
|
|
@ -319,11 +319,11 @@ check_if_bond_slave(shvarFile *ifcfg, NMSettingConnection *s_con)
|
|||
}
|
||||
|
||||
static void
|
||||
check_if_team_slave(shvarFile *ifcfg, NMSettingConnection *s_con)
|
||||
check_if_team_port(shvarFile *ifcfg, NMSettingConnection *s_con)
|
||||
{
|
||||
gs_free char *value = NULL;
|
||||
const char *v;
|
||||
const char *master;
|
||||
const char *controller;
|
||||
|
||||
v = svGetValueStr(ifcfg, "TEAM_MASTER_UUID", &value);
|
||||
if (!v)
|
||||
|
|
@ -331,10 +331,10 @@ check_if_team_slave(shvarFile *ifcfg, NMSettingConnection *s_con)
|
|||
if (!v)
|
||||
return;
|
||||
|
||||
master = nm_setting_connection_get_controller(s_con);
|
||||
if (master) {
|
||||
PARSE_WARNING("Already configured as slave of %s. Ignoring TEAM_MASTER{_UUID}=\"%s\"",
|
||||
master,
|
||||
controller = nm_setting_connection_get_controller(s_con);
|
||||
if (controller) {
|
||||
PARSE_WARNING("Already configured as port of %s. Ignoring TEAM_MASTER{_UUID}=\"%s\"",
|
||||
controller,
|
||||
v);
|
||||
return;
|
||||
}
|
||||
|
|
@ -508,9 +508,7 @@ make_connection_setting(const char *file,
|
|||
const char *old_value;
|
||||
|
||||
if ((old_value = nm_setting_connection_get_controller(s_con))) {
|
||||
PARSE_WARNING("Already configured as slave of %s. Ignoring BRIDGE=\"%s\"",
|
||||
old_value,
|
||||
v);
|
||||
PARSE_WARNING("Already configured as port of %s. Ignoring BRIDGE=\"%s\"", old_value, v);
|
||||
} else {
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, v, NULL);
|
||||
g_object_set(s_con,
|
||||
|
|
@ -520,8 +518,8 @@ make_connection_setting(const char *file,
|
|||
}
|
||||
}
|
||||
|
||||
check_if_bond_slave(ifcfg, s_con);
|
||||
check_if_team_slave(ifcfg, s_con);
|
||||
check_if_bond_port(ifcfg, s_con);
|
||||
check_if_team_port(ifcfg, s_con);
|
||||
|
||||
nm_clear_g_free(&value);
|
||||
v = svGetValueStr(ifcfg, "OVS_PORT_UUID", &value);
|
||||
|
|
@ -531,7 +529,7 @@ make_connection_setting(const char *file,
|
|||
const char *old_value;
|
||||
|
||||
if ((old_value = nm_setting_connection_get_controller(s_con))) {
|
||||
PARSE_WARNING("Already configured as slave of %s. Ignoring OVS_PORT=\"%s\"",
|
||||
PARSE_WARNING("Already configured as port of %s. Ignoring OVS_PORT=\"%s\"",
|
||||
old_value,
|
||||
v);
|
||||
} else {
|
||||
|
|
@ -551,7 +549,7 @@ make_connection_setting(const char *file,
|
|||
const char *old_value;
|
||||
|
||||
if ((old_value = nm_setting_connection_get_controller(s_con))) {
|
||||
PARSE_WARNING("Already configured as slave of %s. Ignoring VRF{_UUID}=\"%s\"",
|
||||
PARSE_WARNING("Already configured as port of %s. Ignoring VRF{_UUID}=\"%s\"",
|
||||
old_value,
|
||||
v);
|
||||
} else {
|
||||
|
|
@ -6683,7 +6681,7 @@ connection_from_file_full(const char *filename,
|
|||
gs_free char *bond_options = NULL;
|
||||
|
||||
if (svGetValueStr(main_ifcfg, "BONDING_OPTS", &bond_options)) {
|
||||
/* initscripts consider these as bond masters */
|
||||
/* initscripts consider these as bond controllers */
|
||||
g_free(type);
|
||||
type = g_strdup(TYPE_BOND);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2161,7 +2161,7 @@ write_connection_setting(NMSettingConnection *s_con, shvarFile *ifcfg, const cha
|
|||
{
|
||||
guint32 n, i;
|
||||
nm_auto_free_gstring GString *str = NULL;
|
||||
const char *master, *master_iface = NULL, *type;
|
||||
const char *controller, *controller_iface = NULL, *type;
|
||||
int vint;
|
||||
gint32 vint32;
|
||||
NMSettingConnectionMdns mdns;
|
||||
|
|
@ -2191,16 +2191,16 @@ write_connection_setting(NMSettingConnection *s_con, shvarFile *ifcfg, const cha
|
|||
vint = nm_setting_connection_get_multi_connect(s_con);
|
||||
svSetValueInt64_cond(ifcfg, "MULTI_CONNECT", vint != NM_CONNECTION_MULTI_CONNECT_DEFAULT, vint);
|
||||
|
||||
/* Only save the value for master connections */
|
||||
/* Only save the value for controller connections */
|
||||
type = nm_setting_connection_get_connection_type(s_con);
|
||||
if (_nm_connection_type_is_master(type)) {
|
||||
NMSettingConnectionAutoconnectSlaves autoconnect_slaves;
|
||||
autoconnect_slaves = nm_setting_connection_get_autoconnect_slaves(s_con);
|
||||
if (_nm_connection_type_is_controller(type)) {
|
||||
NMTernary autoconnect_ports;
|
||||
autoconnect_ports = nm_setting_connection_get_autoconnect_ports(s_con);
|
||||
svSetValueStr(ifcfg,
|
||||
"AUTOCONNECT_SLAVES",
|
||||
autoconnect_slaves == NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_YES ? "yes"
|
||||
: autoconnect_slaves == NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_NO ? "no"
|
||||
: NULL);
|
||||
autoconnect_ports == NM_TERNARY_TRUE ? "yes"
|
||||
: autoconnect_ports == NM_TERNARY_FALSE ? "no"
|
||||
: NULL);
|
||||
}
|
||||
switch (nm_setting_connection_get_lldp(s_con)) {
|
||||
case NM_SETTING_CONNECTION_LLDP_ENABLE_RX:
|
||||
|
|
@ -2251,50 +2251,50 @@ write_connection_setting(NMSettingConnection *s_con, shvarFile *ifcfg, const cha
|
|||
mud_url = nm_setting_connection_get_mud_url(s_con);
|
||||
svSetValue(ifcfg, "MUD_URL", mud_url);
|
||||
|
||||
master = nm_setting_connection_get_controller(s_con);
|
||||
if (master) {
|
||||
controller = nm_setting_connection_get_controller(s_con);
|
||||
if (controller) {
|
||||
/* The reader prefers the *_UUID variants, however we still try to resolve
|
||||
* it into an interface name, so that legacy tooling is not confused. */
|
||||
if (!nm_utils_get_testing()) {
|
||||
/* This is conditional for easier testing. */
|
||||
master_iface = nm_manager_iface_for_uuid(NM_MANAGER_GET, master);
|
||||
controller_iface = nm_manager_iface_for_uuid(NM_MANAGER_GET, controller);
|
||||
}
|
||||
if (!master_iface) {
|
||||
master_iface = master;
|
||||
master = NULL;
|
||||
if (!controller_iface) {
|
||||
controller_iface = controller;
|
||||
controller = NULL;
|
||||
}
|
||||
|
||||
if (nm_streq0(nm_setting_connection_get_port_type(s_con), NM_SETTING_BOND_SETTING_NAME)) {
|
||||
svSetValueStr(ifcfg, "MASTER_UUID", master);
|
||||
svSetValueStr(ifcfg, "MASTER", master_iface);
|
||||
svSetValueStr(ifcfg, "MASTER_UUID", controller);
|
||||
svSetValueStr(ifcfg, "MASTER", controller_iface);
|
||||
svSetValueStr(ifcfg, "SLAVE", "yes");
|
||||
} else if (nm_streq0(nm_setting_connection_get_port_type(s_con),
|
||||
NM_SETTING_BRIDGE_SETTING_NAME)) {
|
||||
svSetValueStr(ifcfg, "BRIDGE_UUID", master);
|
||||
svSetValueStr(ifcfg, "BRIDGE", master_iface);
|
||||
svSetValueStr(ifcfg, "BRIDGE_UUID", controller);
|
||||
svSetValueStr(ifcfg, "BRIDGE", controller_iface);
|
||||
} else if (nm_streq0(nm_setting_connection_get_port_type(s_con),
|
||||
NM_SETTING_TEAM_SETTING_NAME)) {
|
||||
svSetValueStr(ifcfg, "TEAM_MASTER_UUID", master);
|
||||
svSetValueStr(ifcfg, "TEAM_MASTER", master_iface);
|
||||
svSetValueStr(ifcfg, "TEAM_MASTER_UUID", controller);
|
||||
svSetValueStr(ifcfg, "TEAM_MASTER", controller_iface);
|
||||
if (NM_IN_STRSET(type, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_VLAN_SETTING_NAME))
|
||||
svUnsetValue(ifcfg, "TYPE");
|
||||
} else if (nm_streq0(nm_setting_connection_get_port_type(s_con),
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME)) {
|
||||
svSetValueStr(ifcfg, "OVS_PORT_UUID", master);
|
||||
svSetValueStr(ifcfg, "OVS_PORT", master_iface);
|
||||
svSetValueStr(ifcfg, "OVS_PORT_UUID", controller);
|
||||
svSetValueStr(ifcfg, "OVS_PORT", controller_iface);
|
||||
} else if (nm_streq0(nm_setting_connection_get_port_type(s_con),
|
||||
NM_SETTING_VRF_SETTING_NAME)) {
|
||||
svSetValueStr(ifcfg, "VRF_UUID", master);
|
||||
svSetValueStr(ifcfg, "VRF", master_iface);
|
||||
svSetValueStr(ifcfg, "VRF_UUID", controller);
|
||||
svSetValueStr(ifcfg, "VRF", controller_iface);
|
||||
} else {
|
||||
_LOGW("don't know how to set master for a %s slave",
|
||||
_LOGW("don't know how to set controller for a %s port",
|
||||
nm_setting_connection_get_port_type(s_con));
|
||||
}
|
||||
}
|
||||
|
||||
if (nm_streq0(type, NM_SETTING_TEAM_SETTING_NAME))
|
||||
svSetValueStr(ifcfg, "DEVICETYPE", TYPE_TEAM);
|
||||
else if (master_iface
|
||||
else if (controller_iface
|
||||
&& nm_streq0(nm_setting_connection_get_port_type(s_con), NM_SETTING_TEAM_SETTING_NAME))
|
||||
svSetValueStr(ifcfg, "DEVICETYPE", TYPE_TEAM_PORT);
|
||||
|
||||
|
|
@ -3056,7 +3056,7 @@ write_ip4_aliases(NMConnection *connection, const char *base_ifcfg_path)
|
|||
|
||||
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||
if (!s_ip4) {
|
||||
/* slave-type: no alias files */
|
||||
/* port-type: no alias files */
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ REORDER_HDR=yes
|
|||
GVRP=no
|
||||
MVRP=no
|
||||
HWADDR=
|
||||
NAME=team-slave-enp31s0f1-142
|
||||
NAME=team-port-enp31s0f1-142
|
||||
UUID=74f435bb-ede4-415a-9d48-f580b60eba04
|
||||
DEVICE=enp31s0f1-142
|
||||
ONBOOT=no
|
||||
|
|
@ -2212,7 +2212,7 @@ test_read_dns_options(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_clear_master(void)
|
||||
test_clear_controller(void)
|
||||
{
|
||||
nmtst_auto_unlinkfile char *testfile = NULL;
|
||||
gs_free char *keyfile = NULL;
|
||||
|
|
@ -2221,7 +2221,7 @@ test_clear_master(void)
|
|||
char *unmanaged = NULL;
|
||||
shvarFile *f;
|
||||
|
||||
/* 1. load the bridge slave connection from disk */
|
||||
/* 1. load the bridge port connection from disk */
|
||||
connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bridge-component",
|
||||
NULL,
|
||||
TYPE_ETHERNET,
|
||||
|
|
@ -2239,7 +2239,7 @@ test_clear_master(void)
|
|||
TEST_IFCFG_DIR "/ifcfg-System_test-bridge-component-a.cexpected",
|
||||
&testfile);
|
||||
|
||||
/* 3. clear master and slave-type */
|
||||
/* 3. clear controller and port-type */
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_MASTER,
|
||||
NULL,
|
||||
|
|
@ -8251,13 +8251,15 @@ test_write_bond_main(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_read_bond_slave(void)
|
||||
test_read_bond_port(void)
|
||||
{
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
NMSettingConnection *s_con;
|
||||
|
||||
connection =
|
||||
_connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-slave", NULL, TYPE_ETHERNET, NULL);
|
||||
connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-port-bond0",
|
||||
NULL,
|
||||
TYPE_ETHERNET,
|
||||
NULL);
|
||||
g_test_assert_expected_messages();
|
||||
|
||||
s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
|
||||
|
|
@ -8268,7 +8270,7 @@ test_read_bond_slave(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_write_bond_slave(void)
|
||||
test_write_bond_port(void)
|
||||
{
|
||||
nmtst_auto_unlinkfile char *testfile = NULL;
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
|
|
@ -8309,7 +8311,7 @@ test_write_bond_slave(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_read_bond_port(void)
|
||||
test_read_bond_port_setting(void)
|
||||
{
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
NMSettingConnection *s_con = NULL;
|
||||
|
|
@ -8327,7 +8329,7 @@ test_read_bond_port(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_write_bond_port(void)
|
||||
test_write_bond_port_setting(void)
|
||||
{
|
||||
nmtst_auto_unlinkfile char *testfile = NULL;
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
|
|
@ -8548,13 +8550,12 @@ test_write_infiniband(gconstpointer test_data)
|
|||
}
|
||||
|
||||
static void
|
||||
test_read_bond_slave_ib(void)
|
||||
test_read_bond_port_ib(void)
|
||||
{
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
NMSettingConnection *s_con;
|
||||
|
||||
connection =
|
||||
_connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-slave-ib", NULL, NULL, NULL);
|
||||
connection = _connection_from_file(TEST_IFCFG_DIR "/ifcfg-test-bond-port-ib", NULL, NULL, NULL);
|
||||
|
||||
s_con = nmtst_connection_assert_setting(connection, NM_TYPE_SETTING_CONNECTION);
|
||||
|
||||
|
|
@ -8563,7 +8564,7 @@ test_read_bond_slave_ib(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_write_bond_slave_ib(void)
|
||||
test_write_bond_port_ib(void)
|
||||
{
|
||||
nmtst_auto_unlinkfile char *testfile = NULL;
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
|
|
@ -8990,7 +8991,7 @@ test_write_fcoe_mode(gconstpointer user_data)
|
|||
}
|
||||
|
||||
static void
|
||||
test_read_team_master(gconstpointer user_data)
|
||||
test_read_team_controller(gconstpointer user_data)
|
||||
{
|
||||
const char *const PATH_NAME = user_data;
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
|
|
@ -9013,7 +9014,7 @@ test_read_team_master(gconstpointer user_data)
|
|||
}
|
||||
|
||||
static void
|
||||
test_read_team_master_invalid(gconstpointer user_data)
|
||||
test_read_team_controller_invalid(gconstpointer user_data)
|
||||
{
|
||||
const char *const PATH_NAME = user_data;
|
||||
gs_free_error GError *error = NULL;
|
||||
|
|
@ -9029,7 +9030,7 @@ test_read_team_master_invalid(gconstpointer user_data)
|
|||
}
|
||||
|
||||
static void
|
||||
test_write_team_master(void)
|
||||
test_write_team_controller(void)
|
||||
{
|
||||
nmtst_auto_unlinkfile char *testfile = NULL;
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
|
|
@ -9236,7 +9237,7 @@ test_read_team_port_empty_config(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_team_reread_slave(void)
|
||||
test_team_reread_port(void)
|
||||
{
|
||||
nmtst_auto_unlinkfile char *testfile = NULL;
|
||||
gs_unref_object NMConnection *connection_1 = NULL;
|
||||
|
|
@ -9247,14 +9248,14 @@ test_team_reread_slave(void)
|
|||
|
||||
connection_1 =
|
||||
nmtst_create_connection_from_keyfile("[connection]\n"
|
||||
"id=team-slave-enp31s0f1-142\n"
|
||||
"id=team-port-enp31s0f1-142\n"
|
||||
"uuid=74f435bb-ede4-415a-9d48-f580b60eba04\n"
|
||||
"type=vlan\n"
|
||||
"autoconnect=false\n"
|
||||
"interface-name=enp31s0f1-142\n"
|
||||
"master=team142\n"
|
||||
"controller=team142\n"
|
||||
"permissions=\n"
|
||||
"slave-type=team\n"
|
||||
"port-type=team\n"
|
||||
"\n"
|
||||
"[vlan]\n"
|
||||
"egress-priority-map=\n"
|
||||
|
|
@ -9262,10 +9263,10 @@ test_team_reread_slave(void)
|
|||
"id=142\n"
|
||||
"ingress-priority-map=\n"
|
||||
"parent=enp31s0f1\n",
|
||||
"/test_team_reread_slave");
|
||||
"/test_team_reread_port");
|
||||
|
||||
/* to double-check keyfile syntax, re-create the connection by hand. */
|
||||
connection_2 = nmtst_create_minimal_connection("team-slave-enp31s0f1-142",
|
||||
connection_2 = nmtst_create_minimal_connection("team-port-enp31s0f1-142",
|
||||
"74f435bb-ede4-415a-9d48-f580b60eba04",
|
||||
NM_SETTING_VLAN_SETTING_NAME,
|
||||
&s_con);
|
||||
|
|
@ -9297,7 +9298,7 @@ test_team_reread_slave(void)
|
|||
_writer_new_connection_reread((nmtst_get_rand_uint32() % 2) ? connection_1 : connection_2,
|
||||
TEST_SCRATCH_DIR,
|
||||
&testfile,
|
||||
TEST_IFCFG_DIR "/ifcfg-team-slave-enp31s0f1-142.cexpected",
|
||||
TEST_IFCFG_DIR "/ifcfg-team-port-enp31s0f1-142.cexpected",
|
||||
&reread,
|
||||
&reread_same);
|
||||
_assert_reread_same((nmtst_get_rand_uint32() % 2) ? connection_1 : connection_2, reread);
|
||||
|
|
@ -10534,7 +10535,7 @@ main(int argc, char **argv)
|
|||
test_write_wired_static_ip6_only_gw);
|
||||
g_test_add_func(TPATH "ip6/disabled", test_write_ip6_disabled);
|
||||
g_test_add_func(TPATH "read-dns-options", test_read_dns_options);
|
||||
g_test_add_func(TPATH "clear-master", test_clear_master);
|
||||
g_test_add_func(TPATH "clear-controller", test_clear_controller);
|
||||
|
||||
nmtst_add_test_func(TPATH "read-static",
|
||||
test_read_wired_static,
|
||||
|
|
@ -10892,33 +10893,33 @@ main(int argc, char **argv)
|
|||
(gpointer) NM_SETTING_DCB_FCOE_MODE_VN2VN,
|
||||
test_write_fcoe_mode);
|
||||
|
||||
g_test_add_func(TPATH "bond/read-master", test_read_bond_main);
|
||||
g_test_add_func(TPATH "bond/read-master-eth-type", test_read_bond_eth_type);
|
||||
g_test_add_func(TPATH "bond/read-slave", test_read_bond_slave);
|
||||
g_test_add_func(TPATH "bond/read-slave-ib", test_read_bond_slave_ib);
|
||||
g_test_add_func(TPATH "bond/write-master", test_write_bond_main);
|
||||
g_test_add_func(TPATH "bond/write-slave", test_write_bond_slave);
|
||||
g_test_add_func(TPATH "bond/write-slave-ib", test_write_bond_slave_ib);
|
||||
g_test_add_func(TPATH "bond/read-controller", test_read_bond_main);
|
||||
g_test_add_func(TPATH "bond/read-controller-eth-type", test_read_bond_eth_type);
|
||||
g_test_add_func(TPATH "bond/read-port", test_read_bond_port);
|
||||
g_test_add_func(TPATH "bond/read-port-ib", test_read_bond_port_ib);
|
||||
g_test_add_func(TPATH "bond/write-controller", test_write_bond_main);
|
||||
g_test_add_func(TPATH "bond/write-port", test_write_bond_port);
|
||||
g_test_add_func(TPATH "bond/write-port-ib", test_write_bond_port_ib);
|
||||
g_test_add_func(TPATH "bond/bonding-opts-numeric-mode", test_read_bond_opts_mode_numeric);
|
||||
g_test_add_func(TPATH "bond/read-bond-port", test_read_bond_port);
|
||||
g_test_add_func(TPATH "bond/write-bond-port", test_write_bond_port);
|
||||
g_test_add_func(TPATH "bond/read-bond-port", test_read_bond_port_setting);
|
||||
g_test_add_func(TPATH "bond/write-bond-port_setting", test_write_bond_port_setting);
|
||||
|
||||
g_test_add_func(TPATH "bridge/read-master", test_read_bridge_main);
|
||||
g_test_add_func(TPATH "bridge/write-master", test_write_bridge_main);
|
||||
g_test_add_func(TPATH "bridge/read-controller", test_read_bridge_main);
|
||||
g_test_add_func(TPATH "bridge/write-controller", test_write_bridge_main);
|
||||
g_test_add_func(TPATH "bridge/read-component", test_read_bridge_component);
|
||||
g_test_add_func(TPATH "bridge/write-component", test_write_bridge_component);
|
||||
g_test_add_func(TPATH "bridge/read-missing-stp", test_read_bridge_missing_stp);
|
||||
|
||||
g_test_add_data_func(TPATH "team/read-master-1",
|
||||
TEST_IFCFG_DIR "/ifcfg-test-team-master-1",
|
||||
test_read_team_master);
|
||||
g_test_add_data_func(TPATH "team/read-master-2",
|
||||
TEST_IFCFG_DIR "/ifcfg-test-team-master-2",
|
||||
test_read_team_master);
|
||||
g_test_add_data_func(TPATH "team/read-master-invalid",
|
||||
TEST_IFCFG_DIR "/ifcfg-test-team-master-invalid",
|
||||
test_read_team_master_invalid);
|
||||
g_test_add_func(TPATH "team/write-master", test_write_team_master);
|
||||
g_test_add_data_func(TPATH "team/read-controller-1",
|
||||
TEST_IFCFG_DIR "/ifcfg-test-team-controller-1",
|
||||
test_read_team_controller);
|
||||
g_test_add_data_func(TPATH "team/read-controller-2",
|
||||
TEST_IFCFG_DIR "/ifcfg-test-team-controller-2",
|
||||
test_read_team_controller);
|
||||
g_test_add_data_func(TPATH "team/read-controller-invalid",
|
||||
TEST_IFCFG_DIR "/ifcfg-test-team-controller-invalid",
|
||||
test_read_team_controller_invalid);
|
||||
g_test_add_func(TPATH "team/write-controller", test_write_team_controller);
|
||||
g_test_add_data_func(TPATH "team/read-port-1",
|
||||
TEST_IFCFG_DIR "/ifcfg-test-team-port-1",
|
||||
test_read_team_port);
|
||||
|
|
@ -10928,7 +10929,7 @@ main(int argc, char **argv)
|
|||
g_test_add_func(TPATH "team/write-port", test_write_team_port);
|
||||
g_test_add_func(TPATH "team/write-infiniband-port", test_write_team_infiniband_port);
|
||||
g_test_add_func(TPATH "team/read-port-empty-config", test_read_team_port_empty_config);
|
||||
g_test_add_func(TPATH "team/reread-slave", test_team_reread_slave);
|
||||
g_test_add_func(TPATH "team/reread-port", test_team_reread_port);
|
||||
|
||||
g_test_add_func(TPATH "proxy/read-proxy-basic", test_read_proxy_basic);
|
||||
g_test_add_func(TPATH "proxy/write-proxy-basic", test_write_proxy_basic);
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
id=Test Bridge Component
|
||||
uuid=d7b4f96c-c45e-4298-bef8-f48574f8c1c0
|
||||
type=802-3-ethernet
|
||||
master=br0
|
||||
slave-type=bridge
|
||||
controller=br0
|
||||
port-type=bridge
|
||||
|
||||
[802-3-ethernet]
|
||||
mac-address=00:22:15:59:62:97
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[connection]
|
||||
type=802-3-ethernet
|
||||
master=br0
|
||||
slave-type=bridge
|
||||
controller=br0
|
||||
port-type=bridge
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[connection]
|
||||
master=br0
|
||||
controller=br0
|
||||
|
||||
[802-3-ethernet]
|
||||
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[connection]
|
||||
controller=br0
|
||||
port-type=bridge
|
||||
[802-3-ethernet]
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[connection]
|
||||
type=802-3-ethernet
|
||||
master=br0
|
||||
controller=br0
|
||||
[bridge-port]
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[connection]
|
||||
master=br0
|
||||
slave-type=bridge
|
||||
[802-3-ethernet]
|
||||
|
|
@ -2346,13 +2346,13 @@ test_read_minimal(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_read_minimal_slave(void)
|
||||
test_read_minimal_port(void)
|
||||
{
|
||||
gs_unref_object NMConnection *connection = NULL;
|
||||
gs_unref_object NMConnection *con_archetype = NULL;
|
||||
NMSettingConnection *s_con;
|
||||
|
||||
con_archetype = nmtst_create_minimal_connection("Test_minimal_slave_x",
|
||||
con_archetype = nmtst_create_minimal_connection("Test_minimal_port_x",
|
||||
"a56b4ca5-7075-43d4-82c7-5d0cb15f7654",
|
||||
NM_SETTING_WIRED_SETTING_NAME,
|
||||
&s_con);
|
||||
|
|
@ -2364,7 +2364,7 @@ test_read_minimal_slave(void)
|
|||
NULL);
|
||||
nmtst_connection_normalize(con_archetype);
|
||||
|
||||
connection = keyfile_read_connection_from_file(TEST_KEYFILES_DIR "/Test_minimal_slave_1");
|
||||
connection = keyfile_read_connection_from_file(TEST_KEYFILES_DIR "/Test_minimal_port_1");
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_ID,
|
||||
nm_connection_get_id(connection),
|
||||
|
|
@ -2374,7 +2374,7 @@ test_read_minimal_slave(void)
|
|||
nmtst_assert_connection_equals(con_archetype, FALSE, connection, FALSE);
|
||||
g_clear_object(&connection);
|
||||
|
||||
connection = keyfile_read_connection_from_file(TEST_KEYFILES_DIR "/Test_minimal_slave_2");
|
||||
connection = keyfile_read_connection_from_file(TEST_KEYFILES_DIR "/Test_minimal_port_2");
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_ID,
|
||||
nm_connection_get_id(connection),
|
||||
|
|
@ -2384,7 +2384,7 @@ test_read_minimal_slave(void)
|
|||
nmtst_assert_connection_equals(con_archetype, FALSE, connection, FALSE);
|
||||
g_clear_object(&connection);
|
||||
|
||||
connection = keyfile_read_connection_from_file(TEST_KEYFILES_DIR "/Test_minimal_slave_3");
|
||||
connection = keyfile_read_connection_from_file(TEST_KEYFILES_DIR "/Test_minimal_port_3");
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_ID,
|
||||
nm_connection_get_id(connection),
|
||||
|
|
@ -2394,7 +2394,7 @@ test_read_minimal_slave(void)
|
|||
nmtst_assert_connection_equals(con_archetype, FALSE, connection, FALSE);
|
||||
g_clear_object(&connection);
|
||||
|
||||
connection = keyfile_read_connection_from_file(TEST_KEYFILES_DIR "/Test_minimal_slave_4");
|
||||
connection = keyfile_read_connection_from_file(TEST_KEYFILES_DIR "/Test_minimal_port_4");
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_ID,
|
||||
nm_connection_get_id(connection),
|
||||
|
|
@ -2921,7 +2921,7 @@ main(int argc, char **argv)
|
|||
g_test_add_func("/keyfile/test_read_missing_id_uuid", test_read_missing_id_uuid);
|
||||
|
||||
g_test_add_func("/keyfile/test_read_minimal", test_read_minimal);
|
||||
g_test_add_func("/keyfile/test_read_minimal_slave", test_read_minimal_slave);
|
||||
g_test_add_func("/keyfile/test_read_minimal_port", test_read_minimal_port);
|
||||
|
||||
g_test_add_func("/keyfile/test_read_enum_property", test_read_enum_property);
|
||||
g_test_add_func("/keyfile/test_write_enum_property", test_write_enum_property);
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ test_nm_utils_log_connection_diff(void)
|
|||
NM_SETTING_CONNECTION_ID,
|
||||
"id2",
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master2",
|
||||
"controller2",
|
||||
NULL);
|
||||
nm_utils_log_connection_diff(connection,
|
||||
connection2,
|
||||
|
|
|
|||
|
|
@ -381,9 +381,9 @@ nm_active_connection_get_vpn(NMActiveConnection *connection)
|
|||
* nm_active_connection_get_master:
|
||||
* @connection: a #NMActiveConnection
|
||||
*
|
||||
* Gets the master #NMDevice of the connection.
|
||||
* Gets the controller #NMDevice of the connection.
|
||||
*
|
||||
* Returns: (transfer none): the master #NMDevice of the #NMActiveConnection.
|
||||
* Returns: (transfer none): the controller #NMDevice of the #NMActiveConnection.
|
||||
*
|
||||
* Deprecated: 1.44: Use nm_active_connection_get_controller() instead.
|
||||
**/
|
||||
|
|
@ -880,7 +880,7 @@ nm_active_connection_class_init(NMActiveConnectionClass *klass)
|
|||
/**
|
||||
* NMActiveConnection:master:
|
||||
*
|
||||
* The master device if one exists. Replaced by the "controller" property.
|
||||
* The controller device if one exists. Replaced by the "controller" property.
|
||||
*
|
||||
* Deprecated: 1.44
|
||||
**/
|
||||
|
|
|
|||
|
|
@ -9221,17 +9221,17 @@ nm_client_wait_shutdown_finish(GAsyncResult *result, GError **error)
|
|||
|
||||
/*****************************************************************************
|
||||
* Backported symbols. Usually, new API is only added in new major versions
|
||||
* of NetworkManager (that is, on "master" branch). Sometimes however, we might
|
||||
* of NetworkManager (that is, on "main" branch). Sometimes however, we might
|
||||
* have to backport some API to an older stable branch. In that case, we backport
|
||||
* the symbols with a different version corresponding to the minor API.
|
||||
*
|
||||
* To allow upgrading from such a extended minor-release, "master" contains these
|
||||
* To allow upgrading from such a extended minor-release, "main" contains these
|
||||
* backported symbols too.
|
||||
*
|
||||
* For example, 1.2.0 added nm_setting_connection_autoconnect_slaves_get_type.
|
||||
* This was backported for 1.0.4 as nm_setting_connection_autoconnect_slaves_get_type@libnm_1_0_4
|
||||
* To allow an application that was linked against 1.0.4 to seamlessly upgrade to
|
||||
* a newer major version, the same symbols is also exposed on "master". Note, that
|
||||
* a newer major version, the same symbols is also exposed on "main". Note, that
|
||||
* a user can only seamlessly upgrade to a newer major version, that is released
|
||||
* *after* 1.0.4 is out. In this example, 1.2.0 was released after 1.4.0, and thus
|
||||
* a 1.0.4 user can upgrade to 1.2.0 ABI.
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ nm_device_bond_get_carrier(NMDeviceBond *device)
|
|||
* nm_device_bond_get_slaves:
|
||||
* @device: a #NMDeviceBond
|
||||
*
|
||||
* Gets the devices currently enslaved to @device.
|
||||
* Gets the devices currently attached as port to @device.
|
||||
*
|
||||
* Returns: (element-type NMDevice): the #GPtrArray containing
|
||||
* #NMDevices that are slaves of @device. This is the internal
|
||||
|
|
@ -105,7 +105,7 @@ connection_compatible(NMDevice *device, NMConnection *connection, GError **error
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* FIXME: check slaves? */
|
||||
/* FIXME: check ports? */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -183,7 +183,7 @@ nm_device_bond_class_init(NMDeviceBondClass *klass)
|
|||
/**
|
||||
* NMDeviceBond:slaves: (type GPtrArray(NMDevice))
|
||||
*
|
||||
* The devices enslaved to the bond device.
|
||||
* The devices attached as port to the bond device.
|
||||
**/
|
||||
obj_properties[PROP_SLAVES] = g_param_spec_boxed(NM_DEVICE_BOND_SLAVES,
|
||||
"",
|
||||
|
|
@ -193,5 +193,5 @@ nm_device_bond_class_init(NMDeviceBondClass *klass)
|
|||
|
||||
_nml_dbus_meta_class_init_with_properties(object_class, &_nml_dbus_meta_iface_nm_device_bond);
|
||||
|
||||
device_class->slaves_param_spec = obj_properties[PROP_SLAVES];
|
||||
device_class->ports_param_spec = obj_properties[PROP_SLAVES];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,10 +76,10 @@ nm_device_bridge_get_carrier(NMDeviceBridge *device)
|
|||
* nm_device_bridge_get_slaves:
|
||||
* @device: a #NMDeviceBridge
|
||||
*
|
||||
* Gets the devices currently enslaved to @device.
|
||||
* Gets the devices currently attached as port to @device.
|
||||
*
|
||||
* Returns: (element-type NMDevice): the #GPtrArray containing
|
||||
* #NMDevices that are slaves of @device. This is the internal
|
||||
* #NMDevices that are ports of @device. This is the internal
|
||||
* copy used by the device, and must not be modified.
|
||||
*
|
||||
* Deprecated: 1.34: Use nm_device_get_ports() instead.
|
||||
|
|
@ -188,7 +188,7 @@ nm_device_bridge_class_init(NMDeviceBridgeClass *klass)
|
|||
/**
|
||||
* NMDeviceBridge:slaves: (type GPtrArray(NMDevice))
|
||||
*
|
||||
* The devices enslaved to the bridge device.
|
||||
* The devices attached as port to the bridge device.
|
||||
**/
|
||||
obj_properties[PROP_SLAVES] = g_param_spec_boxed(NM_DEVICE_BRIDGE_SLAVES,
|
||||
"",
|
||||
|
|
@ -198,5 +198,5 @@ nm_device_bridge_class_init(NMDeviceBridgeClass *klass)
|
|||
|
||||
_nml_dbus_meta_class_init_with_properties(object_class, &_nml_dbus_meta_iface_nm_device_bridge);
|
||||
|
||||
device_class->slaves_param_spec = obj_properties[PROP_SLAVES];
|
||||
device_class->ports_param_spec = obj_properties[PROP_SLAVES];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ G_DEFINE_TYPE(NMDeviceOvsBridge, nm_device_ovs_bridge, NM_TYPE_DEVICE)
|
|||
* nm_device_ovs_bridge_get_slaves:
|
||||
* @device: a #NMDeviceOvsBridge
|
||||
*
|
||||
* Gets the ports currently enslaved to @device.
|
||||
* Gets the ports currently attached as port to @device.
|
||||
*
|
||||
* Returns: (element-type NMDevice): the #GPtrArray containing
|
||||
* #NMDevices that are slaves of @device. This is the internal
|
||||
* #NMDevices that are ports of @device. This is the internal
|
||||
* copy used by the device, and must not be modified.
|
||||
*
|
||||
* Since: 1.14
|
||||
|
|
@ -142,7 +142,7 @@ nm_device_ovs_bridge_class_init(NMDeviceOvsBridgeClass *klass)
|
|||
/**
|
||||
* NMDeviceOvsBridge:slaves: (type GPtrArray(NMDevice))
|
||||
*
|
||||
* Gets the ports currently enslaved to the device.
|
||||
* Gets the ports currently attached as port to the device.
|
||||
*
|
||||
* Since: 1.22
|
||||
*/
|
||||
|
|
@ -155,5 +155,5 @@ nm_device_ovs_bridge_class_init(NMDeviceOvsBridgeClass *klass)
|
|||
_nml_dbus_meta_class_init_with_properties(object_class,
|
||||
&_nml_dbus_meta_iface_nm_device_ovsbridge);
|
||||
|
||||
device_class->slaves_param_spec = obj_properties[PROP_SLAVES];
|
||||
device_class->ports_param_spec = obj_properties[PROP_SLAVES];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ G_DEFINE_TYPE(NMDeviceOvsPort, nm_device_ovs_port, NM_TYPE_DEVICE)
|
|||
* nm_device_ovs_port_get_slaves:
|
||||
* @device: a #NMDeviceOvsPort
|
||||
*
|
||||
* Gets the interfaces currently enslaved to @device.
|
||||
* Gets the interfaces currently attached as port to @device.
|
||||
*
|
||||
* Returns: (element-type NMDevice): the #GPtrArray containing
|
||||
* #NMDevices that are slaves of @device. This is the internal
|
||||
* #NMDevices that are ports of @device. This is the internal
|
||||
* copy used by the device, and must not be modified.
|
||||
*
|
||||
* Since: 1.14
|
||||
|
|
@ -142,7 +142,7 @@ nm_device_ovs_port_class_init(NMDeviceOvsPortClass *klass)
|
|||
/**
|
||||
* NMDeviceOvsPort:slaves: (type GPtrArray(NMDevice))
|
||||
*
|
||||
* Gets the interfaces currently enslaved to the device.
|
||||
* Gets the interfaces currently attached as port to the device.
|
||||
*
|
||||
* Since: 1.22
|
||||
*/
|
||||
|
|
@ -155,5 +155,5 @@ nm_device_ovs_port_class_init(NMDeviceOvsPortClass *klass)
|
|||
_nml_dbus_meta_class_init_with_properties(object_class,
|
||||
&_nml_dbus_meta_iface_nm_device_ovsport);
|
||||
|
||||
device_class->slaves_param_spec = obj_properties[PROP_SLAVES];
|
||||
device_class->ports_param_spec = obj_properties[PROP_SLAVES];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,10 +77,10 @@ nm_device_team_get_carrier(NMDeviceTeam *device)
|
|||
* nm_device_team_get_slaves:
|
||||
* @device: a #NMDeviceTeam
|
||||
*
|
||||
* Gets the devices currently enslaved to @device.
|
||||
* Gets the devices currently attach as port to @device.
|
||||
*
|
||||
* Returns: (element-type NMDevice): the #GPtrArray containing
|
||||
* #NMDevices that are slaves of @device. This is the internal
|
||||
* #NMDevices that are ports of @device. This is the internal
|
||||
* copy used by the device, and must not be modified.
|
||||
*
|
||||
* Deprecated: 1.34: Use nm_device_get_ports() instead.
|
||||
|
|
@ -125,7 +125,7 @@ connection_compatible(NMDevice *device, NMConnection *connection, GError **error
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* FIXME: check slaves? */
|
||||
/* FIXME: check ports? */
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -218,7 +218,7 @@ nm_device_team_class_init(NMDeviceTeamClass *klass)
|
|||
/**
|
||||
* NMDeviceTeam:slaves: (type GPtrArray(NMDevice))
|
||||
*
|
||||
* The devices enslaved to the team device.
|
||||
* The devices attached as port to the team device.
|
||||
**/
|
||||
obj_properties[PROP_SLAVES] = g_param_spec_boxed(NM_DEVICE_TEAM_SLAVES,
|
||||
"",
|
||||
|
|
@ -241,5 +241,5 @@ nm_device_team_class_init(NMDeviceTeamClass *klass)
|
|||
|
||||
_nml_dbus_meta_class_init_with_properties(object_class, &_nml_dbus_meta_iface_nm_device_team);
|
||||
|
||||
device_class->slaves_param_spec = obj_properties[PROP_SLAVES];
|
||||
device_class->ports_param_spec = obj_properties[PROP_SLAVES];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1283,7 +1283,7 @@ nm_device_get_type_description(NMDevice *device)
|
|||
* Gets the devices currently set as port of @device.
|
||||
*
|
||||
* Returns: (element-type NMDevice): the #GPtrArray containing #NMDevices that
|
||||
* are slaves of @device. This is the internal copy used by the device and
|
||||
* are ports of @device. This is the internal copy used by the device and
|
||||
* must not be modified.
|
||||
*
|
||||
* Since: 1.34
|
||||
|
|
@ -1397,8 +1397,8 @@ _nm_device_notify_update_prop_ports(NMClient *client,
|
|||
nm_assert(notify_update_prop_flags == NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NOTIFY);
|
||||
|
||||
klass = NM_DEVICE_GET_CLASS(self);
|
||||
if (klass->slaves_param_spec)
|
||||
_nm_client_queue_notify_object(client, self, klass->slaves_param_spec);
|
||||
if (klass->ports_param_spec)
|
||||
_nm_client_queue_notify_object(client, self, klass->ports_param_spec);
|
||||
out:
|
||||
return NML_DBUS_NOTIFY_UPDATE_PROP_FLAGS_NONE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -852,7 +852,7 @@ struct _NMDeviceClass {
|
|||
/* Slaves was originally part of some subtypes of NMDevice. It was deprecated and
|
||||
* a new NMDevice::ports property was added. When that property changes, we need
|
||||
* to notify about the subclass' respective property. This is the property. */
|
||||
const GParamSpec *slaves_param_spec;
|
||||
const GParamSpec *ports_param_spec;
|
||||
};
|
||||
|
||||
#define _NML_DEVICE_META_PROPERTY_INDEX_PORTS 27
|
||||
|
|
|
|||
|
|
@ -15,15 +15,15 @@
|
|||
|
||||
NMSetting *_nm_connection_find_base_type_setting(NMConnection *connection);
|
||||
|
||||
const char *_nm_connection_detect_slave_type(NMConnection *connection, NMSetting **out_s_port);
|
||||
const char *_nm_connection_detect_port_type(NMConnection *connection, NMSetting **out_s_port);
|
||||
|
||||
gboolean _nm_connection_detect_slave_type_full(NMSettingConnection *s_con,
|
||||
NMConnection *connection,
|
||||
const char **out_slave_type,
|
||||
const char **out_normerr_slave_setting_type,
|
||||
const char **out_normerr_missing_slave_type,
|
||||
const char **out_normerr_missing_slave_type_port,
|
||||
GError **error);
|
||||
gboolean _nm_connection_detect_port_type_full(NMSettingConnection *s_con,
|
||||
NMConnection *connection,
|
||||
const char **out_port_type,
|
||||
const char **out_normerr_port_setting_type,
|
||||
const char **out_normerr_missing_port_type,
|
||||
const char **out_normerr_missing_port_type_port,
|
||||
GError **error);
|
||||
|
||||
const char *_nm_connection_detect_bluetooth_type(NMConnection *self);
|
||||
|
||||
|
|
|
|||
|
|
@ -1047,11 +1047,11 @@ _nm_connection_detect_bluetooth_type(NMConnection *self)
|
|||
}
|
||||
|
||||
const char *
|
||||
_nm_connection_detect_slave_type(NMConnection *connection, NMSetting **out_s_port)
|
||||
_nm_connection_detect_port_type(NMConnection *connection, NMSetting **out_s_port)
|
||||
{
|
||||
NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE(connection);
|
||||
const char *slave_type = NULL;
|
||||
NMSetting *s_port = NULL;
|
||||
NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE(connection);
|
||||
const char *port_type = NULL;
|
||||
NMSetting *s_port = NULL;
|
||||
int i;
|
||||
static const struct {
|
||||
NMMetaSettingType meta_type;
|
||||
|
|
@ -1070,40 +1070,40 @@ _nm_connection_detect_slave_type(NMConnection *connection, NMSetting **out_s_por
|
|||
if (!setting)
|
||||
continue;
|
||||
|
||||
if (slave_type) {
|
||||
/* there are more then one matching port types, cannot detect the slave type. */
|
||||
slave_type = NULL;
|
||||
s_port = NULL;
|
||||
if (port_type) {
|
||||
/* there are more then one matching port types, cannot detect the port type. */
|
||||
port_type = NULL;
|
||||
s_port = NULL;
|
||||
break;
|
||||
}
|
||||
slave_type = infos[i].controller_type_name;
|
||||
s_port = setting;
|
||||
port_type = infos[i].controller_type_name;
|
||||
s_port = setting;
|
||||
}
|
||||
|
||||
if (out_s_port)
|
||||
*out_s_port = s_port;
|
||||
return slave_type;
|
||||
return port_type;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_normalize_connection_slave_type(NMConnection *self)
|
||||
_normalize_connection_port_type(NMConnection *self)
|
||||
{
|
||||
NMSettingConnection *s_con = nm_connection_get_setting_connection(self);
|
||||
const char *slave_type, *port_type;
|
||||
const char *port_type, *port_setting_type;
|
||||
|
||||
if (!s_con)
|
||||
return FALSE;
|
||||
if (!nm_setting_connection_get_controller(s_con))
|
||||
return FALSE;
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (slave_type) {
|
||||
if (_nm_setting_slave_type_is_valid(slave_type, &port_type) && port_type) {
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (port_type) {
|
||||
if (_nm_setting_port_type_is_valid(port_type, &port_setting_type) && port_setting_type) {
|
||||
NMSetting *s_port;
|
||||
|
||||
s_port = nm_connection_get_setting_by_name(self, port_type);
|
||||
s_port = nm_connection_get_setting_by_name(self, port_setting_type);
|
||||
if (!s_port) {
|
||||
GType p_type = nm_setting_lookup_type(port_type);
|
||||
GType p_type = nm_setting_lookup_type(port_setting_type);
|
||||
|
||||
g_return_val_if_fail(p_type, FALSE);
|
||||
nm_connection_add_setting(self, g_object_new(p_type, NULL));
|
||||
|
|
@ -1111,8 +1111,8 @@ _normalize_connection_slave_type(NMConnection *self)
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if ((slave_type = _nm_connection_detect_slave_type(self, NULL))) {
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_PORT_TYPE, slave_type, NULL);
|
||||
if ((port_type = _nm_connection_detect_port_type(self, NULL))) {
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_PORT_TYPE, port_type, NULL);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1762,23 +1762,23 @@ _normalize_required_settings(NMConnection *self)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
_normalize_invalid_slave_port_settings(NMConnection *self)
|
||||
_normalize_invalid_port_port_settings(NMConnection *self)
|
||||
{
|
||||
NMSettingConnection *s_con = nm_connection_get_setting_connection(self);
|
||||
const char *slave_type;
|
||||
const char *port_type;
|
||||
gboolean changed = FALSE;
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
|
||||
if (!nm_streq0(slave_type, NM_SETTING_BRIDGE_SETTING_NAME)
|
||||
if (!nm_streq0(port_type, NM_SETTING_BRIDGE_SETTING_NAME)
|
||||
&& _nm_connection_remove_setting(self, NM_TYPE_SETTING_BRIDGE_PORT))
|
||||
changed = TRUE;
|
||||
|
||||
if (!nm_streq0(slave_type, NM_SETTING_BOND_SETTING_NAME)
|
||||
if (!nm_streq0(port_type, NM_SETTING_BOND_SETTING_NAME)
|
||||
&& _nm_connection_remove_setting(self, NM_TYPE_SETTING_BOND_PORT))
|
||||
changed = TRUE;
|
||||
|
||||
if (!nm_streq0(slave_type, NM_SETTING_TEAM_SETTING_NAME)
|
||||
if (!nm_streq0(port_type, NM_SETTING_TEAM_SETTING_NAME)
|
||||
&& _nm_connection_remove_setting(self, NM_TYPE_SETTING_TEAM_PORT))
|
||||
changed = TRUE;
|
||||
|
||||
|
|
@ -1890,10 +1890,10 @@ _nm_connection_verify(NMConnection *connection, GError **error)
|
|||
g_set_error_literal(&normalizable_error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_MISSING_SETTING,
|
||||
_("setting is required for non-slave connections"));
|
||||
_("setting is required for non-port connections"));
|
||||
g_prefix_error(&normalizable_error, "%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME);
|
||||
|
||||
/* having a master without IP config was not a verify() error, accept
|
||||
/* having a controller without IP config was not a verify() error, accept
|
||||
* it for backward compatibility. */
|
||||
normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE;
|
||||
}
|
||||
|
|
@ -1903,9 +1903,9 @@ _nm_connection_verify(NMConnection *connection, GError **error)
|
|||
g_set_error_literal(&normalizable_error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_SETTING,
|
||||
_("setting not allowed in slave connection"));
|
||||
_("setting not allowed in port connection"));
|
||||
g_prefix_error(&normalizable_error, "%s: ", NM_SETTING_IP4_CONFIG_SETTING_NAME);
|
||||
/* having a slave with IP config *was* and is a verify() error. */
|
||||
/* having a port with IP config *was* and is a verify() error. */
|
||||
normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
|
||||
}
|
||||
}
|
||||
|
|
@ -1915,10 +1915,10 @@ _nm_connection_verify(NMConnection *connection, GError **error)
|
|||
g_set_error_literal(&normalizable_error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_MISSING_SETTING,
|
||||
_("setting is required for non-slave connections"));
|
||||
_("setting is required for non-port connections"));
|
||||
g_prefix_error(&normalizable_error, "%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME);
|
||||
|
||||
/* having a master without IP config was not a verify() error, accept
|
||||
/* having a controller without IP config was not a verify() error, accept
|
||||
* it for backward compatibility. */
|
||||
normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE;
|
||||
}
|
||||
|
|
@ -1928,9 +1928,9 @@ _nm_connection_verify(NMConnection *connection, GError **error)
|
|||
g_set_error_literal(&normalizable_error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_SETTING,
|
||||
_("setting not allowed in slave connection"));
|
||||
_("setting not allowed in port connection"));
|
||||
g_prefix_error(&normalizable_error, "%s: ", NM_SETTING_IP6_CONFIG_SETTING_NAME);
|
||||
/* having a slave with IP config *was* and is a verify() error. */
|
||||
/* having a port with IP config *was* and is a verify() error. */
|
||||
normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
|
||||
}
|
||||
}
|
||||
|
|
@ -1940,10 +1940,10 @@ _nm_connection_verify(NMConnection *connection, GError **error)
|
|||
g_set_error_literal(&normalizable_error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_MISSING_SETTING,
|
||||
_("setting is required for non-slave connections"));
|
||||
_("setting is required for non-port connections"));
|
||||
g_prefix_error(&normalizable_error, "%s: ", NM_SETTING_PROXY_SETTING_NAME);
|
||||
|
||||
/* having a master without proxy config was not a verify() error, accept
|
||||
/* having a controller without proxy config was not a verify() error, accept
|
||||
* it for backward compatibility. */
|
||||
normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE;
|
||||
}
|
||||
|
|
@ -1953,9 +1953,9 @@ _nm_connection_verify(NMConnection *connection, GError **error)
|
|||
g_set_error_literal(&normalizable_error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_SETTING,
|
||||
_("setting not allowed in slave connection"));
|
||||
_("setting not allowed in port connection"));
|
||||
g_prefix_error(&normalizable_error, "%s: ", NM_SETTING_PROXY_SETTING_NAME);
|
||||
/* having a slave with proxy config *was* and is a verify() error. */
|
||||
/* having a port with proxy config *was* and is a verify() error. */
|
||||
normalizable_error_type = NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
|
||||
}
|
||||
}
|
||||
|
|
@ -2026,11 +2026,11 @@ _connection_normalize(NMConnection *connection,
|
|||
|
||||
was_modified |= _normalize_connection_uuid(connection);
|
||||
was_modified |= _normalize_connection_type(connection);
|
||||
was_modified |= _normalize_connection_slave_type(connection);
|
||||
was_modified |= _normalize_connection_port_type(connection);
|
||||
was_modified |= _normalize_connection_secondaries(connection);
|
||||
was_modified |= _normalize_connection(connection);
|
||||
was_modified |= _normalize_required_settings(connection);
|
||||
was_modified |= _normalize_invalid_slave_port_settings(connection);
|
||||
was_modified |= _normalize_invalid_port_port_settings(connection);
|
||||
was_modified |= _normalize_ip_config(connection, parameters);
|
||||
was_modified |= _normalize_ethernet_link_neg(connection);
|
||||
was_modified |= _normalize_infiniband(connection);
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ _secret_flags_persist_secret(NMSettingSecretFlags flags)
|
|||
/*****************************************************************************/
|
||||
/* Some setting properties also contain setting names, such as
|
||||
* NMSettingConnection's 'type' property (which specifies the base type of the
|
||||
* connection, e.g. ethernet or wifi) or 'slave-type' (specifies type of slave
|
||||
* connection, e.g. ethernet or wifi) or 'port-type' (specifies type of port
|
||||
* connection, e.g. bond or bridge). This function handles translating those
|
||||
* properties' values to the real setting name if they are an alias.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -87,24 +87,24 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
}
|
||||
|
||||
if (nm_utils_is_uuid(priv->parent)) {
|
||||
/* If we have an NMSettingConnection:master with slave-type="6lowpan",
|
||||
/* If we have an NMSettingConnection:controller with port-type="6lowpan",
|
||||
* then it must be the same UUID.
|
||||
*/
|
||||
if (s_con) {
|
||||
const char *master = NULL, *slave_type = NULL;
|
||||
const char *controller = NULL, *port_type = NULL;
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (!g_strcmp0(slave_type, NM_SETTING_6LOWPAN_SETTING_NAME))
|
||||
master = nm_setting_connection_get_controller(s_con);
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (!g_strcmp0(port_type, NM_SETTING_6LOWPAN_SETTING_NAME))
|
||||
controller = nm_setting_connection_get_controller(s_con);
|
||||
|
||||
if (master && g_strcmp0(priv->parent, master) != 0) {
|
||||
if (controller && g_strcmp0(priv->parent, controller) != 0) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("'%s' value doesn't match '%s=%s'"),
|
||||
priv->parent,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
master);
|
||||
controller);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_6LOWPAN_SETTING_NAME,
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
{
|
||||
if (connection) {
|
||||
NMSettingConnection *s_con;
|
||||
const char *slave_type;
|
||||
const char *port_type;
|
||||
|
||||
s_con = nm_connection_get_setting_connection(connection);
|
||||
if (!s_con) {
|
||||
|
|
@ -101,16 +101,16 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (slave_type && !nm_streq(slave_type, NM_SETTING_BOND_SETTING_NAME)) {
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (port_type && !nm_streq(port_type, NM_SETTING_BOND_SETTING_NAME)) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("A connection with a '%s' setting must have the slave-type set to '%s'. "
|
||||
_("A connection with a '%s' setting must have the port-type set to '%s'. "
|
||||
"Instead it is '%s'"),
|
||||
NM_SETTING_BOND_PORT_SETTING_NAME,
|
||||
NM_SETTING_BOND_SETTING_NAME,
|
||||
slave_type);
|
||||
port_type);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
||||
|
|
|
|||
|
|
@ -316,7 +316,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
|
||||
if (connection) {
|
||||
NMSettingConnection *s_con;
|
||||
const char *slave_type;
|
||||
const char *port_type;
|
||||
|
||||
s_con = nm_connection_get_setting_connection(connection);
|
||||
if (!s_con) {
|
||||
|
|
@ -328,16 +328,16 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (slave_type && strcmp(slave_type, NM_SETTING_BRIDGE_SETTING_NAME)) {
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (port_type && strcmp(port_type, NM_SETTING_BRIDGE_SETTING_NAME)) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("A connection with a '%s' setting must have the slave-type set to '%s'. "
|
||||
_("A connection with a '%s' setting must have the port-type set to '%s'. "
|
||||
"Instead it is '%s'"),
|
||||
NM_SETTING_BRIDGE_PORT_SETTING_NAME,
|
||||
NM_SETTING_BRIDGE_SETTING_NAME,
|
||||
slave_type);
|
||||
port_type);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
||||
|
|
|
|||
|
|
@ -712,7 +712,7 @@ nm_setting_connection_get_zone(NMSettingConnection *setting)
|
|||
*
|
||||
* Returns the #NMSettingConnection:master property of the connection.
|
||||
*
|
||||
* Returns: interface name of the master device or UUID of the master
|
||||
* Returns: interface name of the controller device or UUID of the controller
|
||||
* connection.
|
||||
*
|
||||
* Deprecated: 1.46. Use nm_setting_connection_get_master() instead which
|
||||
|
|
@ -767,7 +767,7 @@ nm_setting_connection_get_port_type(NMSettingConnection *setting)
|
|||
*
|
||||
* Returns the #NMSettingConnection:slave-type property of the connection.
|
||||
*
|
||||
* Returns: the type of slave this connection is, if any
|
||||
* Returns: the type of port this connection is, if any
|
||||
*
|
||||
* Deprecated: 1.46. Use nm_setting_connection_get_port_type() instead which
|
||||
* is just an alias.
|
||||
|
|
@ -782,9 +782,9 @@ nm_setting_connection_get_slave_type(NMSettingConnection *setting)
|
|||
* nm_setting_connection_is_slave_type:
|
||||
* @setting: the #NMSettingConnection
|
||||
* @type: the setting name (ie #NM_SETTING_BOND_SETTING_NAME) to be matched
|
||||
* against @setting's slave type
|
||||
* against @setting's port type
|
||||
*
|
||||
* Returns: %TRUE if connection is of the given slave @type
|
||||
* Returns: %TRUE if connection is of the given port @type
|
||||
*
|
||||
* Deprecated: 1.46.
|
||||
*/
|
||||
|
|
@ -875,7 +875,7 @@ nm_setting_connection_get_autoconnect_ports(NMSettingConnection *setting)
|
|||
*
|
||||
* Returns the #NMSettingConnection:autoconnect-slaves property of the connection.
|
||||
*
|
||||
* Returns: whether slaves of the connection should be activated together
|
||||
* Returns: whether ports of the connection should be activated together
|
||||
* with the connection.
|
||||
*
|
||||
* Since: 1.2
|
||||
|
|
@ -1149,33 +1149,33 @@ _set_error_missing_base_setting(GError **error, const char *type)
|
|||
}
|
||||
|
||||
gboolean
|
||||
_nm_connection_detect_slave_type_full(NMSettingConnection *s_con,
|
||||
NMConnection *connection,
|
||||
const char **out_slave_type,
|
||||
const char **out_normerr_slave_setting_type,
|
||||
const char **out_normerr_missing_slave_type,
|
||||
const char **out_normerr_missing_slave_type_port,
|
||||
GError **error)
|
||||
_nm_connection_detect_port_type_full(NMSettingConnection *s_con,
|
||||
NMConnection *connection,
|
||||
const char **out_port_type,
|
||||
const char **out_normerr_port_setting_type,
|
||||
const char **out_normerr_missing_port_type,
|
||||
const char **out_normerr_missing_port_type_port,
|
||||
GError **error)
|
||||
{
|
||||
NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE(s_con);
|
||||
gboolean is_slave;
|
||||
const char *slave_setting_type;
|
||||
const char *slave_type;
|
||||
const char *normerr_slave_setting_type = NULL;
|
||||
const char *normerr_missing_slave_type = NULL;
|
||||
const char *normerr_missing_slave_type_port = NULL;
|
||||
gboolean is_port;
|
||||
const char *port_setting_type;
|
||||
const char *port_type;
|
||||
const char *normerr_port_setting_type = NULL;
|
||||
const char *normerr_missing_port_type = NULL;
|
||||
const char *normerr_missing_port_type_port = NULL;
|
||||
|
||||
is_slave = FALSE;
|
||||
slave_setting_type = NULL;
|
||||
slave_type = priv->port_type;
|
||||
if (slave_type) {
|
||||
is_slave = _nm_setting_slave_type_is_valid(slave_type, &slave_setting_type);
|
||||
if (!is_slave) {
|
||||
is_port = FALSE;
|
||||
port_setting_type = NULL;
|
||||
port_type = priv->port_type;
|
||||
if (port_type) {
|
||||
is_port = _nm_setting_port_type_is_valid(port_type, &port_setting_type);
|
||||
if (!is_port) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("Unknown slave type '%s'"),
|
||||
slave_type);
|
||||
_("Unknown port type '%s'"),
|
||||
port_type);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
||||
|
|
@ -1184,7 +1184,7 @@ _nm_connection_detect_slave_type_full(NMSettingConnection *s_con,
|
|||
}
|
||||
}
|
||||
|
||||
if (is_slave) {
|
||||
if (is_port) {
|
||||
if (!priv->controller) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
|
|
@ -1197,18 +1197,17 @@ _nm_connection_detect_slave_type_full(NMSettingConnection *s_con,
|
|||
NM_SETTING_CONNECTION_CONTROLLER);
|
||||
return FALSE;
|
||||
}
|
||||
if (slave_setting_type && connection
|
||||
&& !nm_connection_get_setting_by_name(connection, slave_setting_type))
|
||||
normerr_slave_setting_type = slave_setting_type;
|
||||
if (port_setting_type && connection
|
||||
&& !nm_connection_get_setting_by_name(connection, port_setting_type))
|
||||
normerr_port_setting_type = port_setting_type;
|
||||
} else {
|
||||
nm_assert(!slave_type);
|
||||
nm_assert(!port_type);
|
||||
if (priv->controller) {
|
||||
NMSetting *s_port;
|
||||
|
||||
if (connection
|
||||
&& (slave_type = _nm_connection_detect_slave_type(connection, &s_port))) {
|
||||
normerr_missing_slave_type = slave_type;
|
||||
normerr_missing_slave_type_port = nm_setting_get_name(s_port);
|
||||
if (connection && (port_type = _nm_connection_detect_port_type(connection, &s_port))) {
|
||||
normerr_missing_port_type = port_type;
|
||||
normerr_missing_port_type_port = nm_setting_get_name(s_port);
|
||||
} else {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
|
|
@ -1225,10 +1224,10 @@ _nm_connection_detect_slave_type_full(NMSettingConnection *s_con,
|
|||
}
|
||||
}
|
||||
|
||||
NM_SET_OUT(out_slave_type, slave_type);
|
||||
NM_SET_OUT(out_normerr_slave_setting_type, normerr_slave_setting_type);
|
||||
NM_SET_OUT(out_normerr_missing_slave_type, normerr_missing_slave_type);
|
||||
NM_SET_OUT(out_normerr_missing_slave_type_port, normerr_missing_slave_type_port);
|
||||
NM_SET_OUT(out_port_type, port_type);
|
||||
NM_SET_OUT(out_normerr_port_setting_type, normerr_port_setting_type);
|
||||
NM_SET_OUT(out_normerr_missing_port_type, normerr_missing_port_type);
|
||||
NM_SET_OUT(out_normerr_missing_port_type_port, normerr_missing_port_type_port);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -1239,12 +1238,12 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE(self);
|
||||
NMSetting *normerr_base_type = NULL;
|
||||
const char *type;
|
||||
const char *slave_type;
|
||||
const char *normerr_slave_setting_type = NULL;
|
||||
const char *normerr_missing_slave_type = NULL;
|
||||
const char *normerr_missing_slave_type_port = NULL;
|
||||
gboolean normerr_base_setting = FALSE;
|
||||
gboolean uuid_was_normalized = FALSE;
|
||||
const char *port_type;
|
||||
const char *normerr_port_setting_type = NULL;
|
||||
const char *normerr_missing_port_type = NULL;
|
||||
const char *normerr_missing_port_type_port = NULL;
|
||||
gboolean normerr_base_setting = FALSE;
|
||||
gboolean uuid_was_normalized = FALSE;
|
||||
|
||||
if (!priv->id) {
|
||||
g_set_error_literal(error,
|
||||
|
|
@ -1409,24 +1408,24 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
}
|
||||
after_interface_name:
|
||||
|
||||
if (!_nm_connection_detect_slave_type_full(self,
|
||||
connection,
|
||||
&slave_type,
|
||||
&normerr_slave_setting_type,
|
||||
&normerr_missing_slave_type,
|
||||
&normerr_missing_slave_type_port,
|
||||
error))
|
||||
if (!_nm_connection_detect_port_type_full(self,
|
||||
connection,
|
||||
&port_type,
|
||||
&normerr_port_setting_type,
|
||||
&normerr_missing_port_type,
|
||||
&normerr_missing_port_type_port,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
if (nm_streq(type, NM_SETTING_OVS_PORT_SETTING_NAME) && slave_type
|
||||
&& !nm_streq(slave_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME)) {
|
||||
if (nm_streq(type, NM_SETTING_OVS_PORT_SETTING_NAME) && port_type
|
||||
&& !nm_streq(port_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME)) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
||||
_("'%s' connections must be enslaved to '%s', not '%s'"),
|
||||
_("'%s' connections must be attached as port to '%s', not '%s'"),
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NM_SETTING_OVS_BRIDGE_SETTING_NAME,
|
||||
slave_type);
|
||||
port_type);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
||||
|
|
@ -1643,27 +1642,27 @@ after_interface_name:
|
|||
return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
|
||||
}
|
||||
|
||||
if (normerr_slave_setting_type) {
|
||||
if (normerr_port_setting_type) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_MISSING_SETTING,
|
||||
_("port-type '%s' requires a '%s' setting in the connection"),
|
||||
priv->port_type,
|
||||
normerr_slave_setting_type);
|
||||
g_prefix_error(error, "%s: ", normerr_slave_setting_type);
|
||||
normerr_port_setting_type);
|
||||
g_prefix_error(error, "%s: ", normerr_port_setting_type);
|
||||
return NM_SETTING_VERIFY_NORMALIZABLE_ERROR;
|
||||
}
|
||||
|
||||
if (normerr_missing_slave_type) {
|
||||
if (normerr_missing_port_type) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_MISSING_PROPERTY,
|
||||
_("Detect a slave connection with '%s' set and a port type '%s'. '%s' should "
|
||||
_("Detect a port connection with '%s' set and a port type '%s'. '%s' should "
|
||||
"be set to '%s'"),
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
normerr_missing_slave_type_port,
|
||||
normerr_missing_port_type_port,
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
normerr_missing_slave_type);
|
||||
normerr_missing_port_type);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
||||
|
|
@ -1684,7 +1683,7 @@ after_interface_name:
|
|||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_SETTING,
|
||||
_("A slave connection with '%s' set to '%s' cannot have a '%s' setting"),
|
||||
_("A port connection with '%s' set to '%s' cannot have a '%s' setting"),
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
priv->port_type ?: "",
|
||||
has_bridge_port ? NM_SETTING_BRIDGE_PORT_SETTING_NAME
|
||||
|
|
@ -2531,14 +2530,14 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass)
|
|||
/**
|
||||
* NMSettingConnection:master:
|
||||
*
|
||||
* Interface name of the master device or UUID of the master connection.
|
||||
* Interface name of the controller device or UUID of the controller connection.
|
||||
*
|
||||
* Deprecated 1.46. Use #NMSettingConnection:controller instead, this is just an alias.
|
||||
**/
|
||||
/* ---ifcfg-rh---
|
||||
* property: master
|
||||
* variable: MASTER, MASTER_UUID, TEAM_MASTER, TEAM_MASTER_UUID, BRIDGE, BRIDGE_UUID
|
||||
* description: Reference to master connection. The variable used depends on
|
||||
* description: Reference to controller connection. The variable used depends on
|
||||
* the connection type and the value. In general, if the *_UUID variant is present,
|
||||
* the variant without *_UUID is ignored. NetworkManager attempts to write both
|
||||
* for compatibility with legacy tooling.
|
||||
|
|
@ -2589,9 +2588,9 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass)
|
|||
/**
|
||||
* NMSettingConnection:slave-type:
|
||||
*
|
||||
* Setting name of the device type of this slave's master connection (eg,
|
||||
* Setting name of the device type of this port's controller connection (eg,
|
||||
* %NM_SETTING_BOND_SETTING_NAME), or %NULL if this connection is not a
|
||||
* slave.
|
||||
* port.
|
||||
*
|
||||
* Deprecated 1.46. Use #NMSettingConnection:port-type instead, this is just an alias.
|
||||
**/
|
||||
|
|
@ -2655,13 +2654,13 @@ nm_setting_connection_class_init(NMSettingConnectionClass *klass)
|
|||
/**
|
||||
* NMSettingConnection:autoconnect-slaves:
|
||||
*
|
||||
* Whether or not slaves of this connection should be automatically brought up
|
||||
* Whether or not ports of this connection should be automatically brought up
|
||||
* when NetworkManager activates this connection. This only has a real effect
|
||||
* for master connections. The properties #NMSettingConnection:autoconnect,
|
||||
* for controller connections. The properties #NMSettingConnection:autoconnect,
|
||||
* #NMSettingConnection:autoconnect-priority and #NMSettingConnection:autoconnect-retries
|
||||
* are unrelated to this setting.
|
||||
* The permitted values are: 0: leave slave connections untouched,
|
||||
* 1: activate all the slave connections with this connection, -1: default.
|
||||
* The permitted values are: 0: leave port connections untouched,
|
||||
* 1: activate all the port connections with this connection, -1: default.
|
||||
* If -1 (default) is set, global connection.autoconnect-slaves is read to
|
||||
* determine the real value. If it is default as well, this fallbacks to 0.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -316,24 +316,24 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
|
||||
if (priv->parent) {
|
||||
if (nm_utils_is_uuid(priv->parent)) {
|
||||
/* If we have an NMSettingConnection:master with slave-type="macsec",
|
||||
/* If we have an NMSettingConnection:controller with port-type="macsec",
|
||||
* then it must be the same UUID.
|
||||
*/
|
||||
if (s_con) {
|
||||
const char *master = NULL, *slave_type = NULL;
|
||||
const char *controller = NULL, *port_type = NULL;
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (!g_strcmp0(slave_type, NM_SETTING_MACSEC_SETTING_NAME))
|
||||
master = nm_setting_connection_get_controller(s_con);
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (!g_strcmp0(port_type, NM_SETTING_MACSEC_SETTING_NAME))
|
||||
controller = nm_setting_connection_get_controller(s_con);
|
||||
|
||||
if (master && g_strcmp0(priv->parent, master) != 0) {
|
||||
if (controller && g_strcmp0(priv->parent, controller) != 0) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("'%s' value doesn't match '%s=%s'"),
|
||||
priv->parent,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
master);
|
||||
controller);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_MACSEC_SETTING_NAME,
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("A connection with a '%s' setting must not have a master."),
|
||||
_("A connection with a '%s' setting must not have a controller."),
|
||||
NM_SETTING_OVS_BRIDGE_SETTING_NAME);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ _nm_setting_ovs_verify_connection_type(GType gtype, NMConnection *connection, GE
|
|||
{
|
||||
NMSettingConnection *s_con;
|
||||
const char *type;
|
||||
const char *slave_type;
|
||||
const char *port_type;
|
||||
|
||||
nm_assert(!connection || NM_IS_CONNECTION(connection));
|
||||
nm_assert(NM_IN_SET(gtype, NM_TYPE_SETTING_OVS_EXTERNAL_IDS, NM_TYPE_SETTING_OVS_OTHER_CONFIG));
|
||||
|
|
@ -150,14 +150,14 @@ _nm_setting_ovs_verify_connection_type(GType gtype, NMConnection *connection, GE
|
|||
return TRUE;
|
||||
|
||||
if ((s_con = nm_connection_get_setting_connection(connection))
|
||||
&& _nm_connection_detect_slave_type_full(s_con,
|
||||
connection,
|
||||
&slave_type,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL)
|
||||
&& nm_streq0(slave_type, NM_SETTING_OVS_PORT_SETTING_NAME))
|
||||
&& _nm_connection_detect_port_type_full(s_con,
|
||||
connection,
|
||||
&port_type,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL)
|
||||
&& nm_streq0(port_type, NM_SETTING_OVS_PORT_SETTING_NAME))
|
||||
return TRUE;
|
||||
|
||||
g_set_error(error,
|
||||
|
|
|
|||
|
|
@ -296,7 +296,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
NMSettingConnection *s_con = NULL;
|
||||
|
||||
if (connection) {
|
||||
const char *slave_type;
|
||||
const char *port_type;
|
||||
|
||||
s_con = nm_connection_get_setting_connection(connection);
|
||||
if (!s_con) {
|
||||
|
|
@ -321,16 +321,16 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (slave_type && !nm_streq(slave_type, NM_SETTING_OVS_PORT_SETTING_NAME)) {
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (port_type && !nm_streq(port_type, NM_SETTING_OVS_PORT_SETTING_NAME)) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("A connection with a '%s' setting must have the slave-type set to '%s'. "
|
||||
_("A connection with a '%s' setting must have the port-type set to '%s'. "
|
||||
"Instead it is '%s'"),
|
||||
NM_SETTING_OVS_INTERFACE_SETTING_NAME,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
slave_type);
|
||||
port_type);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
||||
|
|
|
|||
|
|
@ -401,7 +401,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
|
||||
if (connection) {
|
||||
NMSettingConnection *s_con;
|
||||
const char *slave_type;
|
||||
const char *port_type;
|
||||
|
||||
s_con = nm_connection_get_setting_connection(connection);
|
||||
if (!s_con) {
|
||||
|
|
@ -417,7 +417,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("A connection with a '%s' setting must have a master."),
|
||||
_("A connection with a '%s' setting must have a controller."),
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
|
|
@ -426,8 +426,8 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (slave_type && strcmp(slave_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME)) {
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (port_type && strcmp(port_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME)) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
|
|
@ -435,7 +435,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
"Instead it is '%s'"),
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NM_SETTING_OVS_BRIDGE_SETTING_NAME,
|
||||
slave_type);
|
||||
port_type);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
||||
|
|
|
|||
|
|
@ -357,7 +357,7 @@ gboolean _nm_setting_verify_secret_string(const char *str,
|
|||
|
||||
gboolean _nm_setting_aggregate(NMSetting *setting, NMConnectionAggregateType type, gpointer arg);
|
||||
|
||||
gboolean _nm_setting_slave_type_is_valid(const char *slave_type, const char **out_port_type);
|
||||
gboolean _nm_setting_port_type_is_valid(const char *port_type, const char **out_port_type);
|
||||
|
||||
gboolean _nm_setting_compare_flags_check(const GParamSpec *param_spec,
|
||||
NMSettingCompareFlags flags,
|
||||
|
|
@ -407,20 +407,20 @@ GVariant *_nm_setting_connection_controller_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_F
|
|||
|
||||
gboolean _nm_setting_connection_master_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
|
||||
gboolean _nm_setting_connection_port_type_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
gboolean _nm_setting_connection_slave_type_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
|
||||
GVariant *_nm_setting_connection_port_type_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil);
|
||||
|
||||
gboolean _nm_setting_connection_slave_type_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
gboolean _nm_setting_connection_port_type_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
|
||||
gboolean
|
||||
_nm_setting_connection_autoconnect_ports_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
_nm_setting_connection_autoconnect_slaves_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
|
||||
GVariant *
|
||||
_nm_setting_connection_autoconnect_ports_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil);
|
||||
|
||||
gboolean
|
||||
_nm_setting_connection_autoconnect_slaves_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
_nm_setting_connection_autoconnect_ports_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
|
||||
gboolean _nm_setting_wireless_mac_denylist_from_dbus(_NM_SETT_INFO_PROP_FROM_DBUS_FCN_ARGS _nm_nil);
|
||||
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
|
||||
if (connection) {
|
||||
NMSettingConnection *s_con;
|
||||
const char *slave_type;
|
||||
const char *port_type;
|
||||
|
||||
s_con = nm_connection_get_setting_connection(connection);
|
||||
if (!s_con) {
|
||||
|
|
@ -323,16 +323,16 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (slave_type && strcmp(slave_type, NM_SETTING_TEAM_SETTING_NAME)) {
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (port_type && strcmp(port_type, NM_SETTING_TEAM_SETTING_NAME)) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("A connection with a '%s' setting must have the slave-type set to '%s'. "
|
||||
_("A connection with a '%s' setting must have the port-type set to '%s'. "
|
||||
"Instead it is '%s'"),
|
||||
NM_SETTING_TEAM_PORT_SETTING_NAME,
|
||||
NM_SETTING_TEAM_SETTING_NAME,
|
||||
slave_type);
|
||||
port_type);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_CONNECTION_SETTING_NAME,
|
||||
|
|
|
|||
|
|
@ -592,7 +592,7 @@ nm_team_link_watcher_get_delay_down(const NMTeamLinkWatcher *watcher)
|
|||
* nm_team_link_watcher_get_init_wait:
|
||||
* @watcher: the #NMTeamLinkWatcher
|
||||
*
|
||||
* Gets the init_wait interval (in milliseconds) that the team slave should
|
||||
* Gets the init_wait interval (in milliseconds) that the team port should
|
||||
* wait before sending the first packet to the target host.
|
||||
*
|
||||
* Since: 1.12
|
||||
|
|
@ -613,7 +613,7 @@ nm_team_link_watcher_get_init_wait(const NMTeamLinkWatcher *watcher)
|
|||
* nm_team_link_watcher_get_interval:
|
||||
* @watcher: the #NMTeamLinkWatcher
|
||||
*
|
||||
* Gets the interval (in milliseconds) that the team slave should wait between
|
||||
* Gets the interval (in milliseconds) that the team port should wait between
|
||||
* sending two check packets to the target host.
|
||||
*
|
||||
* Since: 1.12
|
||||
|
|
@ -727,7 +727,7 @@ nm_team_link_watcher_get_flags(const NMTeamLinkWatcher *watcher)
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static GParamSpec *obj_properties[_NM_TEAM_ATTRIBUTE_MASTER_NUM] = {
|
||||
static GParamSpec *obj_properties[_NM_TEAM_ATTRIBUTE_CONTROLLER_NUM] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
|
@ -804,7 +804,7 @@ nm_setting_team_get_notify_peers_count(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), 0);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.notify_peers_count;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.notify_peers_count;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -820,7 +820,7 @@ nm_setting_team_get_notify_peers_interval(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), 0);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.notify_peers_interval;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.notify_peers_interval;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -836,7 +836,7 @@ nm_setting_team_get_mcast_rejoin_count(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), 0);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.mcast_rejoin_count;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.mcast_rejoin_count;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -852,7 +852,7 @@ nm_setting_team_get_mcast_rejoin_interval(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), 0);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.mcast_rejoin_interval;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.mcast_rejoin_interval;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -868,7 +868,7 @@ nm_setting_team_get_runner(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), NULL);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -884,7 +884,7 @@ nm_setting_team_get_runner_hwaddr_policy(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), NULL);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_hwaddr_policy;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner_hwaddr_policy;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -900,7 +900,7 @@ nm_setting_team_get_runner_tx_balancer(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), NULL);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_tx_balancer;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner_tx_balancer;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -916,7 +916,8 @@ nm_setting_team_get_runner_tx_balancer_interval(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), 0);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_tx_balancer_interval;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)
|
||||
->team_setting->d.controller.runner_tx_balancer_interval;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -932,7 +933,7 @@ nm_setting_team_get_runner_active(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), FALSE);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_active;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner_active;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -948,7 +949,7 @@ nm_setting_team_get_runner_fast_rate(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), FALSE);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_fast_rate;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner_fast_rate;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -964,7 +965,7 @@ nm_setting_team_get_runner_sys_prio(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), 0);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_sys_prio;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner_sys_prio;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -980,7 +981,7 @@ nm_setting_team_get_runner_min_ports(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), 0);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_min_ports;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner_min_ports;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -996,7 +997,8 @@ nm_setting_team_get_runner_agg_select_policy(NMSettingTeam *setting)
|
|||
{
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), NULL);
|
||||
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_agg_select_policy;
|
||||
return NM_SETTING_TEAM_GET_PRIVATE(setting)
|
||||
->team_setting->d.controller.runner_agg_select_policy;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1020,13 +1022,13 @@ nm_setting_team_remove_runner_tx_hash_by_value(NMSettingTeam *setting, const cha
|
|||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), FALSE);
|
||||
g_return_val_if_fail(txhash != NULL, FALSE);
|
||||
|
||||
arr = priv->team_setting->d.master.runner_tx_hash;
|
||||
arr = priv->team_setting->d.controller.runner_tx_hash;
|
||||
if (arr) {
|
||||
for (i = 0; i < arr->len; i++) {
|
||||
if (nm_streq(txhash, arr->pdata[i])) {
|
||||
_maybe_changed_with_assert(
|
||||
setting,
|
||||
nm_team_setting_value_master_runner_tx_hash_remove(priv->team_setting, i));
|
||||
nm_team_setting_value_controller_runner_tx_hash_remove(priv->team_setting, i));
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1049,7 +1051,7 @@ nm_setting_team_get_num_runner_tx_hash(NMSettingTeam *setting)
|
|||
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), 0);
|
||||
|
||||
arr = NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_tx_hash;
|
||||
arr = NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner_tx_hash;
|
||||
return arr ? arr->len : 0u;
|
||||
}
|
||||
|
||||
|
|
@ -1069,7 +1071,7 @@ nm_setting_team_get_runner_tx_hash(NMSettingTeam *setting, guint idx)
|
|||
|
||||
g_return_val_if_fail(NM_IS_SETTING_TEAM(setting), NULL);
|
||||
|
||||
arr = NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.master.runner_tx_hash;
|
||||
arr = NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting->d.controller.runner_tx_hash;
|
||||
|
||||
g_return_val_if_fail(arr, NULL);
|
||||
g_return_val_if_fail(idx < arr->len, NULL);
|
||||
|
|
@ -1095,12 +1097,12 @@ nm_setting_team_remove_runner_tx_hash(NMSettingTeam *setting, guint idx)
|
|||
|
||||
priv = NM_SETTING_TEAM_GET_PRIVATE(setting);
|
||||
|
||||
g_return_if_fail(priv->team_setting->d.master.runner_tx_hash);
|
||||
g_return_if_fail(idx < priv->team_setting->d.master.runner_tx_hash->len);
|
||||
g_return_if_fail(priv->team_setting->d.controller.runner_tx_hash);
|
||||
g_return_if_fail(idx < priv->team_setting->d.controller.runner_tx_hash->len);
|
||||
|
||||
_maybe_changed_with_assert(
|
||||
setting,
|
||||
nm_team_setting_value_master_runner_tx_hash_remove(priv->team_setting, idx));
|
||||
nm_team_setting_value_controller_runner_tx_hash_remove(priv->team_setting, idx));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1122,7 +1124,7 @@ nm_setting_team_add_runner_tx_hash(NMSettingTeam *setting, const char *txhash)
|
|||
g_return_val_if_fail(txhash, FALSE);
|
||||
|
||||
return _maybe_changed(setting,
|
||||
nm_team_setting_value_master_runner_tx_hash_add(
|
||||
nm_team_setting_value_controller_runner_tx_hash_add(
|
||||
NM_SETTING_TEAM_GET_PRIVATE(setting)->team_setting,
|
||||
txhash));
|
||||
}
|
||||
|
|
@ -1359,27 +1361,27 @@ get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
|
|||
case NM_TEAM_ATTRIBUTE_CONFIG:
|
||||
g_value_set_string(value, nm_team_setting_config_get(priv->team_setting));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_ACTIVE:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_FAST_RATE:
|
||||
g_value_set_boolean(value, nm_team_setting_value_get_bool(priv->team_setting, prop_id));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_COUNT:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_COUNT:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_MIN_PORTS:
|
||||
g_value_set_int(value, nm_team_setting_value_get_int32(priv->team_setting, prop_id));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_HWADDR_POLICY:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_AGG_SELECT_POLICY:
|
||||
g_value_set_string(value, nm_team_setting_value_get_string(priv->team_setting, prop_id));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH:
|
||||
v_ptrarr = priv->team_setting->d.master.runner_tx_hash;
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH:
|
||||
v_ptrarr = priv->team_setting->d.controller.runner_tx_hash;
|
||||
g_value_take_boxed(value, nm_strv_ptrarray_to_strv_full(v_ptrarr, FALSE));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_LINK_WATCHERS:
|
||||
|
|
@ -1406,32 +1408,32 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps
|
|||
case NM_TEAM_ATTRIBUTE_CONFIG:
|
||||
changed = nm_team_setting_config_set(priv->team_setting, g_value_get_string(value));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_ACTIVE:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_FAST_RATE:
|
||||
changed =
|
||||
nm_team_setting_value_set_bool(priv->team_setting, prop_id, g_value_get_boolean(value));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_COUNT:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_COUNT:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER_INTERVAL:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_MIN_PORTS:
|
||||
changed =
|
||||
nm_team_setting_value_set_int32(priv->team_setting, prop_id, g_value_get_int(value));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY:
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_HWADDR_POLICY:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_AGG_SELECT_POLICY:
|
||||
changed = nm_team_setting_value_set_string(priv->team_setting,
|
||||
prop_id,
|
||||
g_value_get_string(value));
|
||||
break;
|
||||
case NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH:
|
||||
case NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH:
|
||||
v_ptrarr = g_value_get_boxed(value);
|
||||
changed = nm_team_setting_value_master_runner_tx_hash_set_list(
|
||||
changed = nm_team_setting_value_controller_runner_tx_hash_set_list(
|
||||
priv->team_setting,
|
||||
v_ptrarr ? (const char *const *) v_ptrarr->pdata : NULL,
|
||||
v_ptrarr ? v_ptrarr->len : 0u);
|
||||
|
|
@ -1535,7 +1537,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_COUNT] =
|
||||
g_param_spec_int(NM_SETTING_TEAM_NOTIFY_PEERS_COUNT,
|
||||
"",
|
||||
"",
|
||||
|
|
@ -1544,7 +1546,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
-1,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_COUNT],
|
||||
&nm_sett_info_propert_type_team_i);
|
||||
|
||||
/**
|
||||
|
|
@ -1554,7 +1556,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_INTERVAL] =
|
||||
g_param_spec_int(NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL,
|
||||
"",
|
||||
"",
|
||||
|
|
@ -1563,7 +1565,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
-1,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_INTERVAL],
|
||||
&nm_sett_info_propert_type_team_i);
|
||||
|
||||
/**
|
||||
|
|
@ -1573,7 +1575,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_COUNT] =
|
||||
g_param_spec_int(NM_SETTING_TEAM_MCAST_REJOIN_COUNT,
|
||||
"",
|
||||
"",
|
||||
|
|
@ -1582,7 +1584,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
-1,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_COUNT],
|
||||
&nm_sett_info_propert_type_team_i);
|
||||
|
||||
/**
|
||||
|
|
@ -1592,7 +1594,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_INTERVAL] =
|
||||
g_param_spec_int(NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL,
|
||||
"",
|
||||
"",
|
||||
|
|
@ -1601,7 +1603,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
-1,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_INTERVAL],
|
||||
&nm_sett_info_propert_type_team_i);
|
||||
|
||||
/**
|
||||
|
|
@ -1613,14 +1615,14 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER] =
|
||||
g_param_spec_string(NM_SETTING_TEAM_RUNNER,
|
||||
"",
|
||||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER],
|
||||
&nm_sett_info_propert_type_team_s);
|
||||
|
||||
/**
|
||||
|
|
@ -1630,14 +1632,14 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_HWADDR_POLICY] =
|
||||
g_param_spec_string(NM_SETTING_TEAM_RUNNER_HWADDR_POLICY,
|
||||
"",
|
||||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_HWADDR_POLICY],
|
||||
&nm_sett_info_propert_type_team_s);
|
||||
|
||||
/**
|
||||
|
|
@ -1647,14 +1649,14 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH] = g_param_spec_boxed(
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH] = g_param_spec_boxed(
|
||||
NM_SETTING_TEAM_RUNNER_TX_HASH,
|
||||
"",
|
||||
"",
|
||||
G_TYPE_STRV,
|
||||
G_PARAM_READWRITE | NM_SETTING_PARAM_INFERRABLE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH],
|
||||
&nm_sett_info_propert_type_team_as);
|
||||
|
||||
/**
|
||||
|
|
@ -1664,14 +1666,14 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER] =
|
||||
g_param_spec_string(NM_SETTING_TEAM_RUNNER_TX_BALANCER,
|
||||
"",
|
||||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER],
|
||||
&nm_sett_info_propert_type_team_s);
|
||||
|
||||
/**
|
||||
|
|
@ -1681,7 +1683,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER_INTERVAL] =
|
||||
g_param_spec_int(NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL,
|
||||
"",
|
||||
"",
|
||||
|
|
@ -1691,7 +1693,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(
|
||||
properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER_INTERVAL],
|
||||
&nm_sett_info_propert_type_team_i);
|
||||
|
||||
/**
|
||||
|
|
@ -1701,14 +1703,14 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_ACTIVE] =
|
||||
g_param_spec_boolean(NM_SETTING_TEAM_RUNNER_ACTIVE,
|
||||
"",
|
||||
"",
|
||||
TRUE,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_ACTIVE],
|
||||
&nm_sett_info_propert_type_team_b);
|
||||
|
||||
/**
|
||||
|
|
@ -1718,14 +1720,14 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_FAST_RATE] =
|
||||
g_param_spec_boolean(NM_SETTING_TEAM_RUNNER_FAST_RATE,
|
||||
"",
|
||||
"",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_FAST_RATE],
|
||||
&nm_sett_info_propert_type_team_b);
|
||||
|
||||
/**
|
||||
|
|
@ -1735,7 +1737,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO] =
|
||||
g_param_spec_int(NM_SETTING_TEAM_RUNNER_SYS_PRIO,
|
||||
"",
|
||||
"",
|
||||
|
|
@ -1744,7 +1746,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
-1,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO],
|
||||
&nm_sett_info_propert_type_team_i);
|
||||
|
||||
/**
|
||||
|
|
@ -1754,7 +1756,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_MIN_PORTS] =
|
||||
g_param_spec_int(NM_SETTING_TEAM_RUNNER_MIN_PORTS,
|
||||
"",
|
||||
"",
|
||||
|
|
@ -1763,7 +1765,7 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
-1,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS],
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_MIN_PORTS],
|
||||
&nm_sett_info_propert_type_team_i);
|
||||
|
||||
/**
|
||||
|
|
@ -1773,15 +1775,16 @@ nm_setting_team_class_init(NMSettingTeamClass *klass)
|
|||
*
|
||||
* Since: 1.12
|
||||
**/
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY] =
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_AGG_SELECT_POLICY] =
|
||||
g_param_spec_string(NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY,
|
||||
"",
|
||||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
_nm_properties_override_gobj(properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY],
|
||||
&nm_sett_info_propert_type_team_s);
|
||||
_nm_properties_override_gobj(
|
||||
properties_override,
|
||||
obj_properties[NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_AGG_SELECT_POLICY],
|
||||
&nm_sett_info_propert_type_team_s);
|
||||
|
||||
/**
|
||||
* NMSettingTeam:link-watchers: (type GPtrArray(NMTeamLinkWatcher))
|
||||
|
|
|
|||
|
|
@ -608,24 +608,24 @@ verify(NMSetting *setting, NMConnection *connection, GError **error)
|
|||
|
||||
if (priv->parent) {
|
||||
if (nm_utils_is_uuid(priv->parent)) {
|
||||
/* If we have an NMSettingConnection:master with slave-type="vlan",
|
||||
/* If we have an NMSettingConnection:controller with port-type="vlan",
|
||||
* then it must be the same UUID.
|
||||
*/
|
||||
if (s_con) {
|
||||
const char *master = NULL, *slave_type = NULL;
|
||||
const char *controller = NULL, *port_type = NULL;
|
||||
|
||||
slave_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (!g_strcmp0(slave_type, NM_SETTING_VLAN_SETTING_NAME))
|
||||
master = nm_setting_connection_get_controller(s_con);
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
if (!g_strcmp0(port_type, NM_SETTING_VLAN_SETTING_NAME))
|
||||
controller = nm_setting_connection_get_controller(s_con);
|
||||
|
||||
if (master && g_strcmp0(priv->parent, master) != 0) {
|
||||
if (controller && g_strcmp0(priv->parent, controller) != 0) {
|
||||
g_set_error(error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_INVALID_PROPERTY,
|
||||
_("'%s' value doesn't match '%s=%s'"),
|
||||
priv->parent,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
master);
|
||||
controller);
|
||||
g_prefix_error(error,
|
||||
"%s.%s: ",
|
||||
NM_SETTING_VLAN_SETTING_NAME,
|
||||
|
|
@ -908,7 +908,7 @@ nm_setting_vlan_class_init(NMSettingVlanClass *klass)
|
|||
* interface. Flags include %NM_VLAN_FLAG_REORDER_HEADERS (reordering of
|
||||
* output packet headers), %NM_VLAN_FLAG_GVRP (use of the GVRP protocol),
|
||||
* and %NM_VLAN_FLAG_LOOSE_BINDING (loose binding of the interface to its
|
||||
* master device's operating state). %NM_VLAN_FLAG_MVRP (use of the MVRP
|
||||
* controller device's operating state). %NM_VLAN_FLAG_MVRP (use of the MVRP
|
||||
* protocol).
|
||||
*
|
||||
* The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS,
|
||||
|
|
|
|||
|
|
@ -138,22 +138,24 @@ _nm_setting_compare_priority(gconstpointer a, gconstpointer b)
|
|||
/*****************************************************************************/
|
||||
|
||||
gboolean
|
||||
_nm_setting_slave_type_is_valid(const char *slave_type, const char **out_port_type)
|
||||
_nm_setting_port_type_is_valid(const char *port_setting_type, const char **out_port_type)
|
||||
{
|
||||
const char *port_type = NULL;
|
||||
gboolean found = TRUE;
|
||||
|
||||
if (!slave_type)
|
||||
if (!port_setting_type)
|
||||
found = FALSE;
|
||||
else if (NM_IN_STRSET(slave_type, NM_SETTING_BOND_SETTING_NAME, NM_SETTING_VRF_SETTING_NAME)) {
|
||||
else if (NM_IN_STRSET(port_setting_type,
|
||||
NM_SETTING_BOND_SETTING_NAME,
|
||||
NM_SETTING_VRF_SETTING_NAME)) {
|
||||
/* pass */
|
||||
} else if (nm_streq(slave_type, NM_SETTING_BRIDGE_SETTING_NAME))
|
||||
} else if (nm_streq(port_setting_type, NM_SETTING_BRIDGE_SETTING_NAME))
|
||||
port_type = NM_SETTING_BRIDGE_PORT_SETTING_NAME;
|
||||
else if (nm_streq(slave_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME))
|
||||
else if (nm_streq(port_setting_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME))
|
||||
port_type = NM_SETTING_OVS_PORT_SETTING_NAME;
|
||||
else if (nm_streq(slave_type, NM_SETTING_OVS_PORT_SETTING_NAME))
|
||||
else if (nm_streq(port_setting_type, NM_SETTING_OVS_PORT_SETTING_NAME))
|
||||
port_type = NM_SETTING_OVS_INTERFACE_SETTING_NAME;
|
||||
else if (nm_streq(slave_type, NM_SETTING_TEAM_SETTING_NAME))
|
||||
else if (nm_streq(port_setting_type, NM_SETTING_TEAM_SETTING_NAME))
|
||||
port_type = NM_SETTING_TEAM_PORT_SETTING_NAME;
|
||||
else
|
||||
found = FALSE;
|
||||
|
|
|
|||
|
|
@ -94,39 +94,39 @@ typedef struct {
|
|||
|
||||
static const RunnerCompatElem _runner_compat_lst[] = {
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_HWADDR_POLICY,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_ACTIVEBACKUP),
|
||||
},
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_LOADBALANCE, NM_SETTING_TEAM_RUNNER_LACP),
|
||||
},
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_LOADBALANCE, NM_SETTING_TEAM_RUNNER_LACP),
|
||||
},
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER_INTERVAL,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_LOADBALANCE, NM_SETTING_TEAM_RUNNER_LACP),
|
||||
},
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_ACTIVE,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_LACP),
|
||||
},
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_FAST_RATE,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_LACP),
|
||||
},
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_LACP),
|
||||
},
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_MIN_PORTS,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_LACP),
|
||||
},
|
||||
{
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_AGG_SELECT_POLICY,
|
||||
NM_MAKE_STRV(NM_SETTING_TEAM_RUNNER_LACP),
|
||||
},
|
||||
};
|
||||
|
|
@ -148,16 +148,16 @@ typedef struct {
|
|||
NMValueType value_type;
|
||||
guint8 field_offset;
|
||||
guint8 js_keys_len;
|
||||
bool for_master : 1;
|
||||
bool for_controller : 1;
|
||||
bool for_port : 1;
|
||||
bool has_range : 1;
|
||||
} TeamAttrData;
|
||||
|
||||
#define TEAM_ATTR_IDX(_is_port, _team_attr) \
|
||||
(((!(_is_port) || (_team_attr) < _NM_TEAM_ATTRIBUTE_START) \
|
||||
? (int) (_team_attr) \
|
||||
: (((int) (_NM_TEAM_ATTRIBUTE_MASTER_NUM - _NM_TEAM_ATTRIBUTE_START)) \
|
||||
+ ((int) (_team_attr)))) \
|
||||
#define TEAM_ATTR_IDX(_is_port, _team_attr) \
|
||||
(((!(_is_port) || (_team_attr) < _NM_TEAM_ATTRIBUTE_START) \
|
||||
? (int) (_team_attr) \
|
||||
: (((int) (_NM_TEAM_ATTRIBUTE_CONTROLLER_NUM - _NM_TEAM_ATTRIBUTE_START)) \
|
||||
+ ((int) (_team_attr)))) \
|
||||
- 1)
|
||||
|
||||
#define TEAM_ATTR_IDX_CONFIG (TEAM_ATTR_IDX(FALSE, NM_TEAM_ATTRIBUTE_CONFIG))
|
||||
|
|
@ -187,15 +187,15 @@ static const TeamAttrData team_attr_datas[] = {
|
|||
|
||||
#define _VAL_UNSPEC() .default_val.v_string = (NULL)
|
||||
|
||||
#define _INIT(_is_port, _team_attr, field, _value_type, _property_name, ...) \
|
||||
[TEAM_ATTR_IDX(_is_port, _team_attr)] = { \
|
||||
.for_master = (_team_attr) < _NM_TEAM_ATTRIBUTE_START || !(_is_port), \
|
||||
.for_port = (_team_attr) < _NM_TEAM_ATTRIBUTE_START || (_is_port), \
|
||||
.team_attr = (_team_attr), \
|
||||
.field_offset = G_STRUCT_OFFSET(NMTeamSetting, _data_priv.field), \
|
||||
.value_type = (_value_type), \
|
||||
.property_name = ""_property_name \
|
||||
"", \
|
||||
#define _INIT(_is_port, _team_attr, field, _value_type, _property_name, ...) \
|
||||
[TEAM_ATTR_IDX(_is_port, _team_attr)] = { \
|
||||
.for_controller = (_team_attr) < _NM_TEAM_ATTRIBUTE_START || !(_is_port), \
|
||||
.for_port = (_team_attr) < _NM_TEAM_ATTRIBUTE_START || (_is_port), \
|
||||
.team_attr = (_team_attr), \
|
||||
.field_offset = G_STRUCT_OFFSET(NMTeamSetting, _data_priv.field), \
|
||||
.value_type = (_value_type), \
|
||||
.property_name = ""_property_name \
|
||||
"", \
|
||||
__VA_ARGS__}
|
||||
|
||||
_INIT(0, NM_TEAM_ATTRIBUTE_CONFIG, _js_str, NM_VALUE_TYPE_UNSPEC, NM_SETTING_TEAM_CONFIG, ),
|
||||
|
|
@ -209,99 +209,99 @@ static const TeamAttrData team_attr_datas[] = {
|
|||
_VAL_UNSPEC(), ),
|
||||
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT,
|
||||
master.notify_peers_count,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_COUNT,
|
||||
controller.notify_peers_count,
|
||||
NM_VALUE_TYPE_INT32,
|
||||
NM_SETTING_TEAM_NOTIFY_PEERS_COUNT,
|
||||
_JS_KEYS("notify_peers", "count"),
|
||||
_VAL_INT32_RANGE(-1, 0, G_MAXINT32), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL,
|
||||
master.notify_peers_interval,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_INTERVAL,
|
||||
controller.notify_peers_interval,
|
||||
NM_VALUE_TYPE_INT32,
|
||||
NM_SETTING_TEAM_NOTIFY_PEERS_INTERVAL,
|
||||
_JS_KEYS("notify_peers", "interval"),
|
||||
_VAL_INT32_RANGE(-1, 0, G_MAXINT32), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT,
|
||||
master.mcast_rejoin_count,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_COUNT,
|
||||
controller.mcast_rejoin_count,
|
||||
NM_VALUE_TYPE_INT32,
|
||||
NM_SETTING_TEAM_MCAST_REJOIN_COUNT,
|
||||
_JS_KEYS("mcast_rejoin", "count"),
|
||||
_VAL_INT32_RANGE(-1, 0, G_MAXINT32), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL,
|
||||
master.mcast_rejoin_interval,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_INTERVAL,
|
||||
controller.mcast_rejoin_interval,
|
||||
NM_VALUE_TYPE_INT32,
|
||||
NM_SETTING_TEAM_MCAST_REJOIN_INTERVAL,
|
||||
_JS_KEYS("mcast_rejoin", "interval"),
|
||||
_VAL_INT32_RANGE(-1, 0, G_MAXINT32), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER,
|
||||
master.runner,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER,
|
||||
controller.runner,
|
||||
NM_VALUE_TYPE_STRING,
|
||||
NM_SETTING_TEAM_RUNNER,
|
||||
_JS_KEYS("runner", "name"),
|
||||
_VAL_STRING_RANGE(_valid_names_runner), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY,
|
||||
master.runner_hwaddr_policy,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_HWADDR_POLICY,
|
||||
controller.runner_hwaddr_policy,
|
||||
NM_VALUE_TYPE_STRING,
|
||||
NM_SETTING_TEAM_RUNNER_HWADDR_POLICY,
|
||||
_JS_KEYS("runner", "hwaddr_policy"),
|
||||
_VAL_STRING_RANGE(_valid_names_runner_hwaddr_policy), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH,
|
||||
master.runner_tx_hash,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH,
|
||||
controller.runner_tx_hash,
|
||||
NM_VALUE_TYPE_UNSPEC,
|
||||
NM_SETTING_TEAM_RUNNER_TX_HASH,
|
||||
_JS_KEYS("runner", "tx_hash"),
|
||||
_VAL_UNSPEC(), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER,
|
||||
master.runner_tx_balancer,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER,
|
||||
controller.runner_tx_balancer,
|
||||
NM_VALUE_TYPE_STRING,
|
||||
NM_SETTING_TEAM_RUNNER_TX_BALANCER,
|
||||
_JS_KEYS("runner", "tx_balancer", "name"),
|
||||
_VAL_STRING_RANGE(_valid_names_runner_tx_balancer), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL,
|
||||
master.runner_tx_balancer_interval,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER_INTERVAL,
|
||||
controller.runner_tx_balancer_interval,
|
||||
NM_VALUE_TYPE_INT32,
|
||||
NM_SETTING_TEAM_RUNNER_TX_BALANCER_INTERVAL,
|
||||
_JS_KEYS("runner", "tx_balancer", "balancing_interval"),
|
||||
_VAL_INT32_RANGE(-1, 0, G_MAXINT32), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE,
|
||||
master.runner_active,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_ACTIVE,
|
||||
controller.runner_active,
|
||||
NM_VALUE_TYPE_BOOL,
|
||||
NM_SETTING_TEAM_RUNNER_ACTIVE,
|
||||
_JS_KEYS("runner", "active"),
|
||||
_VAL_BOOL(TRUE), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE,
|
||||
master.runner_fast_rate,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_FAST_RATE,
|
||||
controller.runner_fast_rate,
|
||||
NM_VALUE_TYPE_BOOL,
|
||||
NM_SETTING_TEAM_RUNNER_FAST_RATE,
|
||||
_JS_KEYS("runner", "fast_rate"),
|
||||
_VAL_BOOL(FALSE), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO,
|
||||
master.runner_sys_prio,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO,
|
||||
controller.runner_sys_prio,
|
||||
NM_VALUE_TYPE_INT32,
|
||||
NM_SETTING_TEAM_RUNNER_SYS_PRIO,
|
||||
_JS_KEYS("runner", "sys_prio"),
|
||||
_VAL_INT32_RANGE(-1, 0, USHRT_MAX + 1), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS,
|
||||
master.runner_min_ports,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_MIN_PORTS,
|
||||
controller.runner_min_ports,
|
||||
NM_VALUE_TYPE_INT32,
|
||||
NM_SETTING_TEAM_RUNNER_MIN_PORTS,
|
||||
_JS_KEYS("runner", "min_ports"),
|
||||
_VAL_INT32_RANGE(-1, 1, UCHAR_MAX + 1), ),
|
||||
_INIT(0,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY,
|
||||
master.runner_agg_select_policy,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_AGG_SELECT_POLICY,
|
||||
controller.runner_agg_select_policy,
|
||||
NM_VALUE_TYPE_STRING,
|
||||
NM_SETTING_TEAM_RUNNER_AGG_SELECT_POLICY,
|
||||
_JS_KEYS("runner", "agg_select_policy"),
|
||||
|
|
@ -437,7 +437,7 @@ _team_attr_data_ASSERT(const TeamAttrData *attr_data)
|
|||
nm_assert(attr_data);
|
||||
if (attr_data->for_port)
|
||||
nm_assert(attr_data == _team_attr_data_get(TRUE, attr_data->team_attr));
|
||||
if (attr_data->for_master)
|
||||
if (attr_data->for_controller)
|
||||
nm_assert(attr_data == _team_attr_data_get(FALSE, attr_data->team_attr));
|
||||
nm_assert((attr_data - team_attr_datas)
|
||||
== TEAM_ATTR_IDX(attr_data->for_port, attr_data->team_attr));
|
||||
|
|
@ -463,7 +463,7 @@ _team_attr_data_ASSERT(const TeamAttrData *attr_data)
|
|||
static gboolean
|
||||
_team_attr_data_is_relevant(const TeamAttrData *attr_data, gboolean is_port)
|
||||
{
|
||||
return is_port ? attr_data->for_port : attr_data->for_master;
|
||||
return is_port ? attr_data->for_port : attr_data->for_controller;
|
||||
}
|
||||
|
||||
static const TeamAttrData *
|
||||
|
|
@ -520,7 +520,7 @@ _team_attr_data_cmp(const TeamAttrData *attr_data,
|
|||
len,
|
||||
FALSE));
|
||||
}
|
||||
} else if (!is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH) {
|
||||
} else if (!is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH) {
|
||||
v_ptrarray_a = *((const GPtrArray *const *) val_a);
|
||||
v_ptrarray_b = *((const GPtrArray *const *) val_b);
|
||||
NM_CMP_RETURN(nm_strv_cmp_n(v_ptrarray_a ? (const char *const *) v_ptrarray_a->pdata : NULL,
|
||||
|
|
@ -574,7 +574,7 @@ _team_attr_data_copy(const TeamAttrData *attr_data,
|
|||
g_ptr_array_unref(v_ptrarray_dst);
|
||||
*((GPtrArray **) dst) = dst_array;
|
||||
}
|
||||
} else if (!is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH) {
|
||||
} else if (!is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH) {
|
||||
v_ptrarray_src = *((const GPtrArray *const *) src);
|
||||
v_ptrarray_dst = *((GPtrArray **) dst);
|
||||
len = (v_ptrarray_src ? v_ptrarray_src->len : 0u);
|
||||
|
|
@ -631,7 +631,7 @@ _team_attr_data_to_json(const TeamAttrData *attr_data,
|
|||
return;
|
||||
}
|
||||
|
||||
if (!is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH) {
|
||||
if (!is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH) {
|
||||
const GPtrArray *v_ptrarray = *((const GPtrArray *const *) p_field);
|
||||
|
||||
if (!v_ptrarray)
|
||||
|
|
@ -664,8 +664,8 @@ _team_setting_ASSERT(const NMTeamSetting *self)
|
|||
nm_assert(self->d._js_str);
|
||||
}
|
||||
nm_assert(self->d.link_watchers);
|
||||
nm_assert(self->d.is_port || !self->d.master.runner_tx_hash
|
||||
|| self->d.master.runner_tx_hash->len > 0);
|
||||
nm_assert(self->d.is_port || !self->d.controller.runner_tx_hash
|
||||
|| self->d.controller.runner_tx_hash->len > 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -736,9 +736,10 @@ _team_setting_get_field(const NMTeamSetting *self, const TeamAttrData *attr_data
|
|||
nm_assert(_team_attr_data_is_relevant(attr_data, self->d.is_port));
|
||||
|
||||
#if NM_MORE_ASSERTS > 5
|
||||
if (attr_data->for_master && attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO)
|
||||
if (attr_data->for_controller
|
||||
&& attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO)
|
||||
nm_assert((gpointer) (((char *) self) + attr_data->field_offset)
|
||||
== &self->d.master.runner_sys_prio);
|
||||
== &self->d.controller.runner_sys_prio);
|
||||
#endif
|
||||
|
||||
return (((char *) self) + attr_data->field_offset);
|
||||
|
|
@ -1088,57 +1089,58 @@ nm_team_setting_value_link_watchers_set_list(NMTeamSetting *sel
|
|||
/*****************************************************************************/
|
||||
|
||||
guint32
|
||||
nm_team_setting_value_master_runner_tx_hash_add(NMTeamSetting *self, const char *txhash)
|
||||
nm_team_setting_value_controller_runner_tx_hash_add(NMTeamSetting *self, const char *txhash)
|
||||
{
|
||||
gboolean changed;
|
||||
guint i;
|
||||
|
||||
if (!self->d.master.runner_tx_hash)
|
||||
self->_data_priv.master.runner_tx_hash = g_ptr_array_new_with_free_func(g_free);
|
||||
if (!self->d.controller.runner_tx_hash)
|
||||
self->_data_priv.controller.runner_tx_hash = g_ptr_array_new_with_free_func(g_free);
|
||||
else {
|
||||
for (i = 0; i < self->d.master.runner_tx_hash->len; i++) {
|
||||
if (nm_streq(txhash, self->d.master.runner_tx_hash->pdata[i])) {
|
||||
for (i = 0; i < self->d.controller.runner_tx_hash->len; i++) {
|
||||
if (nm_streq(txhash, self->d.controller.runner_tx_hash->pdata[i])) {
|
||||
changed = FALSE;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
changed = TRUE;
|
||||
g_ptr_array_add((GPtrArray *) self->d.master.runner_tx_hash, g_strdup(txhash));
|
||||
g_ptr_array_add((GPtrArray *) self->d.controller.runner_tx_hash, g_strdup(txhash));
|
||||
out:
|
||||
return _team_setting_attribute_changed_attr(self,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH,
|
||||
changed,
|
||||
SET_FIELD_MODE_SET_UNLESS_DEFAULT,
|
||||
RESET_JSON_YES);
|
||||
}
|
||||
|
||||
guint32
|
||||
nm_team_setting_value_master_runner_tx_hash_remove(NMTeamSetting *self, guint idx)
|
||||
nm_team_setting_value_controller_runner_tx_hash_remove(NMTeamSetting *self, guint idx)
|
||||
{
|
||||
g_ptr_array_remove_index((GPtrArray *) self->d.master.runner_tx_hash, idx);
|
||||
g_ptr_array_remove_index((GPtrArray *) self->d.controller.runner_tx_hash, idx);
|
||||
return _team_setting_attribute_changed_attr(self,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH,
|
||||
TRUE,
|
||||
SET_FIELD_MODE_SET_UNLESS_DEFAULT,
|
||||
RESET_JSON_YES);
|
||||
}
|
||||
|
||||
static guint32
|
||||
_team_setting_value_master_runner_tx_hash_set_list(NMTeamSetting *self,
|
||||
const char *const *arr,
|
||||
guint len,
|
||||
SetFieldModeEnum set_field_mode,
|
||||
ResetJsonEnum reset_json)
|
||||
_team_setting_value_controller_runner_tx_hash_set_list(NMTeamSetting *self,
|
||||
const char *const *arr,
|
||||
guint len,
|
||||
SetFieldModeEnum set_field_mode,
|
||||
ResetJsonEnum reset_json)
|
||||
{
|
||||
_nm_unused gs_unref_ptrarray GPtrArray *old_val_destroy = NULL;
|
||||
gboolean changed;
|
||||
guint i;
|
||||
|
||||
if (nm_strv_cmp_n(self->d.master.runner_tx_hash
|
||||
? (const char *const *) self->d.master.runner_tx_hash->pdata
|
||||
if (nm_strv_cmp_n(self->d.controller.runner_tx_hash
|
||||
? (const char *const *) self->d.controller.runner_tx_hash->pdata
|
||||
: NULL,
|
||||
self->d.master.runner_tx_hash ? self->d.master.runner_tx_hash->len : 0u,
|
||||
self->d.controller.runner_tx_hash ? self->d.controller.runner_tx_hash->len
|
||||
: 0u,
|
||||
arr,
|
||||
len)
|
||||
== 0) {
|
||||
|
|
@ -1148,34 +1150,34 @@ _team_setting_value_master_runner_tx_hash_set_list(NMTeamSetting *self,
|
|||
|
||||
changed = TRUE;
|
||||
|
||||
old_val_destroy = (GPtrArray *) g_steal_pointer(&self->_data_priv.master.runner_tx_hash);
|
||||
old_val_destroy = (GPtrArray *) g_steal_pointer(&self->_data_priv.controller.runner_tx_hash);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (!arr[i])
|
||||
continue;
|
||||
if (!self->d.master.runner_tx_hash)
|
||||
self->_data_priv.master.runner_tx_hash = g_ptr_array_new_with_free_func(g_free);
|
||||
g_ptr_array_add((GPtrArray *) self->d.master.runner_tx_hash, g_strdup(arr[i]));
|
||||
if (!self->d.controller.runner_tx_hash)
|
||||
self->_data_priv.controller.runner_tx_hash = g_ptr_array_new_with_free_func(g_free);
|
||||
g_ptr_array_add((GPtrArray *) self->d.controller.runner_tx_hash, g_strdup(arr[i]));
|
||||
}
|
||||
|
||||
out:
|
||||
return _team_setting_attribute_changed_attr(self,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH,
|
||||
changed,
|
||||
set_field_mode,
|
||||
reset_json);
|
||||
}
|
||||
|
||||
guint32
|
||||
nm_team_setting_value_master_runner_tx_hash_set_list(NMTeamSetting *self,
|
||||
const char *const *arr,
|
||||
guint len)
|
||||
nm_team_setting_value_controller_runner_tx_hash_set_list(NMTeamSetting *self,
|
||||
const char *const *arr,
|
||||
guint len)
|
||||
{
|
||||
return _team_setting_value_master_runner_tx_hash_set_list(self,
|
||||
arr,
|
||||
len,
|
||||
SET_FIELD_MODE_SET_UNLESS_DEFAULT,
|
||||
RESET_JSON_YES);
|
||||
return _team_setting_value_controller_runner_tx_hash_set_list(self,
|
||||
arr,
|
||||
len,
|
||||
SET_FIELD_MODE_SET_UNLESS_DEFAULT,
|
||||
RESET_JSON_YES);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
@ -1769,28 +1771,28 @@ nm_team_setting_config_get(const NMTeamSetting *self)
|
|||
list_is_empty = FALSE;
|
||||
} else {
|
||||
static const NMTeamAttribute attr_lst_runner_pt1[] = {
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_HWADDR_POLICY,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH,
|
||||
};
|
||||
static const NMTeamAttribute attr_lst_runner_pt2[] = {
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER_INTERVAL,
|
||||
};
|
||||
static const NMTeamAttribute attr_lst_runner_pt3[] = {
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_ACTIVE,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_FAST_RATE,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_MIN_PORTS,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_AGG_SELECT_POLICY,
|
||||
};
|
||||
static const NMTeamAttribute attr_lst_notify_peers[] = {
|
||||
NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_COUNT,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_INTERVAL,
|
||||
};
|
||||
static const NMTeamAttribute attr_lst_mcast_rejoin[] = {
|
||||
NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_COUNT,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_INTERVAL,
|
||||
};
|
||||
|
||||
if (_team_setting_has_fields_any_v(self,
|
||||
|
|
@ -2012,7 +2014,7 @@ _js_parse_unpack(const NMJsonVt *vt,
|
|||
NMValueTypUnion out_val_lst[static _NM_TEAM_ATTRIBUTE_NUM],
|
||||
gboolean *out_unrecognized_content,
|
||||
GPtrArray **out_ptr_array_link_watchers_free,
|
||||
GPtrArray **out_ptr_array_master_runner_tx_hash_free)
|
||||
GPtrArray **out_ptr_array_controller_runner_tx_hash_free)
|
||||
{
|
||||
const TeamAttrData *attr_data;
|
||||
|
||||
|
|
@ -2069,11 +2071,12 @@ _js_parse_unpack(const NMJsonVt *vt,
|
|||
p_out_val->v_ptrarray = link_watchers;
|
||||
*out_ptr_array_link_watchers_free = link_watchers;
|
||||
}
|
||||
} else if (!is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH) {
|
||||
} else if (!is_port
|
||||
&& attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH) {
|
||||
GPtrArray *strv = NULL;
|
||||
|
||||
nm_assert(out_ptr_array_master_runner_tx_hash_free
|
||||
&& !*out_ptr_array_master_runner_tx_hash_free);
|
||||
nm_assert(out_ptr_array_controller_runner_tx_hash_free
|
||||
&& !*out_ptr_array_controller_runner_tx_hash_free);
|
||||
if (nm_json_is_array(arg_js_obj)) {
|
||||
gsize i, len;
|
||||
|
||||
|
|
@ -2096,8 +2099,8 @@ _js_parse_unpack(const NMJsonVt *vt,
|
|||
g_ptr_array_add(strv, (char *) v_string);
|
||||
}
|
||||
}
|
||||
valid = TRUE;
|
||||
*out_ptr_array_master_runner_tx_hash_free = strv;
|
||||
valid = TRUE;
|
||||
*out_ptr_array_controller_runner_tx_hash_free = strv;
|
||||
}
|
||||
p_out_val->v_ptrarray = strv;
|
||||
} else
|
||||
|
|
@ -2154,8 +2157,8 @@ nm_team_setting_config_set(NMTeamSetting *self, const char *js_str)
|
|||
nm_json_t *found_keys[_NM_TEAM_ATTRIBUTE_NUM] = {
|
||||
NULL,
|
||||
};
|
||||
gs_unref_ptrarray GPtrArray *ptr_array_master_runner_tx_hash_free = NULL;
|
||||
gs_unref_ptrarray GPtrArray *ptr_array_link_watchers_free = NULL;
|
||||
gs_unref_ptrarray GPtrArray *ptr_array_controller_runner_tx_hash_free = NULL;
|
||||
gs_unref_ptrarray GPtrArray *ptr_array_link_watchers_free = NULL;
|
||||
|
||||
_js_parse_locate_keys(vt, self, root_js_obj, found_keys, &unrecognized_content);
|
||||
|
||||
|
|
@ -2166,7 +2169,7 @@ nm_team_setting_config_set(NMTeamSetting *self, const char *js_str)
|
|||
val_lst,
|
||||
&unrecognized_content,
|
||||
&ptr_array_link_watchers_free,
|
||||
&ptr_array_master_runner_tx_hash_free);
|
||||
&ptr_array_controller_runner_tx_hash_free);
|
||||
|
||||
do_set_default = FALSE;
|
||||
|
||||
|
|
@ -2199,14 +2202,14 @@ _team_setting_prefix_error_plain(gboolean is_port, const char *property_name, GE
|
|||
|
||||
static void
|
||||
_team_setting_prefix_error(const NMTeamSetting *self,
|
||||
const char *prop_name_master,
|
||||
const char *prop_name_controller,
|
||||
const char *prop_name_port,
|
||||
GError **error)
|
||||
{
|
||||
_team_setting_ASSERT(self);
|
||||
nm_assert(self->d.is_port ? (!!prop_name_port) : (!!prop_name_master));
|
||||
nm_assert(self->d.is_port ? (!!prop_name_port) : (!!prop_name_controller));
|
||||
_team_setting_prefix_error_plain(self->d.is_port,
|
||||
self->d.is_port ? prop_name_port : prop_name_master,
|
||||
self->d.is_port ? prop_name_port : prop_name_controller,
|
||||
error);
|
||||
}
|
||||
|
||||
|
|
@ -2258,10 +2261,11 @@ _team_setting_verify_properties(const NMTeamSetting *self, GError **error)
|
|||
nm_assert_not_reached();
|
||||
}
|
||||
|
||||
if (!self->d.is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH) {
|
||||
if (self->d.master.runner_tx_hash) {
|
||||
for (i = 0; i < self->d.master.runner_tx_hash->len; i++) {
|
||||
const char *val = self->d.master.runner_tx_hash->pdata[i];
|
||||
if (!self->d.is_port
|
||||
&& attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH) {
|
||||
if (self->d.controller.runner_tx_hash) {
|
||||
for (i = 0; i < self->d.controller.runner_tx_hash->len; i++) {
|
||||
const char *val = self->d.controller.runner_tx_hash->pdata[i];
|
||||
|
||||
if (!val || !nm_strv_contains(_valid_names_runner_tx_hash, -1, val)) {
|
||||
g_set_error(error,
|
||||
|
|
@ -2288,8 +2292,8 @@ _team_setting_verify_properties(const NMTeamSetting *self, GError **error)
|
|||
|
||||
if (!_team_setting_has_field(self, attr_data))
|
||||
continue;
|
||||
if (self->d.master.runner
|
||||
&& nm_strv_contains(e->valid_runners, -1, self->d.master.runner))
|
||||
if (self->d.controller.runner
|
||||
&& nm_strv_contains(e->valid_runners, -1, self->d.controller.runner))
|
||||
continue;
|
||||
if (e->valid_runners[1] == NULL) {
|
||||
g_set_error(error,
|
||||
|
|
@ -2542,7 +2546,7 @@ nm_team_setting_reset_from_dbus(NMTeamSetting *self,
|
|||
else if (attr_data->team_attr == NM_TEAM_ATTRIBUTE_LINK_WATCHERS)
|
||||
variant_type = G_VARIANT_TYPE("aa{sv}");
|
||||
else if (!self->d.is_port
|
||||
&& attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH)
|
||||
&& attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH)
|
||||
variant_type = G_VARIANT_TYPE_STRING_ARRAY;
|
||||
else
|
||||
nm_assert_not_reached();
|
||||
|
|
@ -2645,12 +2649,12 @@ nm_team_setting_reset_from_dbus(NMTeamSetting *self,
|
|||
SET_FIELD_MODE_SET,
|
||||
RESET_JSON_NO);
|
||||
} else if (!self->d.is_port
|
||||
&& attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH) {
|
||||
&& attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH) {
|
||||
gs_free const char **strv = NULL;
|
||||
gsize len;
|
||||
|
||||
strv = g_variant_get_strv(variants[attr_data->team_attr], &len);
|
||||
changed_flags = _team_setting_value_master_runner_tx_hash_set_list(
|
||||
changed_flags = _team_setting_value_controller_runner_tx_hash_set_list(
|
||||
self,
|
||||
strv,
|
||||
NM_MIN(len, (gsize) G_MAXUINT),
|
||||
|
|
@ -2756,12 +2760,12 @@ _nm_team_settings_property_to_dbus(_NM_SETT_INFO_PROP_TO_DBUS_FCN_ARGS _nm_nil)
|
|||
}
|
||||
if (attr_data->team_attr == NM_TEAM_ATTRIBUTE_LINK_WATCHERS)
|
||||
return _nm_utils_team_link_watchers_to_variant(self->d.link_watchers);
|
||||
if (!self->d.is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH) {
|
||||
return g_variant_new_strv(self->d.master.runner_tx_hash
|
||||
? (const char *const *) self->d.master.runner_tx_hash->pdata
|
||||
: NULL,
|
||||
self->d.master.runner_tx_hash ? self->d.master.runner_tx_hash->len
|
||||
: 0u);
|
||||
if (!self->d.is_port && attr_data->team_attr == NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH) {
|
||||
return g_variant_new_strv(
|
||||
self->d.controller.runner_tx_hash
|
||||
? (const char *const *) self->d.controller.runner_tx_hash->pdata
|
||||
: NULL,
|
||||
self->d.controller.runner_tx_hash ? self->d.controller.runner_tx_hash->len : 0u);
|
||||
}
|
||||
|
||||
nm_assert_not_reached();
|
||||
|
|
@ -2836,12 +2840,12 @@ nm_team_setting_free(NMTeamSetting *self)
|
|||
_team_setting_ASSERT(self);
|
||||
|
||||
if (!self->d.is_port) {
|
||||
nm_clear_pointer(((GPtrArray **) &self->_data_priv.master.runner_tx_hash),
|
||||
nm_clear_pointer(((GPtrArray **) &self->_data_priv.controller.runner_tx_hash),
|
||||
g_ptr_array_unref);
|
||||
g_free((char *) self->_data_priv.master.runner);
|
||||
g_free((char *) self->_data_priv.master.runner_hwaddr_policy);
|
||||
g_free((char *) self->_data_priv.master.runner_tx_balancer);
|
||||
g_free((char *) self->_data_priv.master.runner_agg_select_policy);
|
||||
g_free((char *) self->_data_priv.controller.runner);
|
||||
g_free((char *) self->_data_priv.controller.runner_hwaddr_policy);
|
||||
g_free((char *) self->_data_priv.controller.runner_tx_balancer);
|
||||
g_free((char *) self->_data_priv.controller.runner_agg_select_policy);
|
||||
}
|
||||
g_ptr_array_unref((GPtrArray *) self->_data_priv.link_watchers);
|
||||
g_free((char *) self->_data_priv._js_str);
|
||||
|
|
|
|||
|
|
@ -25,21 +25,21 @@ typedef enum {
|
|||
|
||||
_NM_TEAM_ATTRIBUTE_START = 3,
|
||||
|
||||
NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_COUNT = _NM_TEAM_ATTRIBUTE_START,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_NOTIFY_PEERS_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_COUNT,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_MCAST_REJOIN_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_HWADDR_POLICY,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_HASH,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_TX_BALANCER_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_ACTIVE,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_FAST_RATE,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_SYS_PRIO,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_MIN_PORTS,
|
||||
NM_TEAM_ATTRIBUTE_MASTER_RUNNER_AGG_SELECT_POLICY,
|
||||
_NM_TEAM_ATTRIBUTE_MASTER_NUM,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_COUNT = _NM_TEAM_ATTRIBUTE_START,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_NOTIFY_PEERS_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_COUNT,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_MCAST_REJOIN_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_HWADDR_POLICY,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_HASH,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_TX_BALANCER_INTERVAL,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_ACTIVE,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_FAST_RATE,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_SYS_PRIO,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_MIN_PORTS,
|
||||
NM_TEAM_ATTRIBUTE_CONTROLLER_RUNNER_AGG_SELECT_POLICY,
|
||||
_NM_TEAM_ATTRIBUTE_CONTROLLER_NUM,
|
||||
|
||||
NM_TEAM_ATTRIBUTE_PORT_QUEUE_ID = _NM_TEAM_ATTRIBUTE_START,
|
||||
NM_TEAM_ATTRIBUTE_PORT_PRIO,
|
||||
|
|
@ -49,7 +49,7 @@ typedef enum {
|
|||
_NM_TEAM_ATTRIBUTE_PORT_NUM,
|
||||
|
||||
_NM_TEAM_ATTRIBUTE_NUM =
|
||||
NM_MAX_CONST(_NM_TEAM_ATTRIBUTE_MASTER_NUM, _NM_TEAM_ATTRIBUTE_PORT_NUM),
|
||||
NM_MAX_CONST(_NM_TEAM_ATTRIBUTE_CONTROLLER_NUM, _NM_TEAM_ATTRIBUTE_PORT_NUM),
|
||||
|
||||
} NMTeamAttribute;
|
||||
|
||||
|
|
@ -101,7 +101,7 @@ struct _NMTeamSettingData {
|
|||
gint32 runner_tx_balancer_interval;
|
||||
bool runner_active;
|
||||
bool runner_fast_rate;
|
||||
} master;
|
||||
} controller;
|
||||
struct {
|
||||
gint32 queue_id;
|
||||
gint32 prio;
|
||||
|
|
@ -216,13 +216,14 @@ guint32 nm_team_setting_value_link_watchers_set_list(NMTeamSetting
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
guint32 nm_team_setting_value_master_runner_tx_hash_add(NMTeamSetting *self, const char *txhash);
|
||||
guint32 nm_team_setting_value_controller_runner_tx_hash_add(NMTeamSetting *self,
|
||||
const char *txhash);
|
||||
|
||||
guint32 nm_team_setting_value_master_runner_tx_hash_remove(NMTeamSetting *self, guint idx);
|
||||
guint32 nm_team_setting_value_controller_runner_tx_hash_remove(NMTeamSetting *self, guint idx);
|
||||
|
||||
guint32 nm_team_setting_value_master_runner_tx_hash_set_list(NMTeamSetting *self,
|
||||
const char *const *arr,
|
||||
guint len);
|
||||
guint32 nm_team_setting_value_controller_runner_tx_hash_set_list(NMTeamSetting *self,
|
||||
const char *const *arr,
|
||||
guint len);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
|
|
|||
|
|
@ -4903,9 +4903,9 @@ _nm_utils_dhcp_duid_valid(const char *duid, GBytes **out_duid_bin)
|
|||
* If @virtual_type is %NM_TYPE_SETTING_VLAN, then this checks if
|
||||
* @other_type is a valid type for the parent of a VLAN.
|
||||
*
|
||||
* If @virtual_type is a "master" type (eg, %NM_TYPE_SETTING_BRIDGE),
|
||||
* then this checks if @other_type is a valid type for a slave of that
|
||||
* master.
|
||||
* If @virtual_type is a "controller" type (eg, %NM_TYPE_SETTING_BRIDGE),
|
||||
* then this checks if @other_type is a valid type for a port of that
|
||||
* controller.
|
||||
*
|
||||
* Note that even if this returns %TRUE it is not guaranteed that
|
||||
* <emphasis>every</emphasis> connection of type @other_type is
|
||||
|
|
|
|||
|
|
@ -6231,19 +6231,19 @@ test_connection_normalize_type(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_connection_normalize_slave_type_1(void)
|
||||
test_connection_normalize_port_type_1(void)
|
||||
{
|
||||
gs_unref_object NMConnection *con = NULL;
|
||||
NMSettingConnection *s_con;
|
||||
|
||||
con = nmtst_create_minimal_connection("test_connection_normalize_slave_type_1",
|
||||
con = nmtst_create_minimal_connection("test_connection_normalize_port_type_1",
|
||||
"cc4cd5df-45dc-483e-b291-6b76c2338ecb",
|
||||
NM_SETTING_WIRED_SETTING_NAME,
|
||||
&s_con);
|
||||
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
"invalid-type",
|
||||
NULL);
|
||||
|
|
@ -6265,19 +6265,19 @@ test_connection_normalize_slave_type_1(void)
|
|||
}
|
||||
|
||||
static void
|
||||
test_connection_normalize_slave_type_2(void)
|
||||
test_connection_normalize_port_type_2(void)
|
||||
{
|
||||
gs_unref_object NMConnection *con = NULL;
|
||||
NMSettingConnection *s_con;
|
||||
|
||||
con = nmtst_create_minimal_connection("test_connection_normalize_slave_type_2",
|
||||
con = nmtst_create_minimal_connection("test_connection_normalize_port_type_2",
|
||||
"40bea008-ca72-439a-946b-e65f827656f9",
|
||||
NM_SETTING_WIRED_SETTING_NAME,
|
||||
&s_con);
|
||||
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
"invalid-type",
|
||||
NULL);
|
||||
|
|
@ -6576,7 +6576,7 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data)
|
|||
case 1:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6597,7 +6597,7 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data)
|
|||
case 2:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6620,7 +6620,7 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data)
|
|||
case 3:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6638,7 +6638,7 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data)
|
|||
case 4:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6653,7 +6653,7 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data)
|
|||
NM_CONNECTION_ERROR_INVALID_PROPERTY);
|
||||
break;
|
||||
case 5:
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "master0", NULL);
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "controller0", NULL);
|
||||
|
||||
s_ovs_if = NM_SETTING_OVS_INTERFACE(nm_setting_ovs_interface_new());
|
||||
nm_connection_add_setting(con, NM_SETTING(s_ovs_if));
|
||||
|
|
@ -6675,7 +6675,7 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data)
|
|||
case 6:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_BRIDGE_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6691,7 +6691,7 @@ test_connection_normalize_ovs_interface_type_system(gconstpointer test_data)
|
|||
case 7:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_BRIDGE_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6738,7 +6738,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
NM_CONNECTION_ERROR_INVALID_PROPERTY);
|
||||
break;
|
||||
case 2:
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "master0", NULL);
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "controller0", NULL);
|
||||
nmtst_assert_connection_verifies_after_normalization(con,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_MISSING_PROPERTY);
|
||||
|
|
@ -6759,7 +6759,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 3:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6781,7 +6781,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
g_assert_cmpstr(nm_setting_ovs_interface_get_interface_type(s_ovs_if), ==, "internal");
|
||||
break;
|
||||
case 4:
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "master0", NULL);
|
||||
g_object_set(s_con, NM_SETTING_CONNECTION_CONTROLLER, "controller0", NULL);
|
||||
g_object_set(s_ovs_if, NM_SETTING_OVS_INTERFACE_TYPE, "internal", NULL);
|
||||
nmtst_assert_connection_verifies_after_normalization(con,
|
||||
NM_CONNECTION_ERROR,
|
||||
|
|
@ -6803,7 +6803,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 5:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6826,7 +6826,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 6:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6849,7 +6849,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 7:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6861,7 +6861,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 8:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6873,7 +6873,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 9:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6885,7 +6885,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 10:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -6898,7 +6898,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 11:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NM_SETTING_CONNECTION_INTERFACE_NAME,
|
||||
|
|
@ -6913,7 +6913,7 @@ test_connection_normalize_ovs_interface_type_ovs_interface(gconstpointer test_da
|
|||
case 12:
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NM_SETTING_CONNECTION_INTERFACE_NAME,
|
||||
|
|
@ -10705,7 +10705,7 @@ test_connection_ovs_ifname(gconstpointer test_data)
|
|||
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_BRIDGE_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -10723,7 +10723,7 @@ test_connection_ovs_ifname(gconstpointer test_data)
|
|||
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -10750,7 +10750,7 @@ test_connection_ovs_ifname(gconstpointer test_data)
|
|||
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -10766,7 +10766,7 @@ test_connection_ovs_ifname(gconstpointer test_data)
|
|||
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -10792,7 +10792,7 @@ test_connection_ovs_ifname(gconstpointer test_data)
|
|||
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
"master0",
|
||||
"controller0",
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
NM_SETTING_OVS_PORT_SETTING_NAME,
|
||||
NULL);
|
||||
|
|
@ -11717,10 +11717,10 @@ main(int argc, char **argv)
|
|||
test_connection_normalize_virtual_iface_name);
|
||||
g_test_add_func("/core/general/test_connection_normalize_uuid", test_connection_normalize_uuid);
|
||||
g_test_add_func("/core/general/test_connection_normalize_type", test_connection_normalize_type);
|
||||
g_test_add_func("/core/general/test_connection_normalize_slave_type_1",
|
||||
test_connection_normalize_slave_type_1);
|
||||
g_test_add_func("/core/general/test_connection_normalize_slave_type_2",
|
||||
test_connection_normalize_slave_type_2);
|
||||
g_test_add_func("/core/general/test_connection_normalize_port_type_1",
|
||||
test_connection_normalize_port_type_1);
|
||||
g_test_add_func("/core/general/test_connection_normalize_port_type_2",
|
||||
test_connection_normalize_port_type_2);
|
||||
g_test_add_func("/core/general/test_connection_normalize_infiniband",
|
||||
test_connection_normalize_infiniband);
|
||||
g_test_add_func("/core/general/test_connection_normalize_gateway_never_default",
|
||||
|
|
|
|||
|
|
@ -196,7 +196,7 @@ _nm_keyfile_read(GKeyFile *keyfile,
|
|||
{
|
||||
NMSettingConnection *s_con;
|
||||
|
||||
/* a non-slave connection must have a proxy setting, but
|
||||
/* a non-port connection must have a proxy setting, but
|
||||
* keyfile reader does not add that (unless a [proxy] section
|
||||
* is present. */
|
||||
s_con = nm_connection_get_setting_connection(con);
|
||||
|
|
@ -857,8 +857,8 @@ test_bridge_port_vlans(void)
|
|||
"id=t\n"
|
||||
"type=dummy\n"
|
||||
"interface-name=dummy1\n"
|
||||
"master=br0\n"
|
||||
"slave-type=bridge\n"
|
||||
"controller=br0\n"
|
||||
"port-type=bridge\n"
|
||||
"\n"
|
||||
"[bridge-port]\n"
|
||||
"vlans=4094 pvid , 10-20 untagged\n"
|
||||
|
|
|
|||
|
|
@ -581,7 +581,7 @@ GHashTable *_nm_tc_action_get_attributes(NMTCAction *action);
|
|||
/*****************************************************************************/
|
||||
|
||||
static inline gboolean
|
||||
_nm_connection_type_is_master(const char *type)
|
||||
_nm_connection_type_is_controller(const char *type)
|
||||
{
|
||||
return (NM_IN_STRSET(type,
|
||||
NM_SETTING_BOND_SETTING_NAME,
|
||||
|
|
|
|||
|
|
@ -213,11 +213,11 @@ typedef enum {
|
|||
* @NM_DEVICE_TYPE_MODEM: a modem supporting analog telephone, CDMA/EVDO,
|
||||
* GSM/UMTS, or LTE network access protocols
|
||||
* @NM_DEVICE_TYPE_INFINIBAND: an IP-over-InfiniBand device
|
||||
* @NM_DEVICE_TYPE_BOND: a bond master interface
|
||||
* @NM_DEVICE_TYPE_BOND: a bond controller interface
|
||||
* @NM_DEVICE_TYPE_VLAN: an 802.1Q VLAN interface
|
||||
* @NM_DEVICE_TYPE_ADSL: ADSL modem
|
||||
* @NM_DEVICE_TYPE_BRIDGE: a bridge master interface
|
||||
* @NM_DEVICE_TYPE_TEAM: a team master interface
|
||||
* @NM_DEVICE_TYPE_BRIDGE: a bridge controller interface
|
||||
* @NM_DEVICE_TYPE_TEAM: a team controller interface
|
||||
* @NM_DEVICE_TYPE_TUN: a TUN or TAP interface
|
||||
* @NM_DEVICE_TYPE_IP_TUNNEL: a IP tunnel interface
|
||||
* @NM_DEVICE_TYPE_MACVLAN: a MACVLAN interface
|
||||
|
|
@ -1091,13 +1091,13 @@ typedef enum /*< flags >*/ {
|
|||
/**
|
||||
* NMActivationStateFlags:
|
||||
* @NM_ACTIVATION_STATE_FLAG_NONE: an alias for numeric zero, no flags set.
|
||||
* @NM_ACTIVATION_STATE_FLAG_IS_MASTER: the device is a master.
|
||||
* @NM_ACTIVATION_STATE_FLAG_IS_SLAVE: the device is a slave.
|
||||
* @NM_ACTIVATION_STATE_FLAG_IS_CONTROLLER: the device is a controller.
|
||||
* @NM_ACTIVATION_STATE_FLAG_IS_PORT: the device is a port.
|
||||
* @NM_ACTIVATION_STATE_FLAG_LAYER2_READY: layer2 is activated and ready.
|
||||
* @NM_ACTIVATION_STATE_FLAG_IP4_READY: IPv4 setting is completed.
|
||||
* @NM_ACTIVATION_STATE_FLAG_IP6_READY: IPv6 setting is completed.
|
||||
* @NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES: The master has any slave devices attached.
|
||||
* This only makes sense if the device is a master.
|
||||
* @NM_ACTIVATION_STATE_FLAG_CONTROLLER_HAS_PORTS: The controller has any port devices attached.
|
||||
* This only makes sense if the device is a controller.
|
||||
* @NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY: the lifetime
|
||||
* of the activation is bound to the visibility of the connection profile,
|
||||
* which in turn depends on "connection.permissions" and whether a session
|
||||
|
|
@ -1112,16 +1112,20 @@ typedef enum /*< flags >*/ {
|
|||
typedef enum /*< flags >*/ {
|
||||
NM_ACTIVATION_STATE_FLAG_NONE = 0,
|
||||
|
||||
NM_ACTIVATION_STATE_FLAG_IS_MASTER = 0x1,
|
||||
NM_ACTIVATION_STATE_FLAG_IS_SLAVE = 0x2,
|
||||
NM_ACTIVATION_STATE_FLAG_IS_CONTROLLER = 0x1,
|
||||
NM_ACTIVATION_STATE_FLAG_IS_PORT = 0x2,
|
||||
NM_ACTIVATION_STATE_FLAG_LAYER2_READY = 0x4,
|
||||
NM_ACTIVATION_STATE_FLAG_IP4_READY = 0x8,
|
||||
NM_ACTIVATION_STATE_FLAG_IP6_READY = 0x10,
|
||||
NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES = 0x20,
|
||||
NM_ACTIVATION_STATE_FLAG_CONTROLLER_HAS_PORTS = 0x20,
|
||||
NM_ACTIVATION_STATE_FLAG_LIFETIME_BOUND_TO_PROFILE_VISIBILITY = 0x40,
|
||||
NM_ACTIVATION_STATE_FLAG_EXTERNAL = 0x80,
|
||||
} NMActivationStateFlags;
|
||||
|
||||
#define NM_ACTIVATION_STATE_FLAG_IS_MASTER NM_ACTIVATION_STATE_FLAG_IS_CONTROLLER
|
||||
#define NM_ACTIVATION_STATE_FLAG_IS_SLAVE NM_ACTIVATION_STATE_FLAG_IS_PORT
|
||||
#define NM_ACTIVATION_STATE_FLAG_MASTER_HAS_SLAVES NM_ACTIVATION_FLAG_CONTROLLER_HAS_PORTS
|
||||
|
||||
/**
|
||||
* NMSettingsAddConnection2Flags:
|
||||
* @NM_SETTINGS_ADD_CONNECTION2_FLAG_NONE: an alias for numeric zero, no flags set.
|
||||
|
|
|
|||
|
|
@ -71,12 +71,12 @@ G_BEGIN_DECLS
|
|||
* NMSettingConnectionAutoconnectSlaves:
|
||||
* @NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_DEFAULT: default value
|
||||
* @NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_NO: slaves are not brought up when
|
||||
* master is activated
|
||||
* controller is activated
|
||||
* @NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES_YES: slaves are brought up when
|
||||
* master is activated
|
||||
* controller is activated
|
||||
*
|
||||
* #NMSettingConnectionAutoconnectSlaves values indicate whether slave connections
|
||||
* should be activated when master is activated.
|
||||
* should be activated when controller is activated.
|
||||
*
|
||||
* Since: 1.2
|
||||
*
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ static NM_UTILS_LOOKUP_STR_DEFINE(
|
|||
NM_UTILS_LOOKUP_STR_ITEM(NME_PL_NOT_FOUND, "not-found"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NME_PL_EXISTS, "exists"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NME_PL_WRONG_TYPE, "wrong-type"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NME_PL_NOT_SLAVE, "not-slave"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NME_PL_NOT_SLAVE, "not-port"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NME_PL_NO_FIRMWARE, "no-firmware"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NME_PL_OPNOTSUPP, "not-supported"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(NME_PL_NETLINK, "netlink"),
|
||||
|
|
|
|||
|
|
@ -154,13 +154,13 @@ typedef enum {
|
|||
NM_LINK_TYPE_WIREGUARD,
|
||||
#define _NM_LINK_TYPE_SW_LAST NM_LINK_TYPE_WIREGUARD
|
||||
|
||||
/* Software types with slaves */
|
||||
#define _NM_LINK_TYPE_SW_MASTER_FIRST NM_LINK_TYPE_BRIDGE
|
||||
/* Software types with ports */
|
||||
#define _NM_LINK_TYPE_SW_CONTROLLER_FIRST NM_LINK_TYPE_BRIDGE
|
||||
NM_LINK_TYPE_BRIDGE,
|
||||
NM_LINK_TYPE_BOND,
|
||||
NM_LINK_TYPE_HSR,
|
||||
NM_LINK_TYPE_TEAM,
|
||||
#define _NM_LINK_TYPE_SW_MASTER_LAST NM_LINK_TYPE_TEAM
|
||||
#define _NM_LINK_TYPE_SW_CONTROLLER_LAST NM_LINK_TYPE_TEAM
|
||||
|
||||
#define _NM_LINK_TYPE_REAL_LAST NM_LINK_TYPE_TEAM
|
||||
|
||||
|
|
@ -171,15 +171,16 @@ typedef enum {
|
|||
static inline gboolean
|
||||
nm_link_type_is_software(NMLinkType link_type)
|
||||
{
|
||||
G_STATIC_ASSERT(_NM_LINK_TYPE_SW_LAST + 1 == _NM_LINK_TYPE_SW_MASTER_FIRST);
|
||||
G_STATIC_ASSERT(_NM_LINK_TYPE_SW_LAST + 1 == _NM_LINK_TYPE_SW_CONTROLLER_FIRST);
|
||||
|
||||
return link_type >= _NM_LINK_TYPE_SW_FIRST && link_type <= _NM_LINK_TYPE_SW_MASTER_LAST;
|
||||
return link_type >= _NM_LINK_TYPE_SW_FIRST && link_type <= _NM_LINK_TYPE_SW_CONTROLLER_LAST;
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
nm_link_type_supports_slaves(NMLinkType link_type)
|
||||
nm_link_type_supports_ports(NMLinkType link_type)
|
||||
{
|
||||
return link_type >= _NM_LINK_TYPE_SW_MASTER_FIRST && link_type <= _NM_LINK_TYPE_SW_MASTER_LAST;
|
||||
return link_type >= _NM_LINK_TYPE_SW_CONTROLLER_FIRST
|
||||
&& link_type <= _NM_LINK_TYPE_SW_CONTROLLER_LAST;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -108,6 +108,9 @@ typedef enum _nm_packed {
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define IFLA_INFO_PORT_KIND IFLA_INFO_SLAVE_KIND
|
||||
#define IFLA_INFO_PORT_DATA IFLA_INFO_SLAVE_DATA
|
||||
|
||||
#ifndef IFLA_PROMISCUITY
|
||||
#define IFLA_PROMISCUITY 30
|
||||
#endif
|
||||
|
|
@ -161,6 +164,10 @@ typedef enum _nm_packed {
|
|||
#define __IFLA_TUN_MAX 10
|
||||
#define IFLA_TUN_MAX (__IFLA_TUN_MAX - 1)
|
||||
|
||||
#define IFLA_CONTROLLER IFLA_MASTER
|
||||
|
||||
#define BRIDGE_FLAGS_CONTROLLER BRIDGE_FLAGS_MASTER
|
||||
|
||||
G_STATIC_ASSERT(RTA_MAX == (__RTA_MAX - 1));
|
||||
#define RTA_PREF 20
|
||||
#undef RTA_MAX
|
||||
|
|
@ -180,7 +187,10 @@ G_STATIC_ASSERT(RTA_MAX == (__RTA_MAX - 1));
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define IFLA_BOND_SLAVE_PRIO 9
|
||||
#define IFLA_BOND_ACTIVE_PORT IFLA_BOND_ACTIVE_SLAVE
|
||||
#define IFLA_BOND_PORT_PRIO IFLA_BOND_SLAVE_PRIO
|
||||
#define IFLA_BOND_ALL_PORTS_ACTIVE IFLA_BOND_ALL_SLAVES_ACTIVE
|
||||
#define IFLA_BOND_PACKETS_PER_PORT IFLA_BOND_PACKETS_PER_SLAVE
|
||||
|
||||
#define IFLA_BOND_PEER_NOTIF_DELAY 28
|
||||
#define IFLA_BOND_AD_LACP_ACTIVE 29
|
||||
|
|
@ -432,7 +442,7 @@ typedef enum _nm_packed {
|
|||
DELAYED_ACTION_TYPE_WAIT_FOR_RESPONSE_RTNL = 1 << 12,
|
||||
DELAYED_ACTION_TYPE_WAIT_FOR_RESPONSE_GENL = 1 << 13,
|
||||
DELAYED_ACTION_TYPE_REFRESH_LINK = 1 << 14,
|
||||
DELAYED_ACTION_TYPE_MASTER_CONNECTED = 1 << 15,
|
||||
DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED = 1 << 15,
|
||||
|
||||
__DELAYED_ACTION_TYPE_MAX,
|
||||
|
||||
|
|
@ -559,7 +569,7 @@ typedef struct {
|
|||
* by type. */
|
||||
int refresh_all_in_progress[_REFRESH_ALL_TYPE_NUM];
|
||||
|
||||
GPtrArray *list_master_connected;
|
||||
GPtrArray *list_controller_connected;
|
||||
GPtrArray *list_refresh_link;
|
||||
union {
|
||||
struct {
|
||||
|
|
@ -1623,7 +1633,7 @@ _parse_lnk_bond(const char *kind, struct nlattr *info_data)
|
|||
{
|
||||
static const struct nla_policy policy[] = {
|
||||
[IFLA_BOND_MODE] = {.type = NLA_U8},
|
||||
[IFLA_BOND_ACTIVE_SLAVE] = {.type = NLA_U32},
|
||||
[IFLA_BOND_ACTIVE_PORT] = {.type = NLA_U32},
|
||||
[IFLA_BOND_MIIMON] = {.type = NLA_U32},
|
||||
[IFLA_BOND_UPDELAY] = {.type = NLA_U32},
|
||||
[IFLA_BOND_DOWNDELAY] = {.type = NLA_U32},
|
||||
|
|
@ -1638,10 +1648,10 @@ _parse_lnk_bond(const char *kind, struct nlattr *info_data)
|
|||
[IFLA_BOND_XMIT_HASH_POLICY] = {.type = NLA_U8},
|
||||
[IFLA_BOND_RESEND_IGMP] = {.type = NLA_U32},
|
||||
[IFLA_BOND_NUM_PEER_NOTIF] = {.type = NLA_U8},
|
||||
[IFLA_BOND_ALL_SLAVES_ACTIVE] = {.type = NLA_U8},
|
||||
[IFLA_BOND_ALL_PORTS_ACTIVE] = {.type = NLA_U8},
|
||||
[IFLA_BOND_MIN_LINKS] = {.type = NLA_U32},
|
||||
[IFLA_BOND_LP_INTERVAL] = {.type = NLA_U32},
|
||||
[IFLA_BOND_PACKETS_PER_SLAVE] = {.type = NLA_U32},
|
||||
[IFLA_BOND_PACKETS_PER_PORT] = {.type = NLA_U32},
|
||||
[IFLA_BOND_AD_LACP_RATE] = {.type = NLA_U8},
|
||||
[IFLA_BOND_AD_SELECT] = {.type = NLA_U8},
|
||||
[IFLA_BOND_AD_ACTOR_SYS_PRIO] = {.type = NLA_U16},
|
||||
|
|
@ -1737,16 +1747,16 @@ _parse_lnk_bond(const char *kind, struct nlattr *info_data)
|
|||
}
|
||||
if (tb[IFLA_BOND_NUM_PEER_NOTIF])
|
||||
props->num_grat_arp = nla_get_u8(tb[IFLA_BOND_NUM_PEER_NOTIF]);
|
||||
if (tb[IFLA_BOND_ALL_SLAVES_ACTIVE])
|
||||
props->all_ports_active = nla_get_u8(tb[IFLA_BOND_ALL_SLAVES_ACTIVE]);
|
||||
if (tb[IFLA_BOND_ALL_PORTS_ACTIVE])
|
||||
props->all_ports_active = nla_get_u8(tb[IFLA_BOND_ALL_PORTS_ACTIVE]);
|
||||
if (tb[IFLA_BOND_MISSED_MAX])
|
||||
props->arp_missed_max = nla_get_u8(tb[IFLA_BOND_MISSED_MAX]);
|
||||
if (tb[IFLA_BOND_MIN_LINKS])
|
||||
props->min_links = nla_get_u32(tb[IFLA_BOND_MIN_LINKS]);
|
||||
if (tb[IFLA_BOND_LP_INTERVAL])
|
||||
props->lp_interval = nla_get_u32(tb[IFLA_BOND_LP_INTERVAL]);
|
||||
if (tb[IFLA_BOND_PACKETS_PER_SLAVE])
|
||||
props->packets_per_port = nla_get_u32(tb[IFLA_BOND_PACKETS_PER_SLAVE]);
|
||||
if (tb[IFLA_BOND_PACKETS_PER_PORT])
|
||||
props->packets_per_port = nla_get_u32(tb[IFLA_BOND_PACKETS_PER_PORT]);
|
||||
if (tb[IFLA_BOND_AD_LACP_RATE])
|
||||
props->lacp_rate = nla_get_u8(tb[IFLA_BOND_AD_LACP_RATE]);
|
||||
if (tb[IFLA_BOND_AD_LACP_ACTIVE]) {
|
||||
|
|
@ -3377,7 +3387,7 @@ _new_from_nl_link(NMPlatform *platform,
|
|||
[IFLA_GRO_MAX_SIZE] = {.type = NLA_U32},
|
||||
[IFLA_LINK] = {.type = NLA_U32},
|
||||
[IFLA_WEIGHT] = {.type = NLA_U32},
|
||||
[IFLA_MASTER] = {.type = NLA_U32},
|
||||
[IFLA_CONTROLLER] = {.type = NLA_U32},
|
||||
[IFLA_OPERSTATE] = {.type = NLA_U8},
|
||||
[IFLA_LINKMODE] = {.type = NLA_U8},
|
||||
[IFLA_LINKINFO] = {.type = NLA_NESTED},
|
||||
|
|
@ -3459,11 +3469,11 @@ _new_from_nl_link(NMPlatform *platform,
|
|||
|
||||
if (tb[IFLA_LINKINFO]) {
|
||||
static const struct nla_policy policy_link_info[] = {
|
||||
[IFLA_INFO_KIND] = {.type = NLA_STRING},
|
||||
[IFLA_INFO_DATA] = {.type = NLA_NESTED},
|
||||
[IFLA_INFO_XSTATS] = {.type = NLA_NESTED},
|
||||
[IFLA_INFO_SLAVE_KIND] = {.type = NLA_STRING},
|
||||
[IFLA_INFO_SLAVE_DATA] = {.type = NLA_NESTED},
|
||||
[IFLA_INFO_KIND] = {.type = NLA_STRING},
|
||||
[IFLA_INFO_DATA] = {.type = NLA_NESTED},
|
||||
[IFLA_INFO_XSTATS] = {.type = NLA_NESTED},
|
||||
[IFLA_INFO_PORT_KIND] = {.type = NLA_STRING},
|
||||
[IFLA_INFO_PORT_DATA] = {.type = NLA_NESTED},
|
||||
};
|
||||
struct nlattr *li[G_N_ELEMENTS(policy_link_info)];
|
||||
|
||||
|
|
@ -3475,8 +3485,8 @@ _new_from_nl_link(NMPlatform *platform,
|
|||
|
||||
nl_info_data = li[IFLA_INFO_DATA];
|
||||
|
||||
if (li[IFLA_INFO_SLAVE_KIND]) {
|
||||
const char *s = nla_get_string(li[IFLA_INFO_SLAVE_KIND]);
|
||||
if (li[IFLA_INFO_PORT_KIND]) {
|
||||
const char *s = nla_get_string(li[IFLA_INFO_PORT_KIND]);
|
||||
|
||||
if (nm_streq(s, "bond"))
|
||||
obj->link.port_kind = NM_PORT_KIND_BOND;
|
||||
|
|
@ -3484,10 +3494,10 @@ _new_from_nl_link(NMPlatform *platform,
|
|||
obj->link.port_kind = NM_PORT_KIND_BRIDGE;
|
||||
}
|
||||
|
||||
if (li[IFLA_INFO_SLAVE_DATA]) {
|
||||
if (li[IFLA_INFO_PORT_DATA]) {
|
||||
static const struct nla_policy policy_bond_port[] = {
|
||||
[IFLA_BOND_SLAVE_QUEUE_ID] = {.type = NLA_U16},
|
||||
[IFLA_BOND_SLAVE_PRIO] = {.type = NLA_S32},
|
||||
[IFLA_BOND_PORT_PRIO] = {.type = NLA_S32},
|
||||
};
|
||||
struct nlattr *bp[G_N_ELEMENTS(policy_bond_port)];
|
||||
static const struct nla_policy policy_bridge_port[] = {
|
||||
|
|
@ -3499,30 +3509,30 @@ _new_from_nl_link(NMPlatform *platform,
|
|||
|
||||
switch (obj->link.port_kind) {
|
||||
case NM_PORT_KIND_BOND:
|
||||
if (nla_parse_nested_arr(bp, li[IFLA_INFO_SLAVE_DATA], policy_bond_port) < 0)
|
||||
if (nla_parse_nested_arr(bp, li[IFLA_INFO_PORT_DATA], policy_bond_port) < 0)
|
||||
return NULL;
|
||||
|
||||
if (bp[IFLA_BOND_SLAVE_QUEUE_ID])
|
||||
obj->link.port_data.bond.queue_id = nla_get_u16(bp[IFLA_BOND_SLAVE_QUEUE_ID]);
|
||||
|
||||
if (bp[IFLA_BOND_SLAVE_PRIO]) {
|
||||
obj->link.port_data.bond.prio = nla_get_s32(bp[IFLA_BOND_SLAVE_PRIO]);
|
||||
if (bp[IFLA_BOND_PORT_PRIO]) {
|
||||
obj->link.port_data.bond.prio = nla_get_s32(bp[IFLA_BOND_PORT_PRIO]);
|
||||
obj->link.port_data.bond.prio_has = TRUE;
|
||||
if (!_nm_platform_kernel_support_detected(
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BOND_SLAVE_PRIO)) {
|
||||
/* support for IFLA_BOND_SLAVE_PRIO was added in 0a2ff7cc8ad48a86939a91bd3457f38e59e741a1,
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BOND_PORT_PRIO)) {
|
||||
/* support for IFLA_BOND_PORT_PRIO was added in 0a2ff7cc8ad48a86939a91bd3457f38e59e741a1,
|
||||
* kernel 6.0, 2 October 2022.
|
||||
*
|
||||
* We can only detect support if the attribute is present. A missing attribute
|
||||
* is not conclusive. */
|
||||
_nm_platform_kernel_support_init(
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BOND_SLAVE_PRIO,
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BOND_PORT_PRIO,
|
||||
1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NM_PORT_KIND_BRIDGE:
|
||||
if (nla_parse_nested_arr(brp, li[IFLA_INFO_SLAVE_DATA], policy_bridge_port) < 0)
|
||||
if (nla_parse_nested_arr(brp, li[IFLA_INFO_PORT_DATA], policy_bridge_port) < 0)
|
||||
return NULL;
|
||||
|
||||
if (brp[IFLA_BRPORT_COST])
|
||||
|
|
@ -3577,8 +3587,8 @@ _new_from_nl_link(NMPlatform *platform,
|
|||
&link_cached,
|
||||
&obj->link.kind);
|
||||
|
||||
if (tb[IFLA_MASTER])
|
||||
obj->link.master = nla_get_u32(tb[IFLA_MASTER]);
|
||||
if (tb[IFLA_CONTROLLER])
|
||||
obj->link.controller = nla_get_u32(tb[IFLA_CONTROLLER]);
|
||||
|
||||
if (tb[IFLA_LINK]) {
|
||||
if (!tb[IFLA_LINK_NETNSID])
|
||||
|
|
@ -4948,7 +4958,7 @@ _nl_msg_new_link_set_linkinfo(struct nl_msg *msg, NMLinkType link_type, gconstpo
|
|||
if (props->min_links)
|
||||
NLA_PUT_U32(msg, IFLA_BOND_MIN_LINKS, props->min_links);
|
||||
if (props->packets_per_port)
|
||||
NLA_PUT_U32(msg, IFLA_BOND_PACKETS_PER_SLAVE, props->packets_per_port);
|
||||
NLA_PUT_U32(msg, IFLA_BOND_PACKETS_PER_PORT, props->packets_per_port);
|
||||
if (props->peer_notif_delay_has)
|
||||
NLA_PUT_U32(msg, IFLA_BOND_PEER_NOTIF_DELAY, props->peer_notif_delay);
|
||||
if (props->primary > 0)
|
||||
|
|
@ -4971,7 +4981,7 @@ _nl_msg_new_link_set_linkinfo(struct nl_msg *msg, NMLinkType link_type, gconstpo
|
|||
if (props->arp_missed_max)
|
||||
NLA_PUT_U8(msg, IFLA_BOND_MISSED_MAX, props->arp_missed_max);
|
||||
|
||||
NLA_PUT_U8(msg, IFLA_BOND_ALL_SLAVES_ACTIVE, props->all_ports_active);
|
||||
NLA_PUT_U8(msg, IFLA_BOND_ALL_PORTS_ACTIVE, props->all_ports_active);
|
||||
|
||||
if (props->fail_over_mac)
|
||||
NLA_PUT_U8(msg, IFLA_BOND_FAIL_OVER_MAC, props->fail_over_mac);
|
||||
|
|
@ -6781,7 +6791,7 @@ static NM_UTILS_LOOKUP_STR_DEFINE(
|
|||
NM_UTILS_LOOKUP_STR_ITEM(DELAYED_ACTION_TYPE_REFRESH_ALL_GENL_FAMILIES,
|
||||
"refresh-all-genl-families"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(DELAYED_ACTION_TYPE_REFRESH_LINK, "refresh-link"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(DELAYED_ACTION_TYPE_MASTER_CONNECTED, "master-connected"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED, "controller-connected"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(DELAYED_ACTION_TYPE_READ_RTNL, "read-rtnl"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(DELAYED_ACTION_TYPE_READ_GENL, "read-genl"),
|
||||
NM_UTILS_LOOKUP_STR_ITEM(DELAYED_ACTION_TYPE_WAIT_FOR_RESPONSE_RTNL, "wait-for-response-rtnl"),
|
||||
|
|
@ -6809,8 +6819,8 @@ delayed_action_to_string_full(DelayedActionType action_type,
|
|||
nm_strbuf_append_str(&buf, &buf_size, delayed_action_to_string(action_type));
|
||||
|
||||
switch (action_type) {
|
||||
case DELAYED_ACTION_TYPE_MASTER_CONNECTED:
|
||||
nm_strbuf_append(&buf, &buf_size, " (master-ifindex %d)", GPOINTER_TO_INT(user_data));
|
||||
case DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED:
|
||||
nm_strbuf_append(&buf, &buf_size, " (controller-ifindex %d)", GPOINTER_TO_INT(user_data));
|
||||
break;
|
||||
case DELAYED_ACTION_TYPE_REFRESH_LINK:
|
||||
nm_strbuf_append(&buf, &buf_size, " (ifindex %d)", GPOINTER_TO_INT(user_data));
|
||||
|
|
@ -6991,16 +7001,16 @@ delayed_action_wait_for_nl_response_complete_all(NMPlatform *platfor
|
|||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
delayed_action_handle_MASTER_CONNECTED(NMPlatform *platform, int master_ifindex)
|
||||
delayed_action_handle_CONTROLLER_CONNECTED(NMPlatform *platform, int controller_ifindex)
|
||||
{
|
||||
nm_auto_nmpobj const NMPObject *obj_old = NULL;
|
||||
nm_auto_nmpobj const NMPObject *obj_new = NULL;
|
||||
NMPCacheOpsType cache_op;
|
||||
|
||||
cache_op = nmp_cache_update_link_master_connected(nm_platform_get_cache(platform),
|
||||
master_ifindex,
|
||||
&obj_old,
|
||||
&obj_new);
|
||||
cache_op = nmp_cache_update_link_controller_connected(nm_platform_get_cache(platform),
|
||||
controller_ifindex,
|
||||
&obj_old,
|
||||
&obj_new);
|
||||
if (cache_op == NMP_CACHE_OPS_UNCHANGED)
|
||||
return;
|
||||
cache_on_change(platform, cache_op, obj_old, obj_new);
|
||||
|
|
@ -7042,27 +7052,27 @@ delayed_action_handle_one(NMPlatform *platform)
|
|||
if (priv->delayed_action.flags == DELAYED_ACTION_TYPE_NONE)
|
||||
return FALSE;
|
||||
|
||||
/* First process DELAYED_ACTION_TYPE_MASTER_CONNECTED actions.
|
||||
/* First process DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED actions.
|
||||
* This type of action is entirely cache-internal and is here to resolve a
|
||||
* cache inconsistency. It should be fixed right away. */
|
||||
if (NM_FLAGS_HAS(priv->delayed_action.flags, DELAYED_ACTION_TYPE_MASTER_CONNECTED)) {
|
||||
nm_assert(priv->delayed_action.list_master_connected->len > 0);
|
||||
if (NM_FLAGS_HAS(priv->delayed_action.flags, DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED)) {
|
||||
nm_assert(priv->delayed_action.list_controller_connected->len > 0);
|
||||
|
||||
user_data = priv->delayed_action.list_master_connected->pdata[0];
|
||||
g_ptr_array_remove_index_fast(priv->delayed_action.list_master_connected, 0);
|
||||
if (priv->delayed_action.list_master_connected->len == 0)
|
||||
priv->delayed_action.flags &= ~DELAYED_ACTION_TYPE_MASTER_CONNECTED;
|
||||
user_data = priv->delayed_action.list_controller_connected->pdata[0];
|
||||
g_ptr_array_remove_index_fast(priv->delayed_action.list_controller_connected, 0);
|
||||
if (priv->delayed_action.list_controller_connected->len == 0)
|
||||
priv->delayed_action.flags &= ~DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED;
|
||||
nm_assert(nm_utils_ptrarray_find_first(
|
||||
(gconstpointer *) priv->delayed_action.list_master_connected->pdata,
|
||||
priv->delayed_action.list_master_connected->len,
|
||||
(gconstpointer *) priv->delayed_action.list_controller_connected->pdata,
|
||||
priv->delayed_action.list_controller_connected->len,
|
||||
user_data)
|
||||
< 0);
|
||||
|
||||
_LOGt_delayed_action(DELAYED_ACTION_TYPE_MASTER_CONNECTED, user_data, "handle");
|
||||
delayed_action_handle_MASTER_CONNECTED(platform, GPOINTER_TO_INT(user_data));
|
||||
_LOGt_delayed_action(DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED, user_data, "handle");
|
||||
delayed_action_handle_CONTROLLER_CONNECTED(platform, GPOINTER_TO_INT(user_data));
|
||||
return TRUE;
|
||||
}
|
||||
nm_assert(priv->delayed_action.list_master_connected->len == 0);
|
||||
nm_assert(priv->delayed_action.list_controller_connected->len == 0);
|
||||
|
||||
/* Next we prefer read-genl/read-rtnl, because the buffer size is limited and we want to process events
|
||||
* from netlink early. */
|
||||
|
|
@ -7178,13 +7188,13 @@ delayed_action_schedule(NMPlatform *platform, DelayedActionType action_type, gpo
|
|||
< 0)
|
||||
g_ptr_array_add(priv->delayed_action.list_refresh_link, user_data);
|
||||
break;
|
||||
case DELAYED_ACTION_TYPE_MASTER_CONNECTED:
|
||||
case DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED:
|
||||
if (nm_utils_ptrarray_find_first(
|
||||
(gconstpointer *) priv->delayed_action.list_master_connected->pdata,
|
||||
priv->delayed_action.list_master_connected->len,
|
||||
(gconstpointer *) priv->delayed_action.list_controller_connected->pdata,
|
||||
priv->delayed_action.list_controller_connected->len,
|
||||
user_data)
|
||||
< 0)
|
||||
g_ptr_array_add(priv->delayed_action.list_master_connected, user_data);
|
||||
g_ptr_array_add(priv->delayed_action.list_controller_connected, user_data);
|
||||
break;
|
||||
case DELAYED_ACTION_TYPE_WAIT_FOR_RESPONSE_RTNL:
|
||||
g_array_append_vals(priv->delayed_action.list_wait_for_response_rtnl, user_data, 1);
|
||||
|
|
@ -7198,7 +7208,7 @@ delayed_action_schedule(NMPlatform *platform, DelayedActionType action_type, gpo
|
|||
nm_assert(!user_data);
|
||||
nm_assert(!NM_FLAGS_ANY(action_type,
|
||||
DELAYED_ACTION_TYPE_REFRESH_LINK
|
||||
| DELAYED_ACTION_TYPE_MASTER_CONNECTED
|
||||
| DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED
|
||||
| DELAYED_ACTION_TYPE_WAIT_FOR_RESPONSE_RTNL
|
||||
| DELAYED_ACTION_TYPE_WAIT_FOR_RESPONSE_GENL));
|
||||
break;
|
||||
|
|
@ -7365,30 +7375,30 @@ cache_on_change(NMPlatform *platform,
|
|||
switch (klass->obj_type) {
|
||||
case NMP_OBJECT_TYPE_LINK:
|
||||
{
|
||||
/* check whether changing a slave link can cause a master link (bridge or bond) to go up/down */
|
||||
/* check whether changing a port link can cause a controller link (bridge or bond) to go up/down */
|
||||
if (obj_old
|
||||
&& nmp_cache_link_connected_needs_toggle_by_ifindex(cache,
|
||||
obj_old->link.master,
|
||||
obj_old->link.controller,
|
||||
obj_new,
|
||||
obj_old))
|
||||
delayed_action_schedule(platform,
|
||||
DELAYED_ACTION_TYPE_MASTER_CONNECTED,
|
||||
GINT_TO_POINTER(obj_old->link.master));
|
||||
if (obj_new && (!obj_old || obj_old->link.master != obj_new->link.master)
|
||||
DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED,
|
||||
GINT_TO_POINTER(obj_old->link.controller));
|
||||
if (obj_new && (!obj_old || obj_old->link.controller != obj_new->link.controller)
|
||||
&& nmp_cache_link_connected_needs_toggle_by_ifindex(cache,
|
||||
obj_new->link.master,
|
||||
obj_new->link.controller,
|
||||
obj_new,
|
||||
obj_old))
|
||||
delayed_action_schedule(platform,
|
||||
DELAYED_ACTION_TYPE_MASTER_CONNECTED,
|
||||
GINT_TO_POINTER(obj_new->link.master));
|
||||
DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED,
|
||||
GINT_TO_POINTER(obj_new->link.controller));
|
||||
}
|
||||
{
|
||||
/* check whether we are about to change a master link that needs toggling connected state. */
|
||||
/* check whether we are about to change a controller link that needs toggling connected state. */
|
||||
if (obj_new /* <-- nonsensical, make coverity happy */
|
||||
&& nmp_cache_link_connected_needs_toggle(cache, obj_new, obj_new, obj_old))
|
||||
delayed_action_schedule(platform,
|
||||
DELAYED_ACTION_TYPE_MASTER_CONNECTED,
|
||||
DELAYED_ACTION_TYPE_CONTROLLER_CONNECTED,
|
||||
GINT_TO_POINTER(obj_new->link.ifindex));
|
||||
}
|
||||
{
|
||||
|
|
@ -7527,16 +7537,16 @@ cache_on_change(NMPlatform *platform,
|
|||
}
|
||||
}
|
||||
{
|
||||
/* on enslave/release, we also refresh the master. */
|
||||
/* on attach/release, we also refresh the controller. */
|
||||
int ifindex1 = 0, ifindex2 = 0;
|
||||
gboolean changed_master, changed_connected;
|
||||
gboolean changed_controller, changed_connected;
|
||||
|
||||
changed_master =
|
||||
(obj_new && obj_new->_link.netlink.is_in_netlink && obj_new->link.master > 0
|
||||
? obj_new->link.master
|
||||
changed_controller =
|
||||
(obj_new && obj_new->_link.netlink.is_in_netlink && obj_new->link.controller > 0
|
||||
? obj_new->link.controller
|
||||
: 0)
|
||||
!= (obj_old && obj_old->_link.netlink.is_in_netlink && obj_old->link.master > 0
|
||||
? obj_old->link.master
|
||||
!= (obj_old && obj_old->_link.netlink.is_in_netlink && obj_old->link.controller > 0
|
||||
? obj_old->link.controller
|
||||
: 0);
|
||||
changed_connected = (obj_new && obj_new->_link.netlink.is_in_netlink
|
||||
? NM_FLAGS_HAS(obj_new->link.n_ifi_flags, IFF_LOWER_UP)
|
||||
|
|
@ -7545,15 +7555,15 @@ cache_on_change(NMPlatform *platform,
|
|||
? NM_FLAGS_HAS(obj_old->link.n_ifi_flags, IFF_LOWER_UP)
|
||||
: 2);
|
||||
|
||||
if (changed_master || changed_connected) {
|
||||
ifindex1 =
|
||||
(obj_old && obj_old->_link.netlink.is_in_netlink && obj_old->link.master > 0)
|
||||
? obj_old->link.master
|
||||
: 0;
|
||||
ifindex2 =
|
||||
(obj_new && obj_new->_link.netlink.is_in_netlink && obj_new->link.master > 0)
|
||||
? obj_new->link.master
|
||||
: 0;
|
||||
if (changed_controller || changed_connected) {
|
||||
ifindex1 = (obj_old && obj_old->_link.netlink.is_in_netlink
|
||||
&& obj_old->link.controller > 0)
|
||||
? obj_old->link.controller
|
||||
: 0;
|
||||
ifindex2 = (obj_new && obj_new->_link.netlink.is_in_netlink
|
||||
&& obj_new->link.controller > 0)
|
||||
? obj_new->link.controller
|
||||
: 0;
|
||||
|
||||
if (ifindex1 > 0)
|
||||
delayed_action_schedule(platform,
|
||||
|
|
@ -8664,13 +8674,13 @@ link_add(NMPlatform *platform,
|
|||
|
||||
if (type == NM_LINK_TYPE_BOND) {
|
||||
/* When the kernel loads the bond module, either via explicit modprobe
|
||||
* or automatically in response to creating a bond master, it will also
|
||||
* or automatically in response to creating a bond controller, it will also
|
||||
* create a 'bond0' interface. Since the bond we're about to create may
|
||||
* or may not be named 'bond0' prevent potential confusion about a bond
|
||||
* that the user didn't want by telling the bonding module not to create
|
||||
* bond0 automatically.
|
||||
*/
|
||||
if (!g_file_test("/sys/class/net/bonding_masters", G_FILE_TEST_EXISTS))
|
||||
if (!g_file_test("/sys/class/net/bonding_controllers", G_FILE_TEST_EXISTS))
|
||||
(void) nmp_utils_modprobe(NULL, TRUE, "bonding", "max_bonds=0", NULL);
|
||||
}
|
||||
|
||||
|
|
@ -8746,15 +8756,15 @@ link_change(NMPlatform *platform,
|
|||
goto nla_put_failure;
|
||||
|
||||
nm_assert(nm_streq0("bond", nm_link_type_to_rtnl_type_string(NM_LINK_TYPE_BOND)));
|
||||
NLA_PUT_STRING(nlmsg, IFLA_INFO_SLAVE_KIND, "bond");
|
||||
NLA_PUT_STRING(nlmsg, IFLA_INFO_PORT_KIND, "bond");
|
||||
|
||||
if (!(nl_port_data = nla_nest_start(nlmsg, IFLA_INFO_SLAVE_DATA)))
|
||||
if (!(nl_port_data = nla_nest_start(nlmsg, IFLA_INFO_PORT_DATA)))
|
||||
goto nla_put_failure;
|
||||
|
||||
NLA_PUT_U16(nlmsg, IFLA_BOND_SLAVE_QUEUE_ID, port_data->bond.queue_id);
|
||||
|
||||
if (port_data->bond.prio_has)
|
||||
NLA_PUT_S32(nlmsg, IFLA_BOND_SLAVE_PRIO, port_data->bond.prio);
|
||||
NLA_PUT_S32(nlmsg, IFLA_BOND_PORT_PRIO, port_data->bond.prio);
|
||||
|
||||
nla_nest_end(nlmsg, nl_port_data);
|
||||
nla_nest_end(nlmsg, nl_info);
|
||||
|
|
@ -8767,9 +8777,9 @@ link_change(NMPlatform *platform,
|
|||
goto nla_put_failure;
|
||||
|
||||
nm_assert(nm_streq0("bridge", nm_link_type_to_rtnl_type_string(NM_LINK_TYPE_BRIDGE)));
|
||||
NLA_PUT_STRING(nlmsg, IFLA_INFO_SLAVE_KIND, "bridge");
|
||||
NLA_PUT_STRING(nlmsg, IFLA_INFO_PORT_KIND, "bridge");
|
||||
|
||||
if (!(nl_port_data = nla_nest_start(nlmsg, IFLA_INFO_SLAVE_DATA)))
|
||||
if (!(nl_port_data = nla_nest_start(nlmsg, IFLA_INFO_PORT_DATA)))
|
||||
goto nla_put_failure;
|
||||
|
||||
NLA_PUT_U32(nlmsg, IFLA_BRPORT_COST, port_data->bridge.path_cost);
|
||||
|
|
@ -9494,7 +9504,7 @@ nla_put_failure:
|
|||
static gboolean
|
||||
link_set_bridge_vlans(NMPlatform *platform,
|
||||
int ifindex,
|
||||
gboolean on_master,
|
||||
gboolean on_controller,
|
||||
const NMPlatformBridgeVlan *const *vlans)
|
||||
{
|
||||
nm_auto_nlmsg struct nl_msg *nlmsg = NULL;
|
||||
|
|
@ -9516,7 +9526,9 @@ link_set_bridge_vlans(NMPlatform *platform,
|
|||
if (!(list = nla_nest_start(nlmsg, IFLA_AF_SPEC)))
|
||||
goto nla_put_failure;
|
||||
|
||||
NLA_PUT_U16(nlmsg, IFLA_BRIDGE_FLAGS, on_master ? BRIDGE_FLAGS_MASTER : BRIDGE_FLAGS_SELF);
|
||||
NLA_PUT_U16(nlmsg,
|
||||
IFLA_BRIDGE_FLAGS,
|
||||
on_controller ? BRIDGE_FLAGS_CONTROLLER : BRIDGE_FLAGS_SELF);
|
||||
|
||||
if (vlans) {
|
||||
/* Add VLANs */
|
||||
|
|
@ -9821,16 +9833,16 @@ link_vlan_change(NMPlatform *platform,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
link_enslave(NMPlatform *platform, int master, int slave)
|
||||
link_attach_port(NMPlatform *platform, int controller, int port)
|
||||
{
|
||||
nm_auto_nlmsg struct nl_msg *nlmsg = NULL;
|
||||
int ifindex = slave;
|
||||
int ifindex = port;
|
||||
|
||||
nlmsg = _nl_msg_new_link(RTM_NEWLINK, 0, ifindex, NULL);
|
||||
if (!nlmsg)
|
||||
return FALSE;
|
||||
|
||||
NLA_PUT_U32(nlmsg, IFLA_MASTER, master);
|
||||
NLA_PUT_U32(nlmsg, IFLA_CONTROLLER, controller);
|
||||
|
||||
return (do_change_link(platform, CHANGE_LINK_TYPE_UNSPEC, ifindex, nlmsg, NULL) >= 0);
|
||||
nla_put_failure:
|
||||
|
|
@ -9838,9 +9850,9 @@ nla_put_failure:
|
|||
}
|
||||
|
||||
static gboolean
|
||||
link_release(NMPlatform *platform, int master, int slave)
|
||||
link_release_port(NMPlatform *platform, int controller, int port)
|
||||
{
|
||||
return link_enslave(platform, 0, slave);
|
||||
return link_attach_port(platform, 0, port);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
@ -10070,7 +10082,7 @@ link_can_assume(NMPlatform *platform, int ifindex)
|
|||
if (!NM_FLAGS_HAS(link->link.n_ifi_flags, IFF_UP))
|
||||
return FALSE;
|
||||
|
||||
if (link->link.master > 0)
|
||||
if (link->link.controller > 0)
|
||||
return TRUE;
|
||||
|
||||
nmp_lookup_init_object_by_ifindex(&lookup, NMP_OBJECT_TYPE_IP4_ADDRESS, ifindex);
|
||||
|
|
@ -11605,8 +11617,8 @@ nm_linux_platform_init(NMLinuxPlatform *self)
|
|||
c_list_init(&priv->sysctl_clear_cache_lst);
|
||||
c_list_init(&priv->sysctl_list);
|
||||
|
||||
priv->delayed_action.list_master_connected = g_ptr_array_new();
|
||||
priv->delayed_action.list_refresh_link = g_ptr_array_new();
|
||||
priv->delayed_action.list_controller_connected = g_ptr_array_new();
|
||||
priv->delayed_action.list_refresh_link = g_ptr_array_new();
|
||||
priv->delayed_action.list_wait_for_response_rtnl =
|
||||
g_array_new(FALSE, TRUE, sizeof(DelayedActionWaitForNlResponseData));
|
||||
priv->delayed_action.list_wait_for_response_genl =
|
||||
|
|
@ -11819,7 +11831,7 @@ dispose(GObject *object)
|
|||
WAIT_FOR_NL_RESPONSE_RESULT_FAILED_DISPOSING);
|
||||
|
||||
priv->delayed_action.flags = DELAYED_ACTION_TYPE_NONE;
|
||||
g_ptr_array_set_size(priv->delayed_action.list_master_connected, 0);
|
||||
g_ptr_array_set_size(priv->delayed_action.list_controller_connected, 0);
|
||||
g_ptr_array_set_size(priv->delayed_action.list_refresh_link, 0);
|
||||
|
||||
G_OBJECT_CLASS(nm_linux_platform_parent_class)->dispose(object);
|
||||
|
|
@ -11830,7 +11842,7 @@ finalize(GObject *object)
|
|||
{
|
||||
NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE(object);
|
||||
|
||||
g_ptr_array_unref(priv->delayed_action.list_master_connected);
|
||||
g_ptr_array_unref(priv->delayed_action.list_controller_connected);
|
||||
g_ptr_array_unref(priv->delayed_action.list_refresh_link);
|
||||
g_array_unref(priv->delayed_action.list_wait_for_response_rtnl);
|
||||
g_array_unref(priv->delayed_action.list_wait_for_response_genl);
|
||||
|
|
@ -11908,8 +11920,8 @@ nm_linux_platform_class_init(NMLinuxPlatformClass *klass)
|
|||
platform_class->link_supports_vlans = link_supports_vlans;
|
||||
platform_class->link_supports_sriov = link_supports_sriov;
|
||||
|
||||
platform_class->link_enslave = link_enslave;
|
||||
platform_class->link_release = link_release;
|
||||
platform_class->link_attach_port = link_attach_port;
|
||||
platform_class->link_release_port = link_release_port;
|
||||
|
||||
platform_class->link_can_assume = link_can_assume;
|
||||
|
||||
|
|
|
|||
|
|
@ -1056,7 +1056,7 @@ nm_platform_link_get_all(NMPlatform *self)
|
|||
return NULL;
|
||||
|
||||
/* first sort the links by their name. Below we will sort
|
||||
* further by moving children/slaves to the end. */
|
||||
* further by moving children/ports to the end. */
|
||||
g_ptr_array_sort(links, _link_get_all_presort);
|
||||
|
||||
unseen = g_hash_table_new(nm_direct_hash, NULL);
|
||||
|
|
@ -1074,10 +1074,10 @@ nm_platform_link_get_all(NMPlatform *self)
|
|||
|
||||
if (!item->ifindex)
|
||||
continue;
|
||||
if (item->master != 0) {
|
||||
g_warn_if_fail(item->master > 0);
|
||||
g_warn_if_fail(item->master != item->ifindex);
|
||||
g_warn_if_fail(g_hash_table_contains(unseen, GINT_TO_POINTER(item->master)));
|
||||
if (item->controller != 0) {
|
||||
g_warn_if_fail(item->controller > 0);
|
||||
g_warn_if_fail(item->controller != item->ifindex);
|
||||
g_warn_if_fail(g_hash_table_contains(unseen, GINT_TO_POINTER(item->controller)));
|
||||
}
|
||||
if (item->parent != 0) {
|
||||
if (item->parent != NM_PLATFORM_LINK_OTHER_NETNS) {
|
||||
|
|
@ -1089,7 +1089,7 @@ nm_platform_link_get_all(NMPlatform *self)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Re-order the links list such that children/slaves come after all ancestors */
|
||||
/* Re-order the links list such that children/ports come after all ancestors */
|
||||
nm_assert(g_hash_table_size(unseen) == links->len);
|
||||
nresult = links->len;
|
||||
result = g_ptr_array_new_full(nresult, (GDestroyNotify) nmp_object_unref);
|
||||
|
|
@ -1106,7 +1106,8 @@ nm_platform_link_get_all(NMPlatform *self)
|
|||
|
||||
g_assert(g_hash_table_contains(unseen, GINT_TO_POINTER(item->ifindex)));
|
||||
|
||||
if (item->master > 0 && g_hash_table_contains(unseen, GINT_TO_POINTER(item->master)))
|
||||
if (item->controller > 0
|
||||
&& g_hash_table_contains(unseen, GINT_TO_POINTER(item->controller)))
|
||||
goto skip;
|
||||
if (item->parent > 0 && g_hash_table_contains(unseen, GINT_TO_POINTER(item->parent)))
|
||||
goto skip;
|
||||
|
|
@ -1712,7 +1713,7 @@ nm_platform_link_is_software(NMPlatform *self, int ifindex)
|
|||
}
|
||||
|
||||
/**
|
||||
* nm_platform_link_supports_slaves:
|
||||
* nm_platform_link_supports_ports:
|
||||
* @self: platform instance
|
||||
* @ifindex: Interface index.
|
||||
*
|
||||
|
|
@ -1720,9 +1721,9 @@ nm_platform_link_is_software(NMPlatform *self, int ifindex)
|
|||
* other interfaces.
|
||||
*/
|
||||
gboolean
|
||||
nm_platform_link_supports_slaves(NMPlatform *self, int ifindex)
|
||||
nm_platform_link_supports_ports(NMPlatform *self, int ifindex)
|
||||
{
|
||||
return nm_link_type_supports_slaves(nm_platform_link_get_type(self, ifindex));
|
||||
return nm_link_type_supports_ports(nm_platform_link_get_type(self, ifindex));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2071,7 +2072,7 @@ nm_platform_link_set_sriov_vfs(NMPlatform *self, int ifindex, const NMPlatformVF
|
|||
gboolean
|
||||
nm_platform_link_set_bridge_vlans(NMPlatform *self,
|
||||
int ifindex,
|
||||
gboolean on_master,
|
||||
gboolean on_controller,
|
||||
const NMPlatformBridgeVlan *const *vlans)
|
||||
{
|
||||
guint i;
|
||||
|
|
@ -2082,7 +2083,7 @@ nm_platform_link_set_bridge_vlans(NMPlatform *self,
|
|||
if (_LOGD_ENABLED()) {
|
||||
_LOG3D("link: %s bridge VLANs on %s",
|
||||
vlans ? "setting" : "clearing",
|
||||
on_master ? "master" : "self");
|
||||
on_controller ? "controller" : "self");
|
||||
if (vlans) {
|
||||
for (i = 0; vlans[i]; i++) {
|
||||
char sbuf[NM_UTILS_TO_STRING_BUFFER_SIZE];
|
||||
|
|
@ -2094,7 +2095,7 @@ nm_platform_link_set_bridge_vlans(NMPlatform *self,
|
|||
}
|
||||
}
|
||||
|
||||
return klass->link_set_bridge_vlans(self, ifindex, on_master, vlans);
|
||||
return klass->link_set_bridge_vlans(self, ifindex, on_controller, vlans);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
|
@ -2376,65 +2377,65 @@ nm_platform_link_get_driver_info(NMPlatform *self,
|
|||
}
|
||||
|
||||
/**
|
||||
* nm_platform_link_enslave:
|
||||
* nm_platform_link_attach_port:
|
||||
* @self: platform instance
|
||||
* @master: Interface index of the master
|
||||
* @ifindex: Interface index of the slave
|
||||
* @controller: Interface index of the controller
|
||||
* @ifindex: Interface index of the port
|
||||
*
|
||||
* Enslave @ifindex to @master.
|
||||
* Enport @ifindex to @controller.
|
||||
*/
|
||||
gboolean
|
||||
nm_platform_link_enslave(NMPlatform *self, int master, int ifindex)
|
||||
nm_platform_link_attach_port(NMPlatform *self, int controller, int ifindex)
|
||||
{
|
||||
_CHECK_SELF(self, klass, FALSE);
|
||||
|
||||
g_return_val_if_fail(master > 0, FALSE);
|
||||
g_return_val_if_fail(controller > 0, FALSE);
|
||||
g_return_val_if_fail(ifindex > 0, FALSE);
|
||||
|
||||
_LOG3D("link: enslaving to master '%s'", nm_platform_link_get_name(self, master));
|
||||
return klass->link_enslave(self, master, ifindex);
|
||||
_LOG3D("link: enslaving to controller '%s'", nm_platform_link_get_name(self, controller));
|
||||
return klass->link_attach_port(self, controller, ifindex);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_platform_link_release:
|
||||
* nm_platform_link_release_port:
|
||||
* @self: platform instance
|
||||
* @master: Interface index of the master
|
||||
* @ifindex: Interface index of the slave
|
||||
* @controller: Interface index of the controller
|
||||
* @ifindex: Interface index of the port
|
||||
*
|
||||
* Release @slave from @master.
|
||||
* Release @port from @controller.
|
||||
*/
|
||||
gboolean
|
||||
nm_platform_link_release(NMPlatform *self, int master, int ifindex)
|
||||
nm_platform_link_release_port(NMPlatform *self, int controller, int ifindex)
|
||||
{
|
||||
_CHECK_SELF(self, klass, FALSE);
|
||||
|
||||
g_return_val_if_fail(master > 0, FALSE);
|
||||
g_return_val_if_fail(controller > 0, FALSE);
|
||||
g_return_val_if_fail(ifindex > 0, FALSE);
|
||||
|
||||
if (nm_platform_link_get_master(self, ifindex) != master)
|
||||
if (nm_platform_link_get_controller(self, ifindex) != controller)
|
||||
return FALSE;
|
||||
|
||||
_LOG3D("link: releasing %d from master '%s' (%d)",
|
||||
_LOG3D("link: releasing %d from controller '%s' (%d)",
|
||||
ifindex,
|
||||
nm_platform_link_get_name(self, master),
|
||||
master);
|
||||
return klass->link_release(self, master, ifindex);
|
||||
nm_platform_link_get_name(self, controller),
|
||||
controller);
|
||||
return klass->link_release_port(self, controller, ifindex);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_platform_link_get_master:
|
||||
* nm_platform_link_get_controller:
|
||||
* @self: platform instance
|
||||
* @slave: Interface index of the slave.
|
||||
* @port: Interface index of the port.
|
||||
*
|
||||
* Returns: Interface index of the slave's master.
|
||||
* Returns: Interface index of the port's controller.
|
||||
*/
|
||||
int
|
||||
nm_platform_link_get_master(NMPlatform *self, int slave)
|
||||
nm_platform_link_get_controller(NMPlatform *self, int port)
|
||||
{
|
||||
const NMPlatformLink *pllink;
|
||||
|
||||
pllink = nm_platform_link_get(self, slave);
|
||||
return pllink ? pllink->master : 0;
|
||||
pllink = nm_platform_link_get(self, port);
|
||||
return pllink ? pllink->controller : 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
@ -2852,9 +2853,9 @@ link_get_option(NMPlatform *self, int ifindex, const char *category, const char
|
|||
}
|
||||
|
||||
static const char *
|
||||
master_category(NMPlatform *self, int master)
|
||||
controller_category(NMPlatform *self, int controller)
|
||||
{
|
||||
switch (nm_platform_link_get_type(self, master)) {
|
||||
switch (nm_platform_link_get_type(self, controller)) {
|
||||
case NM_LINK_TYPE_BRIDGE:
|
||||
return "bridge";
|
||||
case NM_LINK_TYPE_BOND:
|
||||
|
|
@ -2865,28 +2866,28 @@ master_category(NMPlatform *self, int master)
|
|||
}
|
||||
|
||||
static const char *
|
||||
slave_category(NMPlatform *self, int slave)
|
||||
port_category(NMPlatform *self, int port)
|
||||
{
|
||||
int master = nm_platform_link_get_master(self, slave);
|
||||
int controller = nm_platform_link_get_controller(self, port);
|
||||
|
||||
if (master <= 0)
|
||||
if (controller <= 0)
|
||||
return NULL;
|
||||
|
||||
switch (nm_platform_link_get_type(self, master)) {
|
||||
switch (nm_platform_link_get_type(self, controller)) {
|
||||
case NM_LINK_TYPE_BRIDGE:
|
||||
return "brport";
|
||||
case NM_LINK_TYPE_BOND:
|
||||
return "bonding_slave";
|
||||
return "bonding_port";
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_platform_sysctl_master_set_option(NMPlatform *self,
|
||||
int ifindex,
|
||||
const char *option,
|
||||
const char *value)
|
||||
nm_platform_sysctl_controller_set_option(NMPlatform *self,
|
||||
int ifindex,
|
||||
const char *option,
|
||||
const char *value)
|
||||
{
|
||||
_CHECK_SELF(self, klass, FALSE);
|
||||
|
||||
|
|
@ -2894,25 +2895,25 @@ nm_platform_sysctl_master_set_option(NMPlatform *self,
|
|||
g_return_val_if_fail(option, FALSE);
|
||||
g_return_val_if_fail(value, FALSE);
|
||||
|
||||
return link_set_option(self, ifindex, master_category(self, ifindex), option, value);
|
||||
return link_set_option(self, ifindex, controller_category(self, ifindex), option, value);
|
||||
}
|
||||
|
||||
char *
|
||||
nm_platform_sysctl_master_get_option(NMPlatform *self, int ifindex, const char *option)
|
||||
nm_platform_sysctl_controller_get_option(NMPlatform *self, int ifindex, const char *option)
|
||||
{
|
||||
_CHECK_SELF(self, klass, NULL);
|
||||
|
||||
g_return_val_if_fail(ifindex > 0, FALSE);
|
||||
g_return_val_if_fail(option, FALSE);
|
||||
|
||||
return link_get_option(self, ifindex, master_category(self, ifindex), option);
|
||||
return link_get_option(self, ifindex, controller_category(self, ifindex), option);
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_platform_sysctl_slave_set_option(NMPlatform *self,
|
||||
int ifindex,
|
||||
const char *option,
|
||||
const char *value)
|
||||
nm_platform_sysctl_port_set_option(NMPlatform *self,
|
||||
int ifindex,
|
||||
const char *option,
|
||||
const char *value)
|
||||
{
|
||||
_CHECK_SELF(self, klass, FALSE);
|
||||
|
||||
|
|
@ -2920,18 +2921,18 @@ nm_platform_sysctl_slave_set_option(NMPlatform *self,
|
|||
g_return_val_if_fail(option, FALSE);
|
||||
g_return_val_if_fail(value, FALSE);
|
||||
|
||||
return link_set_option(self, ifindex, slave_category(self, ifindex), option, value);
|
||||
return link_set_option(self, ifindex, port_category(self, ifindex), option, value);
|
||||
}
|
||||
|
||||
char *
|
||||
nm_platform_sysctl_slave_get_option(NMPlatform *self, int ifindex, const char *option)
|
||||
nm_platform_sysctl_port_get_option(NMPlatform *self, int ifindex, const char *option)
|
||||
{
|
||||
_CHECK_SELF(self, klass, NULL);
|
||||
|
||||
g_return_val_if_fail(ifindex > 0, FALSE);
|
||||
g_return_val_if_fail(option, FALSE);
|
||||
|
||||
return link_get_option(self, ifindex, slave_category(self, ifindex), option);
|
||||
return link_get_option(self, ifindex, port_category(self, ifindex), option);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
@ -4866,8 +4867,8 @@ nm_platform_ip_route_get_prune_list(NMPlatform *self,
|
|||
return NULL;
|
||||
|
||||
lnk_vrf = nm_platform_link_get_lnk_vrf(self, ifindex, &pllink);
|
||||
if (!lnk_vrf && pllink && pllink->master > 0)
|
||||
lnk_vrf = nm_platform_link_get_lnk_vrf(self, pllink->master, NULL);
|
||||
if (!lnk_vrf && pllink && pllink->controller > 0)
|
||||
lnk_vrf = nm_platform_link_get_lnk_vrf(self, pllink->controller, NULL);
|
||||
local_table = lnk_vrf ? lnk_vrf->table : RT_TABLE_LOCAL;
|
||||
|
||||
c_list_for_each (iter, &head_entry->lst_entries_head) {
|
||||
|
|
@ -6049,7 +6050,7 @@ nm_platform_vlan_qos_mapping_to_string(const char *name,
|
|||
const char *
|
||||
nm_platform_link_to_string(const NMPlatformLink *link, char *buf, gsize len)
|
||||
{
|
||||
char master[20];
|
||||
char controller[20];
|
||||
char parent[20];
|
||||
char str_flags[1 + NM_PLATFORM_LINK_FLAGS2STR_MAX_LEN + 1];
|
||||
char str_highlighted_flags[50];
|
||||
|
|
@ -6084,10 +6085,10 @@ nm_platform_link_to_string(const NMPlatformLink *link, char *buf, gsize len)
|
|||
} else
|
||||
str_flags[0] = '\0';
|
||||
|
||||
if (link->master)
|
||||
g_snprintf(master, sizeof(master), " master %d", link->master);
|
||||
if (link->controller)
|
||||
g_snprintf(controller, sizeof(controller), " controller %d", link->controller);
|
||||
else
|
||||
master[0] = 0;
|
||||
controller[0] = 0;
|
||||
|
||||
if (link->parent > 0)
|
||||
g_snprintf(parent, sizeof(parent), "@%d", link->parent);
|
||||
|
|
@ -6115,7 +6116,7 @@ nm_platform_link_to_string(const NMPlatformLink *link, char *buf, gsize len)
|
|||
"%s" /* parent */
|
||||
" <%s%s>" /* flags */
|
||||
" mtu %d"
|
||||
"%s" /* master */
|
||||
"%s" /* controller */
|
||||
" arp %u" /* arptype */
|
||||
" %s" /* link->type */
|
||||
"%s%s" /* kind */
|
||||
|
|
@ -6139,7 +6140,7 @@ nm_platform_link_to_string(const NMPlatformLink *link, char *buf, gsize len)
|
|||
str_highlighted_flags,
|
||||
str_flags,
|
||||
link->mtu,
|
||||
master,
|
||||
controller,
|
||||
link->arptype,
|
||||
str_link_type ?: "???",
|
||||
link->kind ? (g_strcmp0(str_link_type, link->kind) ? "/" : "*") : "?",
|
||||
|
|
@ -8032,7 +8033,7 @@ nm_platform_link_hash_update(const NMPlatformLink *obj, NMHashState *h)
|
|||
{
|
||||
nm_hash_update_vals(h,
|
||||
obj->ifindex,
|
||||
obj->master,
|
||||
obj->controller,
|
||||
obj->parent,
|
||||
obj->n_ifi_flags,
|
||||
obj->mtu,
|
||||
|
|
@ -8095,7 +8096,7 @@ nm_platform_link_cmp(const NMPlatformLink *a, const NMPlatformLink *b)
|
|||
NM_CMP_FIELD(a, b, ifindex);
|
||||
NM_CMP_FIELD(a, b, type);
|
||||
NM_CMP_FIELD_STR(a, b, name);
|
||||
NM_CMP_FIELD(a, b, master);
|
||||
NM_CMP_FIELD(a, b, controller);
|
||||
NM_CMP_FIELD(a, b, parent);
|
||||
NM_CMP_FIELD(a, b, n_ifi_flags);
|
||||
NM_CMP_FIELD_UNSAFE(a, b, connected);
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ struct _NMPlatformLink {
|
|||
/* NMPlatform initializes this field with a static string. */
|
||||
const char *driver;
|
||||
|
||||
int master;
|
||||
int controller;
|
||||
|
||||
/* rtnl_link_get_link(), IFLA_LINK.
|
||||
* If IFLA_LINK_NETNSID indicates that the parent is in another namespace,
|
||||
|
|
@ -241,11 +241,11 @@ struct _NMPlatformLink {
|
|||
/* an interface can only hold IFLA_INFO_SLAVE_DATA for one link type */
|
||||
NMPlatformLinkPortData port_data;
|
||||
|
||||
/* IFLA_INFO_SLAVE_KIND */
|
||||
/* IFLA_INFO_PORT_KIND */
|
||||
NMPortKind port_kind;
|
||||
|
||||
/* @connected is mostly identical to (@n_ifi_flags & IFF_UP). Except for bridge/bond masters,
|
||||
* where we coerce the link as disconnect if it has no slaves. */
|
||||
/* @connected is mostly identical to (@n_ifi_flags & IFF_UP). Except for bridge/bond controllers,
|
||||
* where we coerce the link as disconnect if it has no ports. */
|
||||
bool connected : 1;
|
||||
|
||||
bool initialized : 1;
|
||||
|
|
@ -1052,7 +1052,7 @@ typedef enum {
|
|||
* were added at the same time. */
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_FRA_IP_PROTO,
|
||||
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BOND_SLAVE_PRIO,
|
||||
NM_PLATFORM_KERNEL_SUPPORT_TYPE_IFLA_BOND_PORT_PRIO,
|
||||
|
||||
_NM_PLATFORM_KERNEL_SUPPORT_NUM,
|
||||
} NMPlatformKernelSupportType;
|
||||
|
|
@ -1187,7 +1187,7 @@ typedef struct {
|
|||
gboolean (*link_set_sriov_vfs)(NMPlatform *self, int ifindex, const NMPlatformVF *const *vfs);
|
||||
gboolean (*link_set_bridge_vlans)(NMPlatform *self,
|
||||
int ifindex,
|
||||
gboolean on_master,
|
||||
gboolean on_controller,
|
||||
const NMPlatformBridgeVlan *const *vlans);
|
||||
gboolean (*link_set_bridge_info)(NMPlatform *self,
|
||||
int ifindex,
|
||||
|
|
@ -1206,8 +1206,8 @@ typedef struct {
|
|||
gboolean (*link_supports_vlans)(NMPlatform *self, int ifindex);
|
||||
gboolean (*link_supports_sriov)(NMPlatform *self, int ifindex);
|
||||
|
||||
gboolean (*link_enslave)(NMPlatform *self, int master, int slave);
|
||||
gboolean (*link_release)(NMPlatform *self, int master, int slave);
|
||||
gboolean (*link_attach_port)(NMPlatform *self, int controller, int port);
|
||||
gboolean (*link_release_port)(NMPlatform *self, int controller, int port);
|
||||
|
||||
gboolean (*link_can_assume)(NMPlatform *self, int ifindex);
|
||||
|
||||
|
|
@ -1973,12 +1973,12 @@ int nm_platform_link_get_inet6_addr_gen_mode(NMPlatform *self, int ifind
|
|||
|
||||
gconstpointer nm_platform_link_get_address(NMPlatform *self, int ifindex, size_t *length);
|
||||
|
||||
int nm_platform_link_get_master(NMPlatform *self, int slave);
|
||||
int nm_platform_link_get_controller(NMPlatform *self, int port);
|
||||
|
||||
gboolean nm_platform_link_can_assume(NMPlatform *self, int ifindex);
|
||||
|
||||
NMOptionBool nm_platform_link_get_unmanaged(NMPlatform *self, int ifindex);
|
||||
gboolean nm_platform_link_supports_slaves(NMPlatform *self, int ifindex);
|
||||
gboolean nm_platform_link_supports_ports(NMPlatform *self, int ifindex);
|
||||
const char *nm_platform_link_get_type_name(NMPlatform *self, int ifindex);
|
||||
|
||||
gboolean nm_platform_link_refresh(NMPlatform *self, int ifindex);
|
||||
|
|
@ -2051,7 +2051,7 @@ gboolean
|
|||
nm_platform_link_set_sriov_vfs(NMPlatform *self, int ifindex, const NMPlatformVF *const *vfs);
|
||||
gboolean nm_platform_link_set_bridge_vlans(NMPlatform *self,
|
||||
int ifindex,
|
||||
gboolean on_master,
|
||||
gboolean on_controller,
|
||||
const NMPlatformBridgeVlan *const *vlans);
|
||||
gboolean nm_platform_link_set_bridge_info(NMPlatform *self,
|
||||
int ifindex,
|
||||
|
|
@ -2070,19 +2070,19 @@ gboolean nm_platform_link_supports_carrier_detect(NMPlatform *self, int ifindex)
|
|||
gboolean nm_platform_link_supports_vlans(NMPlatform *self, int ifindex);
|
||||
gboolean nm_platform_link_supports_sriov(NMPlatform *self, int ifindex);
|
||||
|
||||
gboolean nm_platform_link_enslave(NMPlatform *self, int master, int slave);
|
||||
gboolean nm_platform_link_release(NMPlatform *self, int master, int slave);
|
||||
gboolean nm_platform_link_attach_port(NMPlatform *self, int controller, int port);
|
||||
gboolean nm_platform_link_release_port(NMPlatform *self, int controller, int port);
|
||||
|
||||
gboolean nm_platform_sysctl_master_set_option(NMPlatform *self,
|
||||
int ifindex,
|
||||
const char *option,
|
||||
const char *value);
|
||||
char *nm_platform_sysctl_master_get_option(NMPlatform *self, int ifindex, const char *option);
|
||||
gboolean nm_platform_sysctl_slave_set_option(NMPlatform *self,
|
||||
int ifindex,
|
||||
const char *option,
|
||||
const char *value);
|
||||
char *nm_platform_sysctl_slave_get_option(NMPlatform *self, int ifindex, const char *option);
|
||||
gboolean nm_platform_sysctl_controller_set_option(NMPlatform *self,
|
||||
int ifindex,
|
||||
const char *option,
|
||||
const char *value);
|
||||
char *nm_platform_sysctl_controller_get_option(NMPlatform *self, int ifindex, const char *option);
|
||||
gboolean nm_platform_sysctl_port_set_option(NMPlatform *self,
|
||||
int ifindex,
|
||||
const char *option,
|
||||
const char *value);
|
||||
char *nm_platform_sysctl_port_get_option(NMPlatform *self, int ifindex, const char *option);
|
||||
|
||||
const NMPObject *nm_platform_link_get_lnk(NMPlatform *self,
|
||||
int ifindex,
|
||||
|
|
@ -2569,7 +2569,7 @@ void nm_platform_mptcp_addr_hash_update(const NMPlatformMptcpAddr *obj, NMHashSt
|
|||
guint nm_platform_mptcp_addr_index_addr_cmp(gconstpointer data);
|
||||
gboolean nm_platform_mptcp_addr_index_addr_equal(gconstpointer data_a, gconstpointer data_b);
|
||||
|
||||
#define NM_PLATFORM_LINK_FLAGS2STR_MAX_LEN ((gsize) 162)
|
||||
#define NM_PLATFORM_LINK_FLAGS2STR_MAX_LEN ((gsize) 165)
|
||||
|
||||
gboolean nm_platform_ethtool_set_wake_on_lan(NMPlatform *self,
|
||||
int ifindex,
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ NM_UTILS_FLAGS2STR_DEFINE(nm_platform_link_flags2str,
|
|||
NM_UTILS_FLAGS2STR(IFF_NOARP, "noarp"),
|
||||
NM_UTILS_FLAGS2STR(IFF_ALLMULTI, "allmulti"),
|
||||
NM_UTILS_FLAGS2STR(IFF_PROMISC, "promisc"),
|
||||
NM_UTILS_FLAGS2STR(IFF_MASTER, "master"),
|
||||
NM_UTILS_FLAGS2STR(IFF_SLAVE, "slave"),
|
||||
NM_UTILS_FLAGS2STR(IFF_MASTER, "controller"),
|
||||
NM_UTILS_FLAGS2STR(IFF_SLAVE, "port"),
|
||||
NM_UTILS_FLAGS2STR(IFF_DEBUG, "debug"),
|
||||
NM_UTILS_FLAGS2STR(IFF_DYNAMIC, "dynamic"),
|
||||
NM_UTILS_FLAGS2STR(IFF_AUTOMEDIA, "automedia"),
|
||||
|
|
|
|||
|
|
@ -701,9 +701,9 @@ _nmp_object_fixup_link_udev_fields(NMPObject **obj_new, NMPObject *obj_orig, gbo
|
|||
}
|
||||
|
||||
static void
|
||||
_nmp_object_fixup_link_master_connected(NMPObject **obj_new,
|
||||
NMPObject *obj_orig,
|
||||
const NMPCache *cache)
|
||||
_nmp_object_fixup_link_controller_connected(NMPObject **obj_new,
|
||||
NMPObject *obj_orig,
|
||||
const NMPCache *cache)
|
||||
{
|
||||
NMPObject *obj;
|
||||
|
||||
|
|
@ -2035,58 +2035,58 @@ nmp_cache_use_udev_get(const NMPCache *cache)
|
|||
/*****************************************************************************/
|
||||
|
||||
gboolean
|
||||
nmp_cache_link_connected_for_slave(int ifindex_master, const NMPObject *slave)
|
||||
nmp_cache_link_connected_for_port(int ifindex_controller, const NMPObject *port)
|
||||
{
|
||||
nm_assert(NMP_OBJECT_GET_TYPE(slave) == NMP_OBJECT_TYPE_LINK);
|
||||
nm_assert(NMP_OBJECT_GET_TYPE(port) == NMP_OBJECT_TYPE_LINK);
|
||||
|
||||
return ifindex_master > 0 && slave->link.master == ifindex_master && slave->link.connected
|
||||
&& nmp_object_is_visible(slave);
|
||||
return ifindex_controller > 0 && port->link.controller == ifindex_controller
|
||||
&& port->link.connected && nmp_object_is_visible(port);
|
||||
}
|
||||
|
||||
/**
|
||||
* nmp_cache_link_connected_needs_toggle:
|
||||
* @cache: the platform cache
|
||||
* @master: the link object, that is checked whether its connected property
|
||||
* @controller: the link object, that is checked whether its connected property
|
||||
* needs to be toggled.
|
||||
* @potential_slave: (nullable): an additional link object that is treated
|
||||
* @potential_port: (nullable): an additional link object that is treated
|
||||
* as if it was inside @cache. If given, it shaddows a link in the cache
|
||||
* with the same ifindex.
|
||||
* @ignore_slave: (nullable): if set, the check will pretend that @ignore_slave
|
||||
* @ignore_port: (nullable): if set, the check will pretend that @ignore_port
|
||||
* is not in the cache.
|
||||
*
|
||||
* NMPlatformLink has two connected flags: (master->link.flags&IFF_LOWER_UP) (as reported
|
||||
* from netlink) and master->link.connected. For bond and bridge master, kernel reports
|
||||
* those links as IFF_LOWER_UP if they have no slaves attached. We want to present instead
|
||||
* a combined @connected flag that shows masters without slaves as down.
|
||||
* NMPlatformLink has two connected flags: (controller->link.flags&IFF_LOWER_UP) (as reported
|
||||
* from netlink) and controller->link.connected. For bond and bridge controller, kernel reports
|
||||
* those links as IFF_LOWER_UP if they have no ports attached. We want to present instead
|
||||
* a combined @connected flag that shows controllers without ports as down.
|
||||
*
|
||||
* Check if the connected flag of @master should be toggled according to the content
|
||||
* of @cache (including @potential_slave).
|
||||
* Check if the connected flag of @controller should be toggled according to the content
|
||||
* of @cache (including @potential_port).
|
||||
*
|
||||
* Returns: %TRUE, if @master->link.connected should be flipped/toggled.
|
||||
* Returns: %TRUE, if @controller->link.connected should be flipped/toggled.
|
||||
**/
|
||||
gboolean
|
||||
nmp_cache_link_connected_needs_toggle(const NMPCache *cache,
|
||||
const NMPObject *master,
|
||||
const NMPObject *potential_slave,
|
||||
const NMPObject *ignore_slave)
|
||||
const NMPObject *controller,
|
||||
const NMPObject *potential_port,
|
||||
const NMPObject *ignore_port)
|
||||
{
|
||||
gboolean is_lower_up = FALSE;
|
||||
|
||||
if (!master || NMP_OBJECT_GET_TYPE(master) != NMP_OBJECT_TYPE_LINK || master->link.ifindex <= 0
|
||||
|| !nmp_object_is_visible(master)
|
||||
|| !NM_IN_SET(master->link.type, NM_LINK_TYPE_BRIDGE, NM_LINK_TYPE_BOND))
|
||||
if (!controller || NMP_OBJECT_GET_TYPE(controller) != NMP_OBJECT_TYPE_LINK
|
||||
|| controller->link.ifindex <= 0 || !nmp_object_is_visible(controller)
|
||||
|| !NM_IN_SET(controller->link.type, NM_LINK_TYPE_BRIDGE, NM_LINK_TYPE_BOND))
|
||||
return FALSE;
|
||||
|
||||
/* if native IFF_LOWER_UP is down, link.connected must also be down
|
||||
* regardless of the slaves. */
|
||||
if (!NM_FLAGS_HAS(master->link.n_ifi_flags, IFF_LOWER_UP))
|
||||
return !!master->link.connected;
|
||||
* regardless of the ports. */
|
||||
if (!NM_FLAGS_HAS(controller->link.n_ifi_flags, IFF_LOWER_UP))
|
||||
return !!controller->link.connected;
|
||||
|
||||
if (potential_slave && NMP_OBJECT_GET_TYPE(potential_slave) != NMP_OBJECT_TYPE_LINK)
|
||||
potential_slave = NULL;
|
||||
if (potential_port && NMP_OBJECT_GET_TYPE(potential_port) != NMP_OBJECT_TYPE_LINK)
|
||||
potential_port = NULL;
|
||||
|
||||
if (potential_slave
|
||||
&& nmp_cache_link_connected_for_slave(master->link.ifindex, potential_slave))
|
||||
if (potential_port
|
||||
&& nmp_cache_link_connected_for_port(controller->link.ifindex, potential_port))
|
||||
is_lower_up = TRUE;
|
||||
else {
|
||||
NMPLookup lookup;
|
||||
|
|
@ -2099,48 +2099,48 @@ nmp_cache_link_connected_needs_toggle(const NMPCache *cache,
|
|||
&link) {
|
||||
const NMPObject *obj = NMP_OBJECT_UP_CAST((NMPlatformObject *) link);
|
||||
|
||||
if ((!potential_slave || potential_slave->link.ifindex != link->ifindex)
|
||||
&& ignore_slave != obj
|
||||
&& nmp_cache_link_connected_for_slave(master->link.ifindex, obj)) {
|
||||
if ((!potential_port || potential_port->link.ifindex != link->ifindex)
|
||||
&& ignore_port != obj
|
||||
&& nmp_cache_link_connected_for_port(controller->link.ifindex, obj)) {
|
||||
is_lower_up = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return !!master->link.connected != is_lower_up;
|
||||
return !!controller->link.connected != is_lower_up;
|
||||
}
|
||||
|
||||
/**
|
||||
* nmp_cache_link_connected_needs_toggle_by_ifindex:
|
||||
* @cache:
|
||||
* @master_ifindex: the ifindex of a potential master that should be checked
|
||||
* @controller_ifindex: the ifindex of a potential controller that should be checked
|
||||
* whether it needs toggling.
|
||||
* @potential_slave: (nullable): passed to nmp_cache_link_connected_needs_toggle().
|
||||
* It considers @potential_slave as being inside the cache, replacing an existing
|
||||
* @potential_port: (nullable): passed to nmp_cache_link_connected_needs_toggle().
|
||||
* It considers @potential_port as being inside the cache, replacing an existing
|
||||
* link with the same ifindex.
|
||||
* @ignore_slave: (nullable): passed to nmp_cache_link_connected_needs_toggle().
|
||||
* @ignore_port: (nullable): passed to nmp_cache_link_connected_needs_toggle().
|
||||
*
|
||||
* The flag obj->link.connected depends on the state of other links in the
|
||||
* @cache. See also nmp_cache_link_connected_needs_toggle(). Given an ifindex
|
||||
* of a master, check if the cache contains such a master link that needs
|
||||
* of a controller, check if the cache contains such a controller link that needs
|
||||
* toggling of the connected flag.
|
||||
*
|
||||
* Returns: NULL if there is no master link with ifindex @master_ifindex that should be toggled.
|
||||
* Returns: NULL if there is no controller link with ifindex @controller_ifindex that should be toggled.
|
||||
* Otherwise, return the link object from inside the cache with the given ifindex.
|
||||
* The connected flag of that master should be toggled.
|
||||
* The connected flag of that controller should be toggled.
|
||||
*/
|
||||
const NMPObject *
|
||||
nmp_cache_link_connected_needs_toggle_by_ifindex(const NMPCache *cache,
|
||||
int master_ifindex,
|
||||
const NMPObject *potential_slave,
|
||||
const NMPObject *ignore_slave)
|
||||
int controller_ifindex,
|
||||
const NMPObject *potential_port,
|
||||
const NMPObject *ignore_port)
|
||||
{
|
||||
const NMPObject *master;
|
||||
const NMPObject *controller;
|
||||
|
||||
if (master_ifindex > 0) {
|
||||
master = nmp_cache_lookup_link(cache, master_ifindex);
|
||||
if (nmp_cache_link_connected_needs_toggle(cache, master, potential_slave, ignore_slave))
|
||||
return master;
|
||||
if (controller_ifindex > 0) {
|
||||
controller = nmp_cache_lookup_link(cache, controller_ifindex);
|
||||
if (nmp_cache_link_connected_needs_toggle(cache, controller, potential_port, ignore_port))
|
||||
return controller;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -2804,7 +2804,7 @@ nmp_cache_remove_netlink(NMPCache *cache,
|
|||
obj_new = nmp_object_clone(obj_old, FALSE);
|
||||
obj_new->_link.netlink.is_in_netlink = FALSE;
|
||||
|
||||
_nmp_object_fixup_link_master_connected(&obj_new, NULL, cache);
|
||||
_nmp_object_fixup_link_controller_connected(&obj_new, NULL, cache);
|
||||
_nmp_object_fixup_link_udev_fields(&obj_new, NULL, cache->use_udev);
|
||||
|
||||
_idxcache_update(cache, entry_old, obj_new, FALSE, &entry_new);
|
||||
|
|
@ -2878,7 +2878,7 @@ nmp_cache_update_netlink(NMPCache *cache,
|
|||
}
|
||||
|
||||
if (NMP_OBJECT_GET_TYPE(obj_hand_over) == NMP_OBJECT_TYPE_LINK) {
|
||||
_nmp_object_fixup_link_master_connected(&obj_hand_over, NULL, cache);
|
||||
_nmp_object_fixup_link_controller_connected(&obj_hand_over, NULL, cache);
|
||||
_nmp_object_fixup_link_udev_fields(&obj_hand_over, NULL, cache->use_udev);
|
||||
}
|
||||
|
||||
|
|
@ -2914,7 +2914,7 @@ nmp_cache_update_netlink(NMPCache *cache,
|
|||
is_alive = TRUE;
|
||||
|
||||
if (is_alive) {
|
||||
_nmp_object_fixup_link_master_connected(&obj_hand_over, NULL, cache);
|
||||
_nmp_object_fixup_link_controller_connected(&obj_hand_over, NULL, cache);
|
||||
|
||||
/* Merge the netlink parts with what we have from udev. */
|
||||
udev_device_unref(obj_hand_over->_link.udev.device);
|
||||
|
|
@ -3193,10 +3193,10 @@ nmp_cache_update_link_udev(NMPCache *cache,
|
|||
}
|
||||
|
||||
NMPCacheOpsType
|
||||
nmp_cache_update_link_master_connected(NMPCache *cache,
|
||||
int ifindex,
|
||||
const NMPObject **out_obj_old,
|
||||
const NMPObject **out_obj_new)
|
||||
nmp_cache_update_link_controller_connected(NMPCache *cache,
|
||||
int ifindex,
|
||||
const NMPObject **out_obj_old,
|
||||
const NMPObject **out_obj_new)
|
||||
{
|
||||
const NMDedupMultiEntry *entry_old;
|
||||
const NMDedupMultiEntry *entry_new = NULL;
|
||||
|
|
|
|||
|
|
@ -952,15 +952,15 @@ const NMPObject *nmp_cache_lookup_link_full(const NMPCache *cache,
|
|||
NMPObjectMatchFn match_fn,
|
||||
gpointer user_data);
|
||||
|
||||
gboolean nmp_cache_link_connected_for_slave(int ifindex_master, const NMPObject *slave);
|
||||
gboolean nmp_cache_link_connected_for_port(int ifindex_controller, const NMPObject *port);
|
||||
gboolean nmp_cache_link_connected_needs_toggle(const NMPCache *cache,
|
||||
const NMPObject *master,
|
||||
const NMPObject *potential_slave,
|
||||
const NMPObject *ignore_slave);
|
||||
const NMPObject *nmp_cache_link_connected_needs_toggle_by_ifindex(const NMPCache *cache,
|
||||
int master_ifindex,
|
||||
const NMPObject *potential_slave,
|
||||
const NMPObject *ignore_slave);
|
||||
const NMPObject *controller,
|
||||
const NMPObject *potential_port,
|
||||
const NMPObject *ignore_port);
|
||||
const NMPObject *nmp_cache_link_connected_needs_toggle_by_ifindex(const NMPCache *cache,
|
||||
int controller_ifindex,
|
||||
const NMPObject *potential_port,
|
||||
const NMPObject *ignore_port);
|
||||
|
||||
gboolean nmp_cache_use_udev_get(const NMPCache *cache);
|
||||
|
||||
|
|
@ -994,10 +994,10 @@ NMPCacheOpsType nmp_cache_update_link_udev(NMPCache *cache,
|
|||
struct udev_device *udevice,
|
||||
const NMPObject **out_obj_old,
|
||||
const NMPObject **out_obj_new);
|
||||
NMPCacheOpsType nmp_cache_update_link_master_connected(NMPCache *cache,
|
||||
int ifindex,
|
||||
const NMPObject **out_obj_old,
|
||||
const NMPObject **out_obj_new);
|
||||
NMPCacheOpsType nmp_cache_update_link_controller_connected(NMPCache *cache,
|
||||
int ifindex,
|
||||
const NMPObject **out_obj_old,
|
||||
const NMPObject **out_obj_new);
|
||||
|
||||
static inline const NMDedupMultiEntry *
|
||||
nmp_cache_reresolve_main_entry(NMPCache *cache,
|
||||
|
|
|
|||
|
|
@ -575,14 +575,14 @@ nmc_activation_get_effective_state(NMActiveConnection *active,
|
|||
}
|
||||
break;
|
||||
case NM_ACTIVE_CONNECTION_STATE_ACTIVATING:
|
||||
/* activating master connection does not automatically activate any slaves, so their
|
||||
/* activating controller connection does not automatically activate any ports, so their
|
||||
* active connection state will not progress beyond ACTIVATING state.
|
||||
* Monitor the device instead. */
|
||||
if (device
|
||||
&& (NM_IS_DEVICE_BOND(device) || NM_IS_DEVICE_TEAM(device)
|
||||
|| NM_IS_DEVICE_BRIDGE(device))
|
||||
&& dev_state >= NM_DEVICE_STATE_IP_CONFIG && dev_state <= NM_DEVICE_STATE_ACTIVATED) {
|
||||
*reason = "master waiting for slaves";
|
||||
*reason = "controller waiting for ports";
|
||||
return NM_ACTIVE_CONNECTION_STATE_ACTIVATED;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -2667,9 +2667,9 @@ _complete_fcn_connection_type(ARGS_COMPLETE_FCN)
|
|||
guint i, j;
|
||||
char **result;
|
||||
gsize text_len;
|
||||
const char *slave_types[] = {"bond-slave", "bridge-slave", "team-slave"};
|
||||
const char *port_types[] = {"bond-slave", "bridge-slave", "team-slave"};
|
||||
|
||||
result = g_new(char *, _NM_META_SETTING_TYPE_NUM * 2 + G_N_ELEMENTS(slave_types) + 1);
|
||||
result = g_new(char *, _NM_META_SETTING_TYPE_NUM * 2 + G_N_ELEMENTS(port_types) + 1);
|
||||
|
||||
text_len = text ? strlen(text) : 0;
|
||||
|
||||
|
|
@ -2694,8 +2694,8 @@ _complete_fcn_connection_type(ARGS_COMPLETE_FCN)
|
|||
if (!text || strncmp(text, v, text_len) == 0)
|
||||
result[j++] = g_strdup(v);
|
||||
}
|
||||
for (i = 0; i < G_N_ELEMENTS(slave_types); i++) {
|
||||
const char *v = slave_types[i];
|
||||
for (i = 0; i < G_N_ELEMENTS(port_types); i++) {
|
||||
const char *v = port_types[i];
|
||||
|
||||
if (!text || strncmp(text, v, text_len) == 0)
|
||||
result[j++] = g_strdup(v);
|
||||
|
|
@ -2763,7 +2763,7 @@ _multilist_remove_by_value_fcn_connection_permissions(NMSetting *setting, const
|
|||
}
|
||||
|
||||
static const char *const *
|
||||
_complete_fcn_connection_master(ARGS_COMPLETE_FCN)
|
||||
_complete_fcn_connection_controller(ARGS_COMPLETE_FCN)
|
||||
{
|
||||
NMRemoteConnection *const *connections = NULL;
|
||||
guint len = 0;
|
||||
|
|
@ -2781,7 +2781,7 @@ _complete_fcn_connection_master(ARGS_COMPLETE_FCN)
|
|||
|
||||
if ((!text || !*text) && operation_context && operation_context->connection) {
|
||||
/* if we have no text yet, initially only complete for matching
|
||||
* slave-type. */
|
||||
* port-type. */
|
||||
s_con = nm_connection_get_setting_connection(operation_context->connection);
|
||||
if (s_con)
|
||||
expected_type = nm_setting_connection_get_port_type(s_con);
|
||||
|
|
@ -5584,7 +5584,7 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = {
|
|||
.property_type = DEFINE_PROPERTY_TYPE (
|
||||
.get_fcn = _get_fcn_gobject,
|
||||
.set_fcn = _set_fcn_gobject_string,
|
||||
.complete_fcn = _complete_fcn_connection_master,
|
||||
.complete_fcn = _complete_fcn_connection_controller,
|
||||
.doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING,
|
||||
),
|
||||
),
|
||||
|
|
@ -5596,7 +5596,7 @@ static const NMMetaPropertyInfo *const property_infos_CONNECTION[] = {
|
|||
.property_type = DEFINE_PROPERTY_TYPE (
|
||||
.get_fcn = _get_fcn_gobject,
|
||||
.set_fcn = _set_fcn_gobject_string,
|
||||
.complete_fcn = _complete_fcn_connection_master,
|
||||
.complete_fcn = _complete_fcn_connection_controller,
|
||||
.doc_format = NM_META_PROPERTY_TYPE_FORMAT_STRING,
|
||||
),
|
||||
),
|
||||
|
|
@ -9091,7 +9091,7 @@ const NMMetaSettingValidPartItem *const nm_meta_setting_info_valid_parts_default
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_noslave[] = {
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_noport[] = {
|
||||
NM_META_SETTING_VALID_PART_ITEM(MATCH, FALSE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(IP4_CONFIG, FALSE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(IP6_CONFIG, FALSE),
|
||||
|
|
@ -9102,33 +9102,33 @@ static const NMMetaSettingValidPartItem *const valid_settings_noslave[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_slave_bond[] = {
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_port_bond[] = {
|
||||
NM_META_SETTING_VALID_PART_ITEM(BOND_PORT, TRUE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(LINK, FALSE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(MATCH, FALSE),
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_slave_bridge[] = {
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_port_bridge[] = {
|
||||
NM_META_SETTING_VALID_PART_ITEM(BRIDGE_PORT, TRUE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(LINK, FALSE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(MATCH, FALSE),
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_slave_ovs_bridge[] = {
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_port_ovs_bridge[] = {
|
||||
NM_META_SETTING_VALID_PART_ITEM(OVS_PORT, FALSE),
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_slave_ovs_port[] = {
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_port_ovs_port[] = {
|
||||
NM_META_SETTING_VALID_PART_ITEM(LINK, FALSE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(MATCH, FALSE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(OVS_INTERFACE, FALSE),
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_slave_team[] = {
|
||||
static const NMMetaSettingValidPartItem *const valid_settings_port_team[] = {
|
||||
NM_META_SETTING_VALID_PART_ITEM(LINK, FALSE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(MATCH, FALSE),
|
||||
NM_META_SETTING_VALID_PART_ITEM(TEAM_PORT, TRUE),
|
||||
|
|
@ -9136,35 +9136,35 @@ static const NMMetaSettingValidPartItem *const valid_settings_slave_team[] = {
|
|||
};
|
||||
|
||||
const NMMetaSettingValidPartItem *const *
|
||||
nm_meta_setting_info_valid_parts_for_slave_type(const char *slave_type, const char **out_slave_name)
|
||||
nm_meta_setting_info_valid_parts_for_port_type(const char *port_type, const char **out_port_name)
|
||||
{
|
||||
if (!slave_type) {
|
||||
NM_SET_OUT(out_slave_name, NULL);
|
||||
return valid_settings_noslave;
|
||||
if (!port_type) {
|
||||
NM_SET_OUT(out_port_name, NULL);
|
||||
return valid_settings_noport;
|
||||
}
|
||||
if (nm_streq(slave_type, NM_SETTING_BOND_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_slave_name, "bond-slave");
|
||||
return valid_settings_slave_bond;
|
||||
if (nm_streq(port_type, NM_SETTING_BOND_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_port_name, "bond-slave");
|
||||
return valid_settings_port_bond;
|
||||
}
|
||||
if (nm_streq(slave_type, NM_SETTING_BRIDGE_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_slave_name, "bridge-slave");
|
||||
return valid_settings_slave_bridge;
|
||||
if (nm_streq(port_type, NM_SETTING_BRIDGE_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_port_name, "bridge-slave");
|
||||
return valid_settings_port_bridge;
|
||||
}
|
||||
if (nm_streq(slave_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_slave_name, "ovs-slave");
|
||||
return valid_settings_slave_ovs_bridge;
|
||||
if (nm_streq(port_type, NM_SETTING_OVS_BRIDGE_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_port_name, "ovs-slave");
|
||||
return valid_settings_port_ovs_bridge;
|
||||
}
|
||||
if (nm_streq(slave_type, NM_SETTING_OVS_PORT_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_slave_name, "ovs-slave");
|
||||
return valid_settings_slave_ovs_port;
|
||||
if (nm_streq(port_type, NM_SETTING_OVS_PORT_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_port_name, "ovs-slave");
|
||||
return valid_settings_port_ovs_port;
|
||||
}
|
||||
if (nm_streq(slave_type, NM_SETTING_TEAM_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_slave_name, "team-slave");
|
||||
return valid_settings_slave_team;
|
||||
if (nm_streq(port_type, NM_SETTING_TEAM_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_port_name, "team-slave");
|
||||
return valid_settings_port_team;
|
||||
}
|
||||
if (nm_streq(slave_type, NM_SETTING_VRF_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_slave_name, "vrf-slave");
|
||||
return valid_settings_noslave;
|
||||
if (nm_streq(port_type, NM_SETTING_VRF_SETTING_NAME)) {
|
||||
NM_SET_OUT(out_port_name, "vrf-slave");
|
||||
return valid_settings_noport;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -503,8 +503,7 @@ extern const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[_NM_META_SETTI
|
|||
extern const NMMetaSettingValidPartItem *const nm_meta_setting_info_valid_parts_default[];
|
||||
|
||||
const NMMetaSettingValidPartItem *const *
|
||||
nm_meta_setting_info_valid_parts_for_slave_type(const char *slave_type,
|
||||
const char **out_slave_name);
|
||||
nm_meta_setting_info_valid_parts_for_port_type(const char *port_type, const char **out_port_name);
|
||||
|
||||
gboolean nm_meta_property_int_get_range(const NMMetaPropertyInfo *property_info,
|
||||
NMMetaSignUnsignInt64 *out_min,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_PORTS N_("Whether or not ports of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for controller connections. The properties \"autoconnect\", \"autoconnect-priority\" and \"autoconnect-retries\" are unrelated to this setting. The permitted values are: 0: leave port connections untouched, 1: activate all the port connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-ports is read to determine the real value. If it is default as well, this fallbacks to 0.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY N_("The autoconnect priority in range -999 to 999. If the connection is set to autoconnect, connections with higher priority will be preferred. The higher number means higher priority. Defaults to 0. Note that this property only matters if there are more than one candidate profile to select for autoconnect. In case of equal priority, the profile used most recently is chosen.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES N_("The number of times a connection should be tried when autoactivating before giving up. Zero means forever, -1 means the global default (4 times if not overridden). Setting this to 1 means to try activation only once before blocking autoconnect. Note that after a timeout, NetworkManager will try to autoconnect again.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES N_("Whether or not slaves of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for master connections. The properties \"autoconnect\", \"autoconnect-priority\" and \"autoconnect-retries\" are unrelated to this setting. The permitted values are: 0: leave slave connections untouched, 1: activate all the slave connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0. Deprecated 1.46. Use \"autoconnect-ports\" instead, this is just an alias.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES N_("Whether or not ports of this connection should be automatically brought up when NetworkManager activates this connection. This only has a real effect for controller connections. The properties \"autoconnect\", \"autoconnect-priority\" and \"autoconnect-retries\" are unrelated to this setting. The permitted values are: 0: leave port connections untouched, 1: activate all the port connections with this connection, -1: default. If -1 (default) is set, global connection.autoconnect-slaves is read to determine the real value. If it is default as well, this fallbacks to 0. Deprecated 1.46. Use \"autoconnect-ports\" instead, this is just an alias.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_CONTROLLER N_("Interface name of the controller device or UUID of the controller connection.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_DNS_OVER_TLS N_("Whether DNSOverTls (dns-over-tls) is enabled for the connection. DNSOverTls is a technology which uses TLS to encrypt dns traffic. The permitted values are: \"yes\" (2) use DNSOverTls and disabled fallback, \"opportunistic\" (1) use DNSOverTls but allow fallback to unencrypted resolution, \"no\" (0) don't ever use DNSOverTls. If unspecified \"default\" depends on the plugin used. Systemd-resolved uses global setting. This feature requires a plugin which supports DNSOverTls. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_DOWN_ON_POWEROFF N_("Whether the connection will be brought down before the system is powered off. The default value is \"default\" (-1). When the default value is specified, then the global value from NetworkManager configuration is looked up, if not set, it is considered as \"no\" (0).")
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_INTERFACE_NAME N_("The name of the network interface this connection is bound to. If not set, then the connection can be attached to any interface of the appropriate type (subject to restrictions imposed by other settings). For software devices this specifies the name of the created device. For connection types where interface names cannot easily be made persistent (e.g. mobile broadband or USB Ethernet), this property should not be used. Setting this property restricts the interfaces a connection can be used with, and if interface names change or are reordered the connection may be applied to the wrong interface.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_LLDP N_("Whether LLDP is enabled for the connection.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_LLMNR N_("Whether Link-Local Multicast Name Resolution (LLMNR) is enabled for the connection. LLMNR is a protocol based on the Domain Name System (DNS) packet format that allows both IPv4 and IPv6 hosts to perform name resolution for hosts on the same local link. The permitted values are: \"yes\" (2) register hostname and resolving for the connection, \"no\" (0) disable LLMNR for the interface, \"resolve\" (1) do not register hostname but allow resolving of LLMNR host names If unspecified, \"default\" ultimately depends on the DNS plugin (which for systemd-resolved currently means \"yes\"). This feature requires a plugin which supports LLMNR. Otherwise, the setting has no effect. One such plugin is dns-systemd-resolved.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MASTER N_("Interface name of the master device or UUID of the master connection. Deprecated 1.46. Use \"controller\" instead, this is just an alias.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MASTER N_("Interface name of the controller device or UUID of the controller connection. Deprecated 1.46. Use \"controller\" instead, this is just an alias.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MDNS N_("Whether mDNS is enabled for the connection. The permitted values are: \"yes\" (2) register hostname and resolving for the connection, \"no\" (0) disable mDNS for the interface, \"resolve\" (1) do not register hostname but allow resolving of mDNS host names and \"default\" (-1) to allow lookup of a global default in NetworkManager.conf. If unspecified, \"default\" ultimately depends on the DNS plugin. This feature requires a plugin which supports mDNS. Otherwise, the setting has no effect. Currently the only supported DNS plugin is systemd-resolved. For systemd-resolved, the default is configurable via MulticastDNS= setting in resolved.conf.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_METERED N_("Whether the connection is metered. When updating this property on a currently activated connection, the change takes effect immediately.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_MPTCP_FLAGS N_("Whether to configure MPTCP endpoints and the address flags. If MPTCP is enabled in NetworkManager, it will configure the addresses of the interface as MPTCP endpoints. Note that IPv4 loopback addresses (127.0.0.0/8), IPv4 link local addresses (169.254.0.0/16), the IPv6 loopback address (::1), IPv6 link local addresses (fe80::/10), IPv6 unique local addresses (ULA, fc00::/7) and IPv6 privacy extension addresses (rfc3041, ipv6.ip6-privacy) will be excluded from being configured as endpoints. If \"disabled\" (0x1), MPTCP handling for the interface is disabled and no endpoints are registered. The \"enabled\" (0x2) flag means that MPTCP handling is enabled. This flag can also be implied from the presence of other flags. Even when enabled, MPTCP handling will by default still be disabled unless \"/proc/sys/net/mptcp/enabled\" sysctl is on. NetworkManager does not change the sysctl and this is up to the administrator or distribution. To configure endpoints even if the sysctl is disabled, \"also-without-sysctl\" (0x4) flag can be used. In that case, NetworkManager doesn't look at the sysctl and configures endpoints regardless. Even when enabled, NetworkManager will only configure MPTCP endpoints for a certain address family, if there is a unicast default route (0.0.0.0/0 or ::/0) in the main routing table. The flag \"also-without-default-route\" (0x8) can override that. When MPTCP handling is enabled then endpoints are configured with the specified address flags \"signal\" (0x10), \"subflow\" (0x20), \"backup\" (0x40), \"fullmesh\" (0x80). See ip-mptcp(8) manual for additional information about the flags. If the flags are zero (0x0), the global connection default from NetworkManager.conf is honored. If still unspecified, the fallback is \"enabled,subflow\". Note that this means that MPTCP is by default done depending on the \"/proc/sys/net/mptcp/enabled\" sysctl. NetworkManager does not change the MPTCP limits nor enable MPTCP via \"/proc/sys/net/mptcp/enabled\". That is a host configuration which the admin can change via sysctl and ip-mptcp. Strict reverse path filtering (rp_filter) breaks many MPTCP use cases, so when MPTCP handling for IPv4 addresses on the interface is enabled, NetworkManager would loosen the strict reverse path filtering (1) to the loose setting (2).")
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_PORT_TYPE N_("Setting name of the device type of this port's controller connection (eg, \"bond\"), or NULL if this connection is not a port.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_READ_ONLY N_("This property is deprecated and has no meaning.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_SECONDARIES N_("List of connection UUIDs that should be activated when the base connection itself is activated. Currently, only VPN connections are supported.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_SLAVE_TYPE N_("Setting name of the device type of this slave's master connection (eg, \"bond\"), or NULL if this connection is not a slave. Deprecated 1.46. Use \"port-type\" instead, this is just an alias.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_SLAVE_TYPE N_("Setting name of the device type of this port's controller connection (eg, \"bond\"), or NULL if this connection is not a port. Deprecated 1.46. Use \"port-type\" instead, this is just an alias.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_STABLE_ID N_("This represents the identity of the connection used for various purposes. It allows to configure multiple profiles to share the identity. Also, the stable-id can contain placeholders that are substituted dynamically and deterministically depending on the context. The stable-id is used for generating IPv6 stable private addresses with ipv6.addr-gen-mode=stable-privacy. It is also used to seed the generated cloned MAC address for ethernet.cloned-mac-address=stable and wifi.cloned-mac-address=stable. It is also used to derive the DHCP client identifier with ipv4.dhcp-client-id=stable, the DHCPv6 DUID with ipv6.dhcp-duid=stable-[llt,ll,uuid] and the DHCP IAID with ipv4.iaid=stable and ipv6.iaid=stable. Note that depending on the context where it is used, other parameters are also seeded into the generation algorithm. For example, a per-host key is commonly also included, so that different systems end up generating different IDs. Or with ipv6.addr-gen-mode=stable-privacy, also the device's name is included, so that different interfaces yield different addresses. The per-host key is the identity of your machine and stored in /var/lib/NetworkManager/secret_key. See NetworkManager(8) manual about the secret-key and the host identity. The '$' character is treated special to perform dynamic substitutions at activation time. Currently, supported are \"${CONNECTION}\", \"${DEVICE}\", \"${MAC}\", \"${NETWORK_SSID}\", \"${BOOT}\", \"${RANDOM}\". These effectively create unique IDs per-connection, per-device, per-SSID, per-boot, or every time. The \"${CONNECTION}\" uses the profile's connection.uuid, the \"${DEVICE}\" uses the interface name of the device and \"${MAC}\" the permanent MAC address of the device. \"${NETWORK_SSID}\" uses the SSID for Wi-Fi networks and falls back to \"${CONNECTION}\" on other networks. Any unrecognized patterns following '$' are treated verbatim, however are reserved for future use. You are thus advised to avoid '$' or escape it as \"$$\". For example, set it to \"${CONNECTION}-${BOOT}-${DEVICE}\" to create a unique id for this connection that changes with every reboot and differs depending on the interface where the profile activates. If the value is unset, a global connection default is consulted. If the value is still unset, the default is \"default${CONNECTION}\" go generate an ID unique per connection profile.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_TIMESTAMP N_("The time, in seconds since the Unix Epoch, that the connection was last _successfully_ fully activated. NetworkManager updates the connection timestamp periodically when the connection is active to ensure that an active connection has the latest timestamp. The property is only meant for reading (changes to this property will not be preserved).")
|
||||
#define DESCRIBE_DOC_NM_SETTING_CONNECTION_TYPE N_("Base type of the connection. For hardware-dependent connections, should contain the setting name of the hardware-type specific setting (ie, \"802-3-ethernet\" or \"802-11-wireless\" or \"bluetooth\", etc), and for non-hardware dependent connections like VPN or otherwise, should contain the setting name of that setting type (ie, \"vpn\" or \"bridge\", etc).")
|
||||
|
|
@ -356,7 +356,7 @@
|
|||
#define DESCRIBE_DOC_NM_SETTING_TUN_VNET_HDR N_("If TRUE the IFF_VNET_HDR the tunnel packets will include a virtio network header.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_USER_DATA N_("A dictionary of key/value pairs with user data. This data is ignored by NetworkManager and can be used at the users discretion. The keys only support a strict ascii format, but the values can be arbitrary UTF8 strings up to a certain length.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_VLAN_EGRESS_PRIORITY_MAP N_("For outgoing packets, a list of mappings from Linux SKB priorities to 802.1p priorities. The mapping is given in the format \"from:to\" where both \"from\" and \"to\" are unsigned integers, ie \"7:3\".")
|
||||
#define DESCRIBE_DOC_NM_SETTING_VLAN_FLAGS N_("One or more flags which control the behavior and features of the VLAN interface. Flags include \"reorder-headers\" (0x1) (reordering of output packet headers), \"gvrp\" (0x2) (use of the GVRP protocol), and \"loose-binding\" (0x4) (loose binding of the interface to its master device's operating state). \"mvrp\" (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_VLAN_FLAGS N_("One or more flags which control the behavior and features of the VLAN interface. Flags include \"reorder-headers\" (0x1) (reordering of output packet headers), \"gvrp\" (0x2) (use of the GVRP protocol), and \"loose-binding\" (0x4) (loose binding of the interface to its controller device's operating state). \"mvrp\" (0x8) (use of the MVRP protocol). The default value of this property is NM_VLAN_FLAG_REORDER_HEADERS, but it used to be 0. To preserve backward compatibility, the default-value in the D-Bus API continues to be 0 and a missing property on D-Bus is still considered as 0.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_VLAN_ID N_("The VLAN identifier that the interface created by this connection should be assigned. The valid range is from 0 to 4094, without the reserved id 4095.")
|
||||
#define DESCRIBE_DOC_NM_SETTING_VLAN_INGRESS_PRIORITY_MAP N_("For incoming packets, a list of mappings from 802.1p priorities to Linux SKB priorities. The mapping is given in the format \"from:to\" where both \"from\" and \"to\" are unsigned integers, ie \"7:3\".")
|
||||
#define DESCRIBE_DOC_NM_SETTING_VLAN_PARENT N_("If given, specifies the parent interface name or parent connection UUID from which this VLAN interface should be created. If this property is not specified, the connection must contain an \"802-3-ethernet\" setting with a \"mac-address\" property.")
|
||||
|
|
|
|||
|
|
@ -223,28 +223,28 @@ void link_del_ip4(Link *link, const struct in_addr *addr, unsigned int prefix) {
|
|||
}
|
||||
|
||||
/**
|
||||
* link_set_master() - change the bridge master of an interface
|
||||
* @link: link to operate on
|
||||
* @if_master: bridge to set as master
|
||||
* link_set_controller() - change the bridge controller of an interface
|
||||
* @link: link to operate on
|
||||
* @if_controller: bridge to set as controller
|
||||
*
|
||||
* This sets @if_master as the new master bridge of @link. The specified bridge
|
||||
* This sets @if_controller as the new controller bridge of @link. The specified bridge
|
||||
* must be in the same network namespace as @link.
|
||||
*/
|
||||
void link_set_master(Link *link, int if_master) {
|
||||
void link_set_controller(Link *link, int if_controller) {
|
||||
int oldns;
|
||||
|
||||
netns_get(&oldns);
|
||||
{
|
||||
char *p, ifname_master[IF_NAMESIZE + 1] = {}, ifname[IF_NAMESIZE + 1] = {};
|
||||
char *p, ifname_controller[IF_NAMESIZE + 1] = {}, ifname[IF_NAMESIZE + 1] = {};
|
||||
int r;
|
||||
|
||||
netns_set(link->netns);
|
||||
|
||||
p = if_indextoname(link->ifindex, ifname);
|
||||
c_assert(p);
|
||||
p = if_indextoname(if_master, ifname_master);
|
||||
p = if_indextoname(if_controller, ifname_controller);
|
||||
c_assert(p);
|
||||
r = asprintf(&p, "ip link set %s master %s", ifname, ifname_master);
|
||||
r = asprintf(&p, "ip link set %s master %s", ifname, ifname_controller);
|
||||
c_assert(r > 0);
|
||||
r = system(p);
|
||||
c_assert(r == 0);
|
||||
|
|
|
|||
|
|
@ -232,7 +232,7 @@ reader_get_connection(Reader *reader,
|
|||
|
||||
/*
|
||||
* If ifname was not given, we'll match the connection by type.
|
||||
* If the type was not given either, then we're happy with any connection but slaves.
|
||||
* If the type was not given either, then we're happy with any connection but ports.
|
||||
* This is so that things like "bond=bond0:eth1,eth2 nameserver=1.3.3.7 end up
|
||||
* slapping the nameserver to the most reasonable connection (bond0).
|
||||
*/
|
||||
|
|
@ -866,25 +866,28 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument)
|
|||
}
|
||||
|
||||
static void
|
||||
reader_parse_master(Reader *reader, char *argument, const char *type_name, const char *default_name)
|
||||
reader_parse_controller(Reader *reader,
|
||||
char *argument,
|
||||
const char *type_name,
|
||||
const char *default_name)
|
||||
{
|
||||
NMConnection *connection;
|
||||
NMSettingConnection *s_con;
|
||||
gs_free char *master_to_free = NULL;
|
||||
const char *master;
|
||||
char *slaves;
|
||||
const char *slave;
|
||||
gs_free char *controller_to_free = NULL;
|
||||
const char *controller;
|
||||
char *ports;
|
||||
const char *port;
|
||||
char *opts;
|
||||
const char *mtu = NULL;
|
||||
|
||||
master = get_word(&argument, ':');
|
||||
if (!master)
|
||||
master = master_to_free = g_strdup_printf("%s0", default_name ?: type_name);
|
||||
slaves = get_word(&argument, ':');
|
||||
controller = get_word(&argument, ':');
|
||||
if (!controller)
|
||||
controller = controller_to_free = g_strdup_printf("%s0", default_name ?: type_name);
|
||||
ports = get_word(&argument, ':');
|
||||
|
||||
connection = reader_get_connection(reader, master, type_name, TRUE);
|
||||
connection = reader_get_connection(reader, controller, type_name, TRUE);
|
||||
s_con = nm_connection_get_setting_connection(connection);
|
||||
master = nm_setting_connection_get_uuid(s_con);
|
||||
controller = nm_setting_connection_get_uuid(s_con);
|
||||
|
||||
if (nm_streq(type_name, NM_SETTING_BRIDGE_SETTING_NAME)) {
|
||||
NMSettingBridge *s_bridge = nm_connection_get_setting_bridge(connection);
|
||||
|
|
@ -921,19 +924,19 @@ reader_parse_master(Reader *reader, char *argument, const char *type_name, const
|
|||
connection_set(connection, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MTU, mtu);
|
||||
|
||||
do {
|
||||
slave = get_word(&slaves, ',');
|
||||
if (slave == NULL)
|
||||
slave = "eth0";
|
||||
port = get_word(&ports, ',');
|
||||
if (port == NULL)
|
||||
port = "eth0";
|
||||
|
||||
connection = reader_get_connection(reader, slave, NULL, TRUE);
|
||||
connection = reader_get_connection(reader, port, NULL, TRUE);
|
||||
s_con = nm_connection_get_setting_connection(connection);
|
||||
g_object_set(s_con,
|
||||
NM_SETTING_CONNECTION_PORT_TYPE,
|
||||
type_name,
|
||||
NM_SETTING_CONNECTION_CONTROLLER,
|
||||
master,
|
||||
controller,
|
||||
NULL);
|
||||
} while (slaves && *slaves != '\0');
|
||||
} while (ports && *ports != '\0');
|
||||
|
||||
if (argument && *argument)
|
||||
_LOGW(LOGD_CORE, "Ignoring extra: '%s'.", argument);
|
||||
|
|
@ -1468,11 +1471,11 @@ nmi_cmdline_reader_parse(const char *etc_connections_dir,
|
|||
routes = g_ptr_array_new_with_free_func(g_free);
|
||||
g_ptr_array_add(routes, g_strdup(argument));
|
||||
} else if (nm_streq(tag, "bridge"))
|
||||
reader_parse_master(reader, argument, NM_SETTING_BRIDGE_SETTING_NAME, "br");
|
||||
reader_parse_controller(reader, argument, NM_SETTING_BRIDGE_SETTING_NAME, "br");
|
||||
else if (nm_streq(tag, "bond"))
|
||||
reader_parse_master(reader, argument, NM_SETTING_BOND_SETTING_NAME, NULL);
|
||||
reader_parse_controller(reader, argument, NM_SETTING_BOND_SETTING_NAME, NULL);
|
||||
else if (nm_streq(tag, "team"))
|
||||
reader_parse_master(reader, argument, NM_SETTING_TEAM_SETTING_NAME, NULL);
|
||||
reader_parse_controller(reader, argument, NM_SETTING_TEAM_SETTING_NAME, NULL);
|
||||
else if (nm_streq(tag, "vlan"))
|
||||
reader_parse_vlan(reader, argument);
|
||||
else if (nm_streq(tag, "ib.pkey"))
|
||||
|
|
|
|||
|
|
@ -975,7 +975,7 @@ test_bond(void)
|
|||
NMSettingBond *s_bond;
|
||||
NMSettingWired *s_wired;
|
||||
NMIPRoute *ip_route;
|
||||
const char *master_uuid;
|
||||
const char *controller_uuid;
|
||||
|
||||
connections = _parse_cons(ARGV);
|
||||
g_assert_cmpint(g_hash_table_size(connections), ==, 3);
|
||||
|
|
@ -986,8 +986,8 @@ test_bond(void)
|
|||
==,
|
||||
NM_SETTING_BOND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_connection_get_id(connection), ==, "bong0");
|
||||
master_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(master_uuid);
|
||||
controller_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(controller_uuid);
|
||||
|
||||
s_wired = nm_connection_get_setting_wired(connection);
|
||||
g_assert(s_wired);
|
||||
|
|
@ -1032,7 +1032,7 @@ test_bond(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1048,7 +1048,7 @@ test_bond(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth1");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1069,7 +1069,7 @@ test_bond_ip(void)
|
|||
NMSettingWired *s_wired;
|
||||
NMSettingBond *s_bond;
|
||||
NMIPAddress *ip_addr;
|
||||
const char *master_uuid;
|
||||
const char *controller_uuid;
|
||||
|
||||
connections = _parse_cons(ARGV);
|
||||
g_assert_cmpint(g_hash_table_size(connections), ==, 3);
|
||||
|
|
@ -1080,8 +1080,8 @@ test_bond_ip(void)
|
|||
==,
|
||||
NM_SETTING_BOND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_connection_get_id(connection), ==, "bond0");
|
||||
master_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(master_uuid);
|
||||
controller_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(controller_uuid);
|
||||
|
||||
s_wired = nm_connection_get_setting_wired(connection);
|
||||
g_assert(s_wired);
|
||||
|
|
@ -1130,7 +1130,7 @@ test_bond_ip(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1146,7 +1146,7 @@ test_bond_ip(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth1");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1162,7 +1162,7 @@ test_bond_default(void)
|
|||
NMSettingIPConfig *s_ip4;
|
||||
NMSettingIPConfig *s_ip6;
|
||||
NMSettingBond *s_bond;
|
||||
const char *master_uuid;
|
||||
const char *controller_uuid;
|
||||
|
||||
connections = _parse_cons(ARGV);
|
||||
g_assert_cmpint(g_hash_table_size(connections), ==, 2);
|
||||
|
|
@ -1174,8 +1174,8 @@ test_bond_default(void)
|
|||
==,
|
||||
NM_SETTING_BOND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_connection_get_id(connection), ==, "bond0");
|
||||
master_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(master_uuid);
|
||||
controller_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(controller_uuid);
|
||||
|
||||
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||
g_assert(s_ip4);
|
||||
|
|
@ -1209,7 +1209,7 @@ test_bond_default(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BOND_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1228,7 +1228,7 @@ test_bridge(void)
|
|||
NMSettingIPConfig *s_ip6;
|
||||
NMSettingBridge *s_bridge;
|
||||
NMIPRoute *ip_route;
|
||||
const char *master_uuid;
|
||||
const char *controller_uuid;
|
||||
|
||||
connections = _parse_cons(ARGV);
|
||||
g_assert_cmpint(g_hash_table_size(connections), ==, 3);
|
||||
|
|
@ -1239,8 +1239,8 @@ test_bridge(void)
|
|||
==,
|
||||
NM_SETTING_BRIDGE_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_connection_get_id(connection), ==, "bridge0");
|
||||
master_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(master_uuid);
|
||||
controller_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(controller_uuid);
|
||||
|
||||
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||
g_assert(s_ip4);
|
||||
|
|
@ -1285,7 +1285,7 @@ test_bridge(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1301,7 +1301,7 @@ test_bridge(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth1");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1317,7 +1317,7 @@ test_bridge_default(void)
|
|||
NMSettingIPConfig *s_ip4;
|
||||
NMSettingIPConfig *s_ip6;
|
||||
NMSettingBridge *s_bridge;
|
||||
const char *master_uuid;
|
||||
const char *controller_uuid;
|
||||
|
||||
connections = _parse_cons(ARGV);
|
||||
g_assert_cmpint(g_hash_table_size(connections), ==, 2);
|
||||
|
|
@ -1329,8 +1329,8 @@ test_bridge_default(void)
|
|||
==,
|
||||
NM_SETTING_BRIDGE_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_connection_get_id(connection), ==, "br0");
|
||||
master_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(master_uuid);
|
||||
controller_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(controller_uuid);
|
||||
|
||||
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||
g_assert(s_ip4);
|
||||
|
|
@ -1362,7 +1362,7 @@ test_bridge_default(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_BRIDGE_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1381,7 +1381,7 @@ test_bridge_ip(void)
|
|||
NMSettingIPConfig *s_ip6;
|
||||
NMSettingWired *s_wired;
|
||||
NMSettingBridge *s_bridge;
|
||||
const char *master_uuid;
|
||||
const char *controller_uuid;
|
||||
guint i;
|
||||
|
||||
connections = _parse_cons(ARGV);
|
||||
|
|
@ -1393,8 +1393,8 @@ test_bridge_ip(void)
|
|||
==,
|
||||
NM_SETTING_BRIDGE_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_connection_get_id(connection), ==, "bridge123");
|
||||
master_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(master_uuid);
|
||||
controller_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(controller_uuid);
|
||||
|
||||
s_wired = nm_connection_get_setting_wired(connection);
|
||||
g_assert(s_wired);
|
||||
|
|
@ -1430,7 +1430,7 @@ test_bridge_ip(void)
|
|||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con),
|
||||
==,
|
||||
NM_SETTING_BRIDGE_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1447,7 +1447,7 @@ test_team(void)
|
|||
NMSettingIPConfig *s_ip4;
|
||||
NMSettingIPConfig *s_ip6;
|
||||
NMSettingTeam *s_team;
|
||||
const char *master_uuid;
|
||||
const char *controller_uuid;
|
||||
|
||||
connections = _parse_cons(ARGV);
|
||||
g_assert_cmpint(g_hash_table_size(connections), ==, 3);
|
||||
|
|
@ -1458,8 +1458,8 @@ test_team(void)
|
|||
==,
|
||||
NM_SETTING_TEAM_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_connection_get_id(connection), ==, "team0");
|
||||
master_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(master_uuid);
|
||||
controller_uuid = nm_connection_get_uuid(connection);
|
||||
g_assert(controller_uuid);
|
||||
|
||||
s_ip4 = nm_connection_get_setting_ip4_config(connection);
|
||||
g_assert(s_ip4);
|
||||
|
|
@ -1494,7 +1494,7 @@ test_team(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth0");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_TEAM_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
@ -1510,7 +1510,7 @@ test_team(void)
|
|||
NM_SETTING_WIRED_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_id(s_con), ==, "eth1");
|
||||
g_assert_cmpstr(nm_setting_connection_get_port_type(s_con), ==, NM_SETTING_TEAM_SETTING_NAME);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, master_uuid);
|
||||
g_assert_cmpstr(nm_setting_connection_get_controller(s_con), ==, controller_uuid);
|
||||
g_assert_cmpint(nm_setting_connection_get_multi_connect(s_con),
|
||||
==,
|
||||
NM_CONNECTION_MULTI_CONNECT_SINGLE);
|
||||
|
|
|
|||
|
|
@ -1120,7 +1120,7 @@ usage(void)
|
|||
" up [[id | uuid | path] <ID>] [ifname <ifname>] [ap <BSSID>] [passwd-file <file with "
|
||||
"passwords>]\n\n"
|
||||
" down [id | uuid | path | apath] <ID> ...\n\n"
|
||||
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- "
|
||||
" add COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS PORT_OPTIONS IP_OPTIONS [-- "
|
||||
"([+|-]<setting>.<property> <value>)+]\n\n"
|
||||
" modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+\n\n"
|
||||
" clone [--temporary] [id | uuid | path ] <ID> <new name>\n\n"
|
||||
|
|
@ -1196,130 +1196,131 @@ usage_connection_down(void)
|
|||
static void
|
||||
usage_connection_add(void)
|
||||
{
|
||||
nmc_printerr(_("Usage: nmcli connection add { ARGUMENTS | help }\n"
|
||||
"\n"
|
||||
"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- "
|
||||
"([+|-]<setting>.<property> <value>)+]\n\n"
|
||||
" COMMON_OPTIONS:\n"
|
||||
" type <type>\n"
|
||||
" [ifname <interface name> | \"*\"]\n"
|
||||
" [con-name <connection name>]\n"
|
||||
" [autoconnect yes|no]\n"
|
||||
" [save yes|no]\n"
|
||||
" [master <master (ifname, or connection UUID or name)>]\n"
|
||||
" [slave-type <master connection type>]\n\n"
|
||||
" TYPE_SPECIFIC_OPTIONS:\n"
|
||||
" ethernet: [mac <MAC address>]\n"
|
||||
" [cloned-mac <cloned MAC address>]\n"
|
||||
" [mtu <MTU>]\n\n"
|
||||
" wifi: ssid <SSID>\n"
|
||||
" [mac <MAC address>]\n"
|
||||
" [cloned-mac <cloned MAC address>]\n"
|
||||
" [mtu <MTU>]\n"
|
||||
" [mode infrastructure|ap|adhoc]\n\n"
|
||||
" wimax: [mac <MAC address>]\n"
|
||||
" [nsp <NSP>]\n\n"
|
||||
" pppoe: username <PPPoE username>\n"
|
||||
" [password <PPPoE password>]\n"
|
||||
" [service <PPPoE service name>]\n"
|
||||
" [mtu <MTU>]\n"
|
||||
" [mac <MAC address>]\n\n"
|
||||
" gsm: apn <APN>\n"
|
||||
" [user <username>]\n"
|
||||
" [password <password>]\n\n"
|
||||
" cdma: [user <username>]\n"
|
||||
" [password <password>]\n\n"
|
||||
" infiniband: [mac <MAC address>]\n"
|
||||
" [mtu <MTU>]\n"
|
||||
" [transport-mode datagram | connected]\n"
|
||||
" [parent <ifname>]\n"
|
||||
" [p-key <IPoIB P_Key>]\n\n"
|
||||
" bluetooth: [addr <bluetooth address>]\n"
|
||||
" [bt-type panu|nap|dun-gsm|dun-cdma]\n\n"
|
||||
" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
|
||||
" id <VLAN ID>\n"
|
||||
" [flags <VLAN flags>]\n"
|
||||
" [ingress <ingress priority mapping>]\n"
|
||||
" [egress <egress priority mapping>]\n"
|
||||
" [mtu <MTU>]\n\n"
|
||||
" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) | "
|
||||
"broadcast (3) |\n"
|
||||
" 802.3ad (4) | balance-tlb (5) | balance-alb (6)]\n"
|
||||
" [primary <ifname>]\n"
|
||||
" [miimon <num>]\n"
|
||||
" [downdelay <num>]\n"
|
||||
" [updelay <num>]\n"
|
||||
" [arp-interval <num>]\n"
|
||||
" [arp-ip-target <num>]\n"
|
||||
" [lacp-rate slow (0) | fast (1)]\n\n"
|
||||
" bond-slave: master <master (ifname, or connection UUID or name)>\n"
|
||||
" [queue-id <0-65535>]\n\n"
|
||||
" team: [config <file>|<raw JSON data>]\n\n"
|
||||
" team-slave: master <master (ifname, or connection UUID or name)>\n"
|
||||
" [config <file>|<raw JSON data>]\n\n"
|
||||
" bridge: [stp yes|no]\n"
|
||||
" [priority <num>]\n"
|
||||
" [forward-delay <2-30>]\n"
|
||||
" [hello-time <1-10>]\n"
|
||||
" [max-age <6-40>]\n"
|
||||
" [ageing-time <0-1000000>]\n"
|
||||
" [multicast-snooping yes|no]\n"
|
||||
" [mac <MAC address>]\n\n"
|
||||
" bridge-slave: master <master (ifname, or connection UUID or name)>\n"
|
||||
" [priority <0-63>]\n"
|
||||
" [path-cost <1-65535>]\n"
|
||||
" [hairpin yes|no]\n\n"
|
||||
" vpn: vpn-type "
|
||||
"vpnc|openvpn|pptp|openconnect|openswan|libreswan|ssh|l2tp|iodine|...\n"
|
||||
" [user <username>]\n\n"
|
||||
" olpc-mesh: ssid <SSID>\n"
|
||||
" [channel <1-13>]\n"
|
||||
" [dhcp-anycast <MAC address>]\n\n"
|
||||
" adsl: username <username>\n"
|
||||
" protocol pppoa|pppoe|ipoatm\n"
|
||||
" [password <password>]\n"
|
||||
" [encapsulation vcmux|llc]\n\n"
|
||||
" tun: mode tun|tap\n"
|
||||
" [owner <UID>]\n"
|
||||
" [group <GID>]\n"
|
||||
" [pi yes|no]\n"
|
||||
" [vnet-hdr yes|no]\n"
|
||||
" [multi-queue yes|no]\n\n"
|
||||
" ip-tunnel: mode ipip|gre|sit|isatap|vti|ip6ip6|ipip6|ip6gre|vti6\n"
|
||||
" remote <remote endpoint IP>\n"
|
||||
" [local <local endpoint IP>]\n"
|
||||
" [dev <parent device (ifname or connection UUID)>]\n\n"
|
||||
" macsec: dev <parent device (connection UUID, ifname, or MAC)>\n"
|
||||
" mode <psk|eap>\n"
|
||||
" [cak <key> ckn <key>]\n"
|
||||
" [encrypt yes|no]\n"
|
||||
" [port 1-65534]\n\n\n"
|
||||
" macvlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
|
||||
" mode vepa|bridge|private|passthru|source\n"
|
||||
" [tap yes|no]\n\n"
|
||||
" vxlan: id <VXLAN ID>\n"
|
||||
" [remote <IP of multicast group or remote address>]\n"
|
||||
" [local <source IP>]\n"
|
||||
" [dev <parent device (ifname or connection UUID)>]\n"
|
||||
" [source-port-min <0-65535>]\n"
|
||||
" [source-port-max <0-65535>]\n"
|
||||
" [destination-port <0-65535>]\n\n"
|
||||
" wpan: [short-addr <0x0000-0xffff>]\n"
|
||||
" [pan-id <0x0000-0xffff>]\n"
|
||||
" [page <default|0-31>]\n"
|
||||
" [channel <default|0-26>]\n"
|
||||
" [mac <MAC address>]\n\n"
|
||||
" 6lowpan: dev <parent device (connection UUID, ifname, or MAC)>\n"
|
||||
" dummy:\n\n"
|
||||
" SLAVE_OPTIONS:\n"
|
||||
" bridge: [priority <0-63>]\n"
|
||||
" [path-cost <1-65535>]\n"
|
||||
" [hairpin yes|no]\n\n"
|
||||
" team: [config <file>|<raw JSON data>]\n\n"
|
||||
" bond: [queue-id <0-65535>]\n\n"
|
||||
" IP_OPTIONS:\n"
|
||||
" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
|
||||
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n\n"));
|
||||
nmc_printerr(
|
||||
_("Usage: nmcli connection add { ARGUMENTS | help }\n"
|
||||
"\n"
|
||||
"ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS PORT_OPTIONS IP_OPTIONS [-- "
|
||||
"([+|-]<setting>.<property> <value>)+]\n\n"
|
||||
" COMMON_OPTIONS:\n"
|
||||
" type <type>\n"
|
||||
" [ifname <interface name> | \"*\"]\n"
|
||||
" [con-name <connection name>]\n"
|
||||
" [autoconnect yes|no]\n"
|
||||
" [save yes|no]\n"
|
||||
" [controller <controller (ifname, or connection UUID or name)>]\n"
|
||||
" [port-type <controller connection type>]\n\n"
|
||||
" TYPE_SPECIFIC_OPTIONS:\n"
|
||||
" ethernet: [mac <MAC address>]\n"
|
||||
" [cloned-mac <cloned MAC address>]\n"
|
||||
" [mtu <MTU>]\n\n"
|
||||
" wifi: ssid <SSID>\n"
|
||||
" [mac <MAC address>]\n"
|
||||
" [cloned-mac <cloned MAC address>]\n"
|
||||
" [mtu <MTU>]\n"
|
||||
" [mode infrastructure|ap|adhoc]\n\n"
|
||||
" wimax: [mac <MAC address>]\n"
|
||||
" [nsp <NSP>]\n\n"
|
||||
" pppoe: username <PPPoE username>\n"
|
||||
" [password <PPPoE password>]\n"
|
||||
" [service <PPPoE service name>]\n"
|
||||
" [mtu <MTU>]\n"
|
||||
" [mac <MAC address>]\n\n"
|
||||
" gsm: apn <APN>\n"
|
||||
" [user <username>]\n"
|
||||
" [password <password>]\n\n"
|
||||
" cdma: [user <username>]\n"
|
||||
" [password <password>]\n\n"
|
||||
" infiniband: [mac <MAC address>]\n"
|
||||
" [mtu <MTU>]\n"
|
||||
" [transport-mode datagram | connected]\n"
|
||||
" [parent <ifname>]\n"
|
||||
" [p-key <IPoIB P_Key>]\n\n"
|
||||
" bluetooth: [addr <bluetooth address>]\n"
|
||||
" [bt-type panu|nap|dun-gsm|dun-cdma]\n\n"
|
||||
" vlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
|
||||
" id <VLAN ID>\n"
|
||||
" [flags <VLAN flags>]\n"
|
||||
" [ingress <ingress priority mapping>]\n"
|
||||
" [egress <egress priority mapping>]\n"
|
||||
" [mtu <MTU>]\n\n"
|
||||
" bond: [mode balance-rr (0) | active-backup (1) | balance-xor (2) | "
|
||||
"broadcast (3) |\n"
|
||||
" 802.3ad (4) | balance-tlb (5) | balance-alb (6)]\n"
|
||||
" [primary <ifname>]\n"
|
||||
" [miimon <num>]\n"
|
||||
" [downdelay <num>]\n"
|
||||
" [updelay <num>]\n"
|
||||
" [arp-interval <num>]\n"
|
||||
" [arp-ip-target <num>]\n"
|
||||
" [lacp-rate slow (0) | fast (1)]\n\n"
|
||||
" bond-slave: controller <controller (ifname, or connection UUID or name)>\n"
|
||||
" [queue-id <0-65535>]\n\n"
|
||||
" team: [config <file>|<raw JSON data>]\n\n"
|
||||
" team-slave: controller <controller (ifname, or connection UUID or name)>\n"
|
||||
" [config <file>|<raw JSON data>]\n\n"
|
||||
" bridge: [stp yes|no]\n"
|
||||
" [priority <num>]\n"
|
||||
" [forward-delay <2-30>]\n"
|
||||
" [hello-time <1-10>]\n"
|
||||
" [max-age <6-40>]\n"
|
||||
" [ageing-time <0-1000000>]\n"
|
||||
" [multicast-snooping yes|no]\n"
|
||||
" [mac <MAC address>]\n\n"
|
||||
" bridge-slave: controller <controller (ifname, or connection UUID or name)>\n"
|
||||
" [priority <0-63>]\n"
|
||||
" [path-cost <1-65535>]\n"
|
||||
" [hairpin yes|no]\n\n"
|
||||
" vpn: vpn-type "
|
||||
"vpnc|openvpn|pptp|openconnect|openswan|libreswan|ssh|l2tp|iodine|...\n"
|
||||
" [user <username>]\n\n"
|
||||
" olpc-mesh: ssid <SSID>\n"
|
||||
" [channel <1-13>]\n"
|
||||
" [dhcp-anycast <MAC address>]\n\n"
|
||||
" adsl: username <username>\n"
|
||||
" protocol pppoa|pppoe|ipoatm\n"
|
||||
" [password <password>]\n"
|
||||
" [encapsulation vcmux|llc]\n\n"
|
||||
" tun: mode tun|tap\n"
|
||||
" [owner <UID>]\n"
|
||||
" [group <GID>]\n"
|
||||
" [pi yes|no]\n"
|
||||
" [vnet-hdr yes|no]\n"
|
||||
" [multi-queue yes|no]\n\n"
|
||||
" ip-tunnel: mode ipip|gre|sit|isatap|vti|ip6ip6|ipip6|ip6gre|vti6\n"
|
||||
" remote <remote endpoint IP>\n"
|
||||
" [local <local endpoint IP>]\n"
|
||||
" [dev <parent device (ifname or connection UUID)>]\n\n"
|
||||
" macsec: dev <parent device (connection UUID, ifname, or MAC)>\n"
|
||||
" mode <psk|eap>\n"
|
||||
" [cak <key> ckn <key>]\n"
|
||||
" [encrypt yes|no]\n"
|
||||
" [port 1-65534]\n\n\n"
|
||||
" macvlan: dev <parent device (connection UUID, ifname, or MAC)>\n"
|
||||
" mode vepa|bridge|private|passthru|source\n"
|
||||
" [tap yes|no]\n\n"
|
||||
" vxlan: id <VXLAN ID>\n"
|
||||
" [remote <IP of multicast group or remote address>]\n"
|
||||
" [local <source IP>]\n"
|
||||
" [dev <parent device (ifname or connection UUID)>]\n"
|
||||
" [source-port-min <0-65535>]\n"
|
||||
" [source-port-max <0-65535>]\n"
|
||||
" [destination-port <0-65535>]\n\n"
|
||||
" wpan: [short-addr <0x0000-0xffff>]\n"
|
||||
" [pan-id <0x0000-0xffff>]\n"
|
||||
" [page <default|0-31>]\n"
|
||||
" [channel <default|0-26>]\n"
|
||||
" [mac <MAC address>]\n\n"
|
||||
" 6lowpan: dev <parent device (connection UUID, ifname, or MAC)>\n"
|
||||
" dummy:\n\n"
|
||||
" PORT_OPTIONS:\n"
|
||||
" bridge: [priority <0-63>]\n"
|
||||
" [path-cost <1-65535>]\n"
|
||||
" [hairpin yes|no]\n\n"
|
||||
" team: [config <file>|<raw JSON data>]\n\n"
|
||||
" bond: [queue-id <0-65535>]\n\n"
|
||||
" IP_OPTIONS:\n"
|
||||
" [ip4 <IPv4 address>] [gw4 <IPv4 gateway>]\n"
|
||||
" [ip6 <IPv6 address>] [gw6 <IPv6 gateway>]\n\n"));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -3533,7 +3534,7 @@ get_name_alias_toplevel(const char *name, const char *port_type)
|
|||
if (port_type) {
|
||||
const char *port_name;
|
||||
|
||||
if (nm_meta_setting_info_valid_parts_for_slave_type(port_type, &port_name))
|
||||
if (nm_meta_setting_info_valid_parts_for_port_type(port_type, &port_name))
|
||||
return port_name ?: name;
|
||||
return name;
|
||||
}
|
||||
|
|
@ -3881,7 +3882,7 @@ is_setting_mandatory(NMConnection *connection, NMSetting *setting)
|
|||
if (i == 0)
|
||||
item = get_valid_settings_array(c_type);
|
||||
else
|
||||
item = nm_meta_setting_info_valid_parts_for_slave_type(s_type, NULL);
|
||||
item = nm_meta_setting_info_valid_parts_for_port_type(s_type, NULL);
|
||||
for (; item && *item; item++) {
|
||||
if (nm_streq(name, (*item)->setting_info->general->setting_name))
|
||||
return (*item)->mandatory;
|
||||
|
|
@ -3989,7 +3990,8 @@ normalized_controller_for_port(const GPtrArray *connections,
|
|||
}
|
||||
|
||||
if (!out_controller) {
|
||||
nmc_print(_("Warning: master='%s' doesn't refer to any existing profile.\n"), controller);
|
||||
nmc_print(_("Warning: controller='%s' doesn't refer to any existing profile.\n"),
|
||||
controller);
|
||||
out_controller = controller;
|
||||
if (out_type)
|
||||
*out_type = type;
|
||||
|
|
@ -4463,12 +4465,12 @@ con_settings(NMConnection *connection,
|
|||
g_return_val_if_fail(s_con, FALSE);
|
||||
|
||||
con_type = nm_setting_connection_get_port_type(s_con);
|
||||
*port_settings = nm_meta_setting_info_valid_parts_for_slave_type(con_type, NULL);
|
||||
*port_settings = nm_meta_setting_info_valid_parts_for_port_type(con_type, NULL);
|
||||
if (!*port_settings) {
|
||||
g_set_error(error,
|
||||
NMCLI_ERROR,
|
||||
NMC_RESULT_ERROR_USER_INPUT,
|
||||
_("Error: invalid slave type; %s."),
|
||||
_("Error: invalid port type; %s."),
|
||||
con_type);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -4690,7 +4692,7 @@ set_connection_controller(NmCli *nmc,
|
|||
g_set_error_literal(error,
|
||||
NMCLI_ERROR,
|
||||
NMC_RESULT_ERROR_USER_INPUT,
|
||||
_("Error: master is required"));
|
||||
_("Error: controller is required"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -5028,7 +5030,7 @@ complete_property_name(NmCli *nmc,
|
|||
if (s_con)
|
||||
port_type = nm_setting_connection_get_port_type(s_con);
|
||||
valid_settings_main = get_valid_settings_array(connection_type);
|
||||
valid_settings_port = nm_meta_setting_info_valid_parts_for_slave_type(port_type, NULL);
|
||||
valid_settings_port = nm_meta_setting_info_valid_parts_for_port_type(port_type, NULL);
|
||||
|
||||
word_list = get_valid_properties_string(valid_settings_main,
|
||||
valid_settings_port,
|
||||
|
|
@ -6247,7 +6249,7 @@ gen_setting_names(const char *text, int state)
|
|||
return g_strdup(s_name);
|
||||
}
|
||||
|
||||
/* Let's give a try to parameters related to slave type */
|
||||
/* Let's give a try to parameters related to port type */
|
||||
list_idx = 0;
|
||||
is_port = 1;
|
||||
}
|
||||
|
|
@ -6256,7 +6258,7 @@ gen_setting_names(const char *text, int state)
|
|||
s_con = nm_connection_get_setting_connection(nmc_tab_completion.connection);
|
||||
if (s_con)
|
||||
s_type = nm_setting_connection_get_port_type(s_con);
|
||||
valid_settings_arr = nm_meta_setting_info_valid_parts_for_slave_type(s_type, NULL);
|
||||
valid_settings_arr = nm_meta_setting_info_valid_parts_for_port_type(s_type, NULL);
|
||||
|
||||
if (list_idx < NM_PTRARRAY_LEN(valid_settings_arr)) {
|
||||
while (valid_settings_arr[list_idx]) {
|
||||
|
|
@ -6313,7 +6315,7 @@ gen_property_names(const char *text, int state)
|
|||
port_type = NM_SETTING_BOND_SETTING_NAME;
|
||||
else
|
||||
port_type = NULL;
|
||||
valid_settings_port = nm_meta_setting_info_valid_parts_for_slave_type(port_type, NULL);
|
||||
valid_settings_port = nm_meta_setting_info_valid_parts_for_port_type(port_type, NULL);
|
||||
|
||||
setting_name = check_valid_name(strv[0], valid_settings_main, valid_settings_port, NULL);
|
||||
if (setting_name) {
|
||||
|
|
@ -6625,7 +6627,7 @@ get_setting_and_property(const char *prompt,
|
|||
s_type = nm_setting_connection_get_port_type(s_con);
|
||||
|
||||
valid_settings_main = get_valid_settings_array(nmc_tab_completion.con_type);
|
||||
valid_settings_port = nm_meta_setting_info_valid_parts_for_slave_type(s_type, NULL);
|
||||
valid_settings_port = nm_meta_setting_info_valid_parts_for_port_type(s_type, NULL);
|
||||
|
||||
setting_name = check_valid_name(sett, valid_settings_main, valid_settings_port, NULL);
|
||||
setting = nm_meta_setting_info_editor_new_setting(
|
||||
|
|
@ -7996,7 +7998,7 @@ editor_menu_main(NmCli *nmc, NMConnection *connection, const char *connection_ty
|
|||
s_type = nm_setting_connection_get_port_type(s_con);
|
||||
|
||||
valid_settings_main = get_valid_settings_array(connection_type);
|
||||
valid_settings_port = nm_meta_setting_info_valid_parts_for_slave_type(s_type, NULL);
|
||||
valid_settings_port = nm_meta_setting_info_valid_parts_for_port_type(s_type, NULL);
|
||||
|
||||
valid_settings_str = get_valid_options_string(valid_settings_main, valid_settings_port);
|
||||
nmc_print(_("You may edit the following settings: %s\n"), valid_settings_str);
|
||||
|
|
|
|||
|
|
@ -762,12 +762,12 @@ const NmcMetaGenericInfo *const nmc_fields_dev_wimax_list[] = {
|
|||
#define NMC_FIELDS_DEV_WIMAX_LIST_COMMON "NSP,SIGNAL,TYPE,DEVICE,ACTIVE"
|
||||
#define NMC_FIELDS_DEV_WIMAX_LIST_FOR_DEV_LIST "NAME," NMC_FIELDS_DEV_WIMAX_LIST_COMMON
|
||||
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_master_prop[] = {
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_controller_prop[] = {
|
||||
NMC_META_GENERIC("NAME"), /* 0 */
|
||||
NMC_META_GENERIC("SLAVES"), /* 1 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_MASTER_PROP_COMMON "NAME,SLAVES"
|
||||
#define NMC_FIELDS_DEV_SHOW_CONTROLLER_PROP_COMMON "NAME,SLAVES"
|
||||
|
||||
const NmcMetaGenericInfo *const nmc_fields_dev_show_team_prop[] = {
|
||||
NMC_META_GENERIC("NAME"), /* 0 */
|
||||
|
|
@ -802,18 +802,18 @@ const NmcMetaGenericInfo *const nmc_fields_dev_show_sections[] = {
|
|||
NMC_META_GENERIC_WITH_NESTED("WIRED-PROPERTIES",
|
||||
metagen_device_detail_wired_properties), /* 5 */
|
||||
NMC_META_GENERIC_WITH_NESTED("WIMAX-PROPERTIES",
|
||||
metagen_device_detail_wimax_properties), /* 6 */
|
||||
NMC_META_GENERIC_WITH_NESTED("NSP", nmc_fields_dev_wimax_list + 1), /* 7 */
|
||||
NMC_META_GENERIC_WITH_NESTED("IP4", metagen_ip4_config), /* 8 */
|
||||
NMC_META_GENERIC_WITH_NESTED("DHCP4", metagen_dhcp_config), /* 9 */
|
||||
NMC_META_GENERIC_WITH_NESTED("IP6", metagen_ip6_config), /* 10 */
|
||||
NMC_META_GENERIC_WITH_NESTED("DHCP6", metagen_dhcp_config), /* 11 */
|
||||
NMC_META_GENERIC_WITH_NESTED("BOND", nmc_fields_dev_show_master_prop + 1), /* 12 */
|
||||
NMC_META_GENERIC_WITH_NESTED("TEAM", nmc_fields_dev_show_team_prop + 1), /* 13 */
|
||||
NMC_META_GENERIC_WITH_NESTED("BRIDGE", nmc_fields_dev_show_master_prop + 1), /* 14 */
|
||||
NMC_META_GENERIC_WITH_NESTED("VLAN", nmc_fields_dev_show_vlan_prop + 1), /* 15 */
|
||||
NMC_META_GENERIC_WITH_NESTED("BLUETOOTH", nmc_fields_dev_show_bluetooth + 1), /* 16 */
|
||||
NMC_META_GENERIC_WITH_NESTED("CONNECTIONS", metagen_device_detail_connections), /* 17 */
|
||||
metagen_device_detail_wimax_properties), /* 6 */
|
||||
NMC_META_GENERIC_WITH_NESTED("NSP", nmc_fields_dev_wimax_list + 1), /* 7 */
|
||||
NMC_META_GENERIC_WITH_NESTED("IP4", metagen_ip4_config), /* 8 */
|
||||
NMC_META_GENERIC_WITH_NESTED("DHCP4", metagen_dhcp_config), /* 9 */
|
||||
NMC_META_GENERIC_WITH_NESTED("IP6", metagen_ip6_config), /* 10 */
|
||||
NMC_META_GENERIC_WITH_NESTED("DHCP6", metagen_dhcp_config), /* 11 */
|
||||
NMC_META_GENERIC_WITH_NESTED("BOND", nmc_fields_dev_show_controller_prop + 1), /* 12 */
|
||||
NMC_META_GENERIC_WITH_NESTED("TEAM", nmc_fields_dev_show_team_prop + 1), /* 13 */
|
||||
NMC_META_GENERIC_WITH_NESTED("BRIDGE", nmc_fields_dev_show_controller_prop + 1), /* 14 */
|
||||
NMC_META_GENERIC_WITH_NESTED("VLAN", nmc_fields_dev_show_vlan_prop + 1), /* 15 */
|
||||
NMC_META_GENERIC_WITH_NESTED("BLUETOOTH", nmc_fields_dev_show_bluetooth + 1), /* 16 */
|
||||
NMC_META_GENERIC_WITH_NESTED("CONNECTIONS", metagen_device_detail_connections), /* 17 */
|
||||
NULL,
|
||||
};
|
||||
#define NMC_FIELDS_DEV_SHOW_SECTIONS_COMMON \
|
||||
|
|
@ -1511,7 +1511,7 @@ print_bond_bridge_info(NMDevice *device,
|
|||
if (ports_str->len > 0)
|
||||
g_string_truncate(ports_str, ports_str->len - 1); /* Chop off last space */
|
||||
|
||||
tmpl = (const NMMetaAbstractInfo *const *) nmc_fields_dev_show_master_prop;
|
||||
tmpl = (const NMMetaAbstractInfo *const *) nmc_fields_dev_show_controller_prop;
|
||||
out_indices = parse_output_fields(one_field, tmpl, FALSE, NULL, NULL);
|
||||
arr = nmc_dup_fields_array(tmpl, NMC_OF_FLAG_FIELD_NAMES);
|
||||
g_ptr_array_add(out.output_data, arr);
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue