From: Lennart Poettering Date: Mon, 30 Oct 2023 16:53:40 +0000 (+0100) Subject: network-generator: add support for ip=link-local X-Git-Tag: v255-rc1~89^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b3634c45d7803d95054395ca7062c40fbdbdce74;p=thirdparty%2Fsystemd.git network-generator: add support for ip=link-local --- diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c index 0819d4432ca..d9fca213844 100644 --- a/src/network/generator/network-generator.c +++ b/src/network/generator/network-generator.c @@ -17,10 +17,10 @@ /* # .network - ip={dhcp|on|any|dhcp6|auto6|either6|link6} - ip=:{dhcp|on|any|dhcp6|auto6|link6}[:[][:]] - ip=:[]:::::{none|off|dhcp|on|any|dhcp6|auto6|link6|ibft}[:[][:]] - ip=:[]:::::{none|off|dhcp|on|any|dhcp6|auto6|link6|ibft}[:[][:]] + ip={dhcp|on|any|dhcp6|auto6|either6|link6|link-local} + ip=:{dhcp|on|any|dhcp6|auto6|link6|link-local}[:[][:]] + ip=:[]:::::{none|off|dhcp|on|any|dhcp6|auto6|link6|ibft|link-local}[:[][:]] + ip=:[]:::::{none|off|dhcp|on|any|dhcp6|auto6|link6|ibft|link-local}[:[][:]] rd.route=/:[:] nameserver= [nameserver= ...] rd.peerdns=0 @@ -44,35 +44,57 @@ */ static const char * const dracut_dhcp_type_table[_DHCP_TYPE_MAX] = { - [DHCP_TYPE_NONE] = "none", - [DHCP_TYPE_OFF] = "off", - [DHCP_TYPE_ON] = "on", - [DHCP_TYPE_ANY] = "any", - [DHCP_TYPE_DHCP] = "dhcp", - [DHCP_TYPE_DHCP6] = "dhcp6", - [DHCP_TYPE_AUTO6] = "auto6", - [DHCP_TYPE_EITHER6] = "either6", - [DHCP_TYPE_IBFT] = "ibft", - [DHCP_TYPE_LINK6] = "link6", + [DHCP_TYPE_NONE] = "none", + [DHCP_TYPE_OFF] = "off", + [DHCP_TYPE_ON] = "on", + [DHCP_TYPE_ANY] = "any", + [DHCP_TYPE_DHCP] = "dhcp", + [DHCP_TYPE_DHCP6] = "dhcp6", + [DHCP_TYPE_AUTO6] = "auto6", + [DHCP_TYPE_EITHER6] = "either6", + [DHCP_TYPE_IBFT] = "ibft", + [DHCP_TYPE_LINK6] = "link6", + [DHCP_TYPE_LINK_LOCAL] = "link-local", }; DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(dracut_dhcp_type, DHCPType); static const char * const networkd_dhcp_type_table[_DHCP_TYPE_MAX] = { - [DHCP_TYPE_NONE] = "no", - [DHCP_TYPE_OFF] = "no", - [DHCP_TYPE_ON] = "yes", - [DHCP_TYPE_ANY] = "yes", - [DHCP_TYPE_DHCP] = "ipv4", - [DHCP_TYPE_DHCP6] = "ipv6", - [DHCP_TYPE_AUTO6] = "no", /* TODO: enable other setting? */ - [DHCP_TYPE_EITHER6] = "ipv6", /* TODO: enable other setting? */ - [DHCP_TYPE_IBFT] = "no", - [DHCP_TYPE_LINK6] = "no", + [DHCP_TYPE_NONE] = "no", + [DHCP_TYPE_OFF] = "no", + [DHCP_TYPE_ON] = "yes", + [DHCP_TYPE_ANY] = "yes", + [DHCP_TYPE_DHCP] = "ipv4", + [DHCP_TYPE_DHCP6] = "ipv6", + [DHCP_TYPE_AUTO6] = "no", /* TODO: enable other setting? */ + [DHCP_TYPE_EITHER6] = "ipv6", /* TODO: enable other setting? */ + [DHCP_TYPE_IBFT] = "no", + [DHCP_TYPE_LINK6] = "no", + [DHCP_TYPE_LINK_LOCAL] = "no", }; DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(networkd_dhcp_type, DHCPType); +static const char * const networkd_ipv6ra_type_table[_DHCP_TYPE_MAX] = { + [DHCP_TYPE_NONE] = "no", + [DHCP_TYPE_OFF] = "no", + [DHCP_TYPE_LINK6] = "no", + [DHCP_TYPE_LINK_LOCAL] = "no", + /* We omit the other entries, to leave the default in effect */ +}; + +DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(networkd_ipv6ra_type, DHCPType); + +static const char * const networkd_link_local_type_table[_DHCP_TYPE_MAX] = { + [DHCP_TYPE_NONE] = "no", + [DHCP_TYPE_OFF] = "no", + [DHCP_TYPE_LINK6] = "ipv6", + [DHCP_TYPE_LINK_LOCAL] = "yes", + /* We omit the other entries, to leave the default in effect */ +}; + +DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(networkd_link_local_type, DHCPType); + static Address *address_free(Address *address) { if (!address) return NULL; @@ -1131,6 +1153,16 @@ void network_dump(Network *network, FILE *f) { if (dhcp) fprintf(f, "DHCP=%s\n", dhcp); + const char *ll; + ll = networkd_link_local_type_to_string(network->dhcp_type); + if (ll) + fprintf(f, "LinkLocalAddressing=%s\n", ll); + + const char *ra; + ra = networkd_ipv6ra_type_to_string(network->dhcp_type); + if (ra) + fprintf(f, "IPv6AcceptRA=%s\n", ra); + if (!strv_isempty(network->dns)) STRV_FOREACH(dns, network->dns) fprintf(f, "DNS=%s\n", *dns); diff --git a/src/network/generator/network-generator.h b/src/network/generator/network-generator.h index 7350933d69a..aa5ca9d6952 100644 --- a/src/network/generator/network-generator.h +++ b/src/network/generator/network-generator.h @@ -19,6 +19,7 @@ typedef enum DHCPType { DHCP_TYPE_EITHER6, DHCP_TYPE_IBFT, DHCP_TYPE_LINK6, + DHCP_TYPE_LINK_LOCAL, _DHCP_TYPE_MAX, _DHCP_TYPE_INVALID = -EINVAL, } DHCPType; diff --git a/test/test-network-generator-conversion/test-02-bridge.expected/90-eth0.network b/test/test-network-generator-conversion/test-02-bridge.expected/90-eth0.network index 8842b57921b..c076804bdcb 100644 --- a/test/test-network-generator-conversion/test-02-bridge.expected/90-eth0.network +++ b/test/test-network-generator-conversion/test-02-bridge.expected/90-eth0.network @@ -7,6 +7,8 @@ Name=eth0 [Network] DHCP=no +LinkLocalAddressing=no +IPv6AcceptRA=no DNS=10.10.10.10 DNS=10.10.10.11 Bridge=bridge99 diff --git a/test/test-network-generator-conversion/test-02-bridge.expected/90-eth1.network b/test/test-network-generator-conversion/test-02-bridge.expected/90-eth1.network index feff4f5ba89..c7dcf7bd284 100644 --- a/test/test-network-generator-conversion/test-02-bridge.expected/90-eth1.network +++ b/test/test-network-generator-conversion/test-02-bridge.expected/90-eth1.network @@ -7,6 +7,8 @@ Name=eth1 [Network] DHCP=no +LinkLocalAddressing=no +IPv6AcceptRA=no DNS=10.10.10.10 DNS=10.10.10.11 Bridge=bridge99 diff --git a/test/test-network-generator-conversion/test-03-issue-14319.expected/90-enp3s0.network b/test/test-network-generator-conversion/test-03-issue-14319.expected/90-enp3s0.network index 28ccfdd9b00..ad04193bed3 100644 --- a/test/test-network-generator-conversion/test-03-issue-14319.expected/90-enp3s0.network +++ b/test/test-network-generator-conversion/test-03-issue-14319.expected/90-enp3s0.network @@ -7,6 +7,8 @@ Name=enp3s0 [Network] DHCP=no +LinkLocalAddressing=no +IPv6AcceptRA=no [DHCP]