mirror of
https://github.com/systemd/systemd
synced 2026-04-17 20:44:52 +02:00
Compare commits
4 Commits
b0f83c2d82
...
98fd285c28
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98fd285c28 | ||
|
|
bab29f2ab7 | ||
|
|
020483b248 | ||
|
|
fd11005951 |
@ -1994,7 +1994,7 @@
|
|||||||
<term><varname>InterfaceId=</varname></term>
|
<term><varname>InterfaceId=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Sets the ID/key of the xfrm interface which needs to be associated with a SA/policy.
|
<para>Sets the ID/key of the xfrm interface which needs to be associated with a SA/policy.
|
||||||
Can be decimal or hexadecimal, valid range is 0-0xffffffff, defaults to 0.</para>
|
Can be decimal or hexadecimal, valid range is 1-0xffffffff. This is mandatory.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
|||||||
@ -14,6 +14,7 @@ static int xfrm_fill_message_create(NetDev *netdev, Link *link, sd_netlink_messa
|
|||||||
|
|
||||||
x = XFRM(netdev);
|
x = XFRM(netdev);
|
||||||
|
|
||||||
|
assert(x);
|
||||||
assert(link || x->independent);
|
assert(link || x->independent);
|
||||||
|
|
||||||
r = sd_netlink_message_append_u32(message, IFLA_XFRM_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
|
r = sd_netlink_message_append_u32(message, IFLA_XFRM_LINK, link ? link->ifindex : LOOPBACK_IFINDEX);
|
||||||
@ -27,10 +28,28 @@ static int xfrm_fill_message_create(NetDev *netdev, Link *link, sd_netlink_messa
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int xfrm_verify(NetDev *netdev, const char *filename) {
|
||||||
|
Xfrm *x;
|
||||||
|
|
||||||
|
assert(netdev);
|
||||||
|
assert(filename);
|
||||||
|
|
||||||
|
x = XFRM(netdev);
|
||||||
|
|
||||||
|
assert(x);
|
||||||
|
|
||||||
|
if (x->if_id == 0)
|
||||||
|
return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
|
||||||
|
"%s: Xfrm interface ID cannot be zero.", filename);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const NetDevVTable xfrm_vtable = {
|
const NetDevVTable xfrm_vtable = {
|
||||||
.object_size = sizeof(Xfrm),
|
.object_size = sizeof(Xfrm),
|
||||||
.sections = NETDEV_COMMON_SECTIONS "Xfrm\0",
|
.sections = NETDEV_COMMON_SECTIONS "Xfrm\0",
|
||||||
.fill_message_create = xfrm_fill_message_create,
|
.fill_message_create = xfrm_fill_message_create,
|
||||||
|
.config_verify = xfrm_verify,
|
||||||
.create_type = NETDEV_CREATE_STACKED,
|
.create_type = NETDEV_CREATE_STACKED,
|
||||||
.iftype = ARPHRD_NONE,
|
.iftype = ARPHRD_NONE,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -58,12 +58,21 @@ void network_adjust_dhcp_server(Network *network) {
|
|||||||
ORDERED_HASHMAP_FOREACH(address, network->addresses_by_section) {
|
ORDERED_HASHMAP_FOREACH(address, network->addresses_by_section) {
|
||||||
if (section_is_invalid(address->section))
|
if (section_is_invalid(address->section))
|
||||||
continue;
|
continue;
|
||||||
if (address->family == AF_INET &&
|
|
||||||
!in4_addr_is_localhost(&address->in_addr.in) &&
|
if (address->family != AF_INET)
|
||||||
in4_addr_is_null(&address->in_addr_peer.in)) {
|
continue;
|
||||||
have = true;
|
|
||||||
break;
|
if (in4_addr_is_localhost(&address->in_addr.in))
|
||||||
}
|
continue;
|
||||||
|
|
||||||
|
if (in4_addr_is_link_local(&address->in_addr.in))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (in4_addr_is_set(&address->in_addr_peer.in))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
have = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (!have) {
|
if (!have) {
|
||||||
log_warning("%s: DHCPServer= is enabled, but no static address configured. "
|
log_warning("%s: DHCPServer= is enabled, but no static address configured. "
|
||||||
@ -130,6 +139,8 @@ static int link_find_dhcp_server_address(Link *link, Address **ret) {
|
|||||||
continue;
|
continue;
|
||||||
if (in4_addr_is_localhost(&address->in_addr.in))
|
if (in4_addr_is_localhost(&address->in_addr.in))
|
||||||
continue;
|
continue;
|
||||||
|
if (in4_addr_is_link_local(&address->in_addr.in))
|
||||||
|
continue;
|
||||||
if (in4_addr_is_set(&address->in_addr_peer.in))
|
if (in4_addr_is_set(&address->in_addr_peer.in))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@ -4,4 +4,5 @@ Kind=xfrm
|
|||||||
Name=xfrm99
|
Name=xfrm99
|
||||||
|
|
||||||
[Xfrm]
|
[Xfrm]
|
||||||
|
InterfaceId=0x99
|
||||||
Independent=yes
|
Independent=yes
|
||||||
|
|||||||
@ -1,4 +1,7 @@
|
|||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
[NetDev]
|
[NetDev]
|
||||||
Kind=xfrm
|
Kind=xfrm
|
||||||
Name=xfrm99
|
Name=xfrm98
|
||||||
|
|
||||||
|
[Xfrm]
|
||||||
|
InterfaceId=0x98
|
||||||
|
|||||||
@ -18,7 +18,7 @@ Name=geneve99
|
|||||||
Name=ifb99
|
Name=ifb99
|
||||||
Name=ipiptun99
|
Name=ipiptun99
|
||||||
Name=nlmon99
|
Name=nlmon99
|
||||||
Name=xfrm99
|
Name=xfrm98 xfrm99
|
||||||
Name=vxlan98
|
Name=vxlan98
|
||||||
Name=hogehogehogehogehogehoge
|
Name=hogehogehogehogehogehoge
|
||||||
|
|
||||||
|
|||||||
@ -4,4 +4,4 @@ Name=dummy98
|
|||||||
|
|
||||||
[Network]
|
[Network]
|
||||||
IPv6AcceptRA=no
|
IPv6AcceptRA=no
|
||||||
Xfrm=xfrm99
|
Xfrm=xfrm98
|
||||||
|
|||||||
@ -886,6 +886,7 @@ class NetworkctlTests(unittest.TestCase, Utilities):
|
|||||||
class NetworkdNetDevTests(unittest.TestCase, Utilities):
|
class NetworkdNetDevTests(unittest.TestCase, Utilities):
|
||||||
|
|
||||||
links_remove_earlier = [
|
links_remove_earlier = [
|
||||||
|
'xfrm98',
|
||||||
'xfrm99',
|
'xfrm99',
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1797,20 +1798,21 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
|
|||||||
@expectedFailureIfModuleIsNotAvailable('xfrm_interface')
|
@expectedFailureIfModuleIsNotAvailable('xfrm_interface')
|
||||||
def test_xfrm(self):
|
def test_xfrm(self):
|
||||||
copy_unit_to_networkd_unit_path('12-dummy.netdev', 'xfrm.network',
|
copy_unit_to_networkd_unit_path('12-dummy.netdev', 'xfrm.network',
|
||||||
'25-xfrm.netdev', 'netdev-link-local-addressing-yes.network')
|
'25-xfrm.netdev', '25-xfrm-independent.netdev',
|
||||||
|
'netdev-link-local-addressing-yes.network')
|
||||||
start_networkd()
|
start_networkd()
|
||||||
|
|
||||||
self.wait_online(['xfrm99:degraded', 'dummy98:degraded'])
|
self.wait_online(['dummy98:degraded', 'xfrm98:degraded', 'xfrm99:degraded'])
|
||||||
|
|
||||||
output = check_output('ip link show dev xfrm99')
|
output = check_output('ip -d link show dev xfrm98')
|
||||||
print(output)
|
print(output)
|
||||||
|
self.assertIn('xfrm98@dummy98:', output)
|
||||||
|
self.assertIn('xfrm if_id 0x98 ', output)
|
||||||
|
|
||||||
@expectedFailureIfModuleIsNotAvailable('xfrm_interface')
|
output = check_output('ip -d link show dev xfrm99')
|
||||||
def test_xfrm_independent(self):
|
print(output)
|
||||||
copy_unit_to_networkd_unit_path('25-xfrm-independent.netdev', 'netdev-link-local-addressing-yes.network')
|
self.assertIn('xfrm99@lo:', output)
|
||||||
start_networkd()
|
self.assertIn('xfrm if_id 0x99 ', output)
|
||||||
|
|
||||||
self.wait_online(['xfrm99:degraded'])
|
|
||||||
|
|
||||||
@expectedFailureIfModuleIsNotAvailable('fou')
|
@expectedFailureIfModuleIsNotAvailable('fou')
|
||||||
def test_fou(self):
|
def test_fou(self):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user