diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml index 65812aca51..415feea046 100644 --- a/man/systemd.netdev.xml +++ b/man/systemd.netdev.xml @@ -1508,7 +1508,7 @@ Ports=eth2 A static local address for tunneled packets. It must be an address on another interface of this host, or one of the special values any, ipv4_link_local, ipv6_link_local, - dhcp4, dhcp6, and slaac. If one + dhcp4, dhcp6, dhcp_pd, and slaac. If one of the special values except for any is specified, an address which matches the corresponding type on the underlying interface will be used. Defaults to any. diff --git a/src/network/netdev/netdev-util.c b/src/network/netdev/netdev-util.c index e0555ebe41..d6cddf6bcb 100644 --- a/src/network/netdev/netdev-util.c +++ b/src/network/netdev/netdev-util.c @@ -7,11 +7,12 @@ #include "string-table.h" static const char * const netdev_local_address_type_table[_NETDEV_LOCAL_ADDRESS_TYPE_MAX] = { - [NETDEV_LOCAL_ADDRESS_IPV4LL] = "ipv4_link_local", - [NETDEV_LOCAL_ADDRESS_IPV6LL] = "ipv6_link_local", - [NETDEV_LOCAL_ADDRESS_DHCP4] = "dhcp4", - [NETDEV_LOCAL_ADDRESS_DHCP6] = "dhcp6", - [NETDEV_LOCAL_ADDRESS_SLAAC] = "slaac", + [NETDEV_LOCAL_ADDRESS_IPV4LL] = "ipv4_link_local", + [NETDEV_LOCAL_ADDRESS_IPV6LL] = "ipv6_link_local", + [NETDEV_LOCAL_ADDRESS_DHCP4] = "dhcp4", + [NETDEV_LOCAL_ADDRESS_DHCP6] = "dhcp6", + [NETDEV_LOCAL_ADDRESS_SLAAC] = "slaac", + [NETDEV_LOCAL_ADDRESS_DHCP_PD] = "dhcp_pd", }; DEFINE_STRING_TABLE_LOOKUP(netdev_local_address_type, NetDevLocalAddressType); @@ -29,22 +30,14 @@ int link_get_local_address( switch (type) { case NETDEV_LOCAL_ADDRESS_IPV4LL: - assert(IN_SET(family, AF_UNSPEC, AF_INET)); - family = AF_INET; - break; - case NETDEV_LOCAL_ADDRESS_IPV6LL: - assert(IN_SET(family, AF_UNSPEC, AF_INET6)); - family = AF_INET6; - break; case NETDEV_LOCAL_ADDRESS_DHCP4: assert(IN_SET(family, AF_UNSPEC, AF_INET)); family = AF_INET; break; + case NETDEV_LOCAL_ADDRESS_IPV6LL: case NETDEV_LOCAL_ADDRESS_DHCP6: - assert(IN_SET(family, AF_UNSPEC, AF_INET6)); - family = AF_INET6; - break; case NETDEV_LOCAL_ADDRESS_SLAAC: + case NETDEV_LOCAL_ADDRESS_DHCP_PD: assert(IN_SET(family, AF_UNSPEC, AF_INET6)); family = AF_INET6; break; @@ -86,6 +79,10 @@ int link_get_local_address( if (a->source != NETWORK_CONFIG_SOURCE_NDISC) continue; break; + case NETDEV_LOCAL_ADDRESS_DHCP_PD: + if (a->source != NETWORK_CONFIG_SOURCE_DHCP_PD) + continue; + break; default: assert_not_reached(); } diff --git a/src/network/netdev/netdev-util.h b/src/network/netdev/netdev-util.h index 847a6e7326..0f0be41cb9 100644 --- a/src/network/netdev/netdev-util.h +++ b/src/network/netdev/netdev-util.h @@ -9,6 +9,7 @@ typedef enum NetDevLocalAddressType { NETDEV_LOCAL_ADDRESS_DHCP4, NETDEV_LOCAL_ADDRESS_DHCP6, NETDEV_LOCAL_ADDRESS_SLAAC, + NETDEV_LOCAL_ADDRESS_DHCP_PD, _NETDEV_LOCAL_ADDRESS_TYPE_MAX, _NETDEV_LOCAL_ADDRESS_TYPE_INVALID = -EINVAL, } NetDevLocalAddressType; diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c index 211388bb95..08acfb1cee 100644 --- a/src/network/netdev/tunnel.c +++ b/src/network/netdev/tunnel.c @@ -11,6 +11,7 @@ #include "conf-parser.h" #include "hexdecoct.h" #include "missing-network.h" +#include "netdev-util.h" #include "netlink-util.h" #include "networkd-manager.h" #include "parse-util.h" @@ -784,7 +785,7 @@ int config_parse_tunnel_local_address( type = netdev_local_address_type_from_string(rvalue); if (IN_SET(type, NETDEV_LOCAL_ADDRESS_IPV4LL, NETDEV_LOCAL_ADDRESS_DHCP4)) f = AF_INET; - else if (IN_SET(type, NETDEV_LOCAL_ADDRESS_IPV6LL, NETDEV_LOCAL_ADDRESS_DHCP6, NETDEV_LOCAL_ADDRESS_SLAAC)) + else if (IN_SET(type, NETDEV_LOCAL_ADDRESS_IPV6LL, NETDEV_LOCAL_ADDRESS_DHCP6, NETDEV_LOCAL_ADDRESS_SLAAC, NETDEV_LOCAL_ADDRESS_DHCP_PD)) f = AF_INET6; else { type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID; diff --git a/tools/vcs-tag.sh b/tools/vcs-tag.sh index f9575aeced..faec440f6b 100755 --- a/tools/vcs-tag.sh +++ b/tools/vcs-tag.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # SPDX-License-Identifier: LGPL-2.1-or-later set -e