1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-25 01:34:28 +03:00

Merge pull request #17073 from ssahani/vxlan

network: Allow vxlan to be created without .network file
This commit is contained in:
Yu Watanabe 2020-09-17 20:33:14 +09:00 committed by GitHub
commit dd3b0e2232
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 39 additions and 3 deletions

View File

@ -819,6 +819,13 @@
<para>Accepts the same key in [VXLAN] section.</para> <para>Accepts the same key in [VXLAN] section.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><varname>Independent=</varname></term>
<listitem>
<para>Takes a boolean. When true, the vxlan interface is created without underlying interfaces.
Defaults to <literal>false</literal>.</para>
</listitem>
</varlistentry>
</variablelist> </variablelist>
</refsect1> </refsect1>

View File

@ -134,6 +134,7 @@ VXLAN.PortRange, config_parse_port_range,
VXLAN.DestinationPort, config_parse_ip_port, 0, offsetof(VxLan, dest_port) VXLAN.DestinationPort, config_parse_ip_port, 0, offsetof(VxLan, dest_port)
VXLAN.FlowLabel, config_parse_flow_label, 0, 0 VXLAN.FlowLabel, config_parse_flow_label, 0, 0
VXLAN.IPDoNotFragment, config_parse_df, 0, offsetof(VxLan, df) VXLAN.IPDoNotFragment, config_parse_df, 0, offsetof(VxLan, df)
VXLAN.Independent, config_parse_bool, 0, offsetof(VxLan, independent)
GENEVE.Id, config_parse_geneve_vni, 0, offsetof(Geneve, id) GENEVE.Id, config_parse_geneve_vni, 0, offsetof(Geneve, id)
GENEVE.Remote, config_parse_geneve_address, 0, offsetof(Geneve, remote) GENEVE.Remote, config_parse_geneve_address, 0, offsetof(Geneve, remote)
GENEVE.TOS, config_parse_uint8, 0, offsetof(Geneve, tos) GENEVE.TOS, config_parse_uint8, 0, offsetof(Geneve, tos)

View File

@ -823,6 +823,9 @@ int netdev_load_one(Manager *manager, const char *filename) {
case NETDEV_KIND_XFRM: case NETDEV_KIND_XFRM:
independent = XFRM(netdev)->independent; independent = XFRM(netdev)->independent;
break; break;
case NETDEV_KIND_VXLAN:
independent = VXLAN(netdev)->independent;
break;
default: default:
break; break;
} }

View File

@ -25,7 +25,6 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli
int r; int r;
assert(netdev); assert(netdev);
assert(link);
assert(m); assert(m);
v = VXLAN(netdev); v = VXLAN(netdev);
@ -63,7 +62,7 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LOCAL attribute: %m"); return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LOCAL attribute: %m");
} }
r = sd_netlink_message_append_u32(m, IFLA_VXLAN_LINK, link->ifindex); r = sd_netlink_message_append_u32(m, IFLA_VXLAN_LINK, link ? link->ifindex : 0);
if (r < 0) if (r < 0)
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LINK attribute: %m"); return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LINK attribute: %m");

View File

@ -56,6 +56,7 @@ struct VxLan {
bool group_policy; bool group_policy;
bool generic_protocol_extension; bool generic_protocol_extension;
bool inherit; bool inherit;
bool independent;
struct ifla_vxlan_port_range port_range; struct ifla_vxlan_port_range port_range;
}; };

View File

@ -116,6 +116,7 @@ PortRange=
UDPChecksum= UDPChecksum=
UDP6ZeroCheckSumTx= UDP6ZeroCheckSumTx=
IPDoNotFragment= IPDoNotFragment=
Independent=
[VXCAN] [VXCAN]
Peer= Peer=
[Bond] [Bond]

View File

@ -0,0 +1,17 @@
[NetDev]
Name=vxlan98
Kind=vxlan
[VXLAN]
VNI=1000
L2MissNotification=true
L3MissNotification=true
RouteShortCircuit=true
UDPChecksum=true
UDP6ZeroChecksumTx=true
UDP6ZeroChecksumRx=true
RemoteChecksumTx=true
RemoteChecksumRx=true
GroupPolicyExtension=true
DestinationPort=5556
Independent=yes

View File

@ -14,6 +14,7 @@ Name=ifb99
Name=ipiptun99 Name=ipiptun99
Name=nlmon99 Name=nlmon99
Name=xfrm99 Name=xfrm99
Name=vxlan98
Name=hogehogehogehogehogehoge Name=hogehogehogehogehogehoge
[Network] [Network]

View File

@ -785,6 +785,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
'vtitun98', 'vtitun98',
'vtitun99', 'vtitun99',
'vxcan99', 'vxcan99',
'vxlan98',
'vxlan99', 'vxlan99',
'wg97', 'wg97',
'wg98', 'wg98',
@ -870,6 +871,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
'25-vti-tunnel-remote-any.netdev', '25-vti-tunnel-remote-any.netdev',
'25-vti-tunnel.netdev', '25-vti-tunnel.netdev',
'25-vxcan.netdev', '25-vxcan.netdev',
'25-vxlan-independent.netdev',
'25-vxlan.netdev', '25-vxlan.netdev',
'25-wireguard-23-peers.netdev', '25-wireguard-23-peers.netdev',
'25-wireguard-23-peers.network', '25-wireguard-23-peers.network',
@ -1516,10 +1518,11 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
def test_vxlan(self): def test_vxlan(self):
copy_unit_to_networkd_unit_path('25-vxlan.netdev', 'vxlan.network', copy_unit_to_networkd_unit_path('25-vxlan.netdev', 'vxlan.network',
'25-vxlan-independent.netdev', 'netdev-link-local-addressing-yes.network',
'11-dummy.netdev', 'vxlan-test1.network') '11-dummy.netdev', 'vxlan-test1.network')
start_networkd() start_networkd()
self.wait_online(['test1:degraded', 'vxlan99:degraded']) self.wait_online(['test1:degraded', 'vxlan99:degraded', 'vxlan98:degraded'])
output = check_output('ip -d link show vxlan99') output = check_output('ip -d link show vxlan99')
print(output) print(output)
@ -1546,6 +1549,9 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
self.assertRegex(output, 'Destination Port: 5555') self.assertRegex(output, 'Destination Port: 5555')
self.assertRegex(output, 'Underlying Device: test1') self.assertRegex(output, 'Underlying Device: test1')
output = check_output('ip -d link show vxlan98')
print(output)
def test_macsec(self): def test_macsec(self):
copy_unit_to_networkd_unit_path('25-macsec.netdev', '25-macsec.network', '25-macsec.key', copy_unit_to_networkd_unit_path('25-macsec.netdev', '25-macsec.network', '25-macsec.key',
'macsec.network', '12-dummy.netdev') 'macsec.network', '12-dummy.netdev')