diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 3bd0e04879..5e231d9a63 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1053,7 +1053,8 @@ IPv6Token=prefixstable:2002:da8:1:: Label= - An address label. + Specifies the label for the IPv4 address. The label must be a 7-bit ASCII string with + a length of 1…15 characters. Defaults to unset. diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c index b0baa53edc..1bffbc9586 100644 --- a/src/network/netdev/geneve.c +++ b/src/network/netdev/geneve.c @@ -164,16 +164,18 @@ static int netdev_geneve_create(NetDev *netdev) { return r; } -int config_parse_geneve_vni(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_geneve_vni( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + Geneve *v = userdata; uint32_t f; int r; @@ -199,16 +201,18 @@ int config_parse_geneve_vni(const char *unit, return 0; } -int config_parse_geneve_address(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_geneve_address( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + Geneve *v = userdata; union in_addr_union *addr = data, buffer; int r, f; @@ -236,16 +240,18 @@ int config_parse_geneve_address(const char *unit, return 0; } -int config_parse_geneve_flow_label(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_geneve_flow_label( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + Geneve *v = userdata; uint32_t f; int r; @@ -272,16 +278,18 @@ int config_parse_geneve_flow_label(const char *unit, return 0; } -int config_parse_geneve_ttl(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_geneve_ttl( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + Geneve *v = userdata; unsigned f; int r; diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c index f27a1e4335..cae2ef1a90 100644 --- a/src/network/netdev/tunnel.c +++ b/src/network/netdev/tunnel.c @@ -501,16 +501,18 @@ static int netdev_tunnel_verify(NetDev *netdev, const char *filename) { return 0; } -int config_parse_tunnel_address(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_tunnel_address( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + Tunnel *t = userdata; union in_addr_union *addr = data, buffer; int r, f; @@ -555,16 +557,18 @@ int config_parse_tunnel_address(const char *unit, return 0; } -int config_parse_tunnel_key(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_tunnel_key( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + union in_addr_union buffer; Tunnel *t = userdata; uint32_t k; @@ -596,16 +600,18 @@ int config_parse_tunnel_key(const char *unit, return 0; } -int config_parse_ipv6_flowlabel(const char* unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_ipv6_flowlabel( + const char* unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + IPv6FlowLabel *ipv6_flowlabel = data; Tunnel *t = userdata; int k = 0; @@ -635,16 +641,18 @@ int config_parse_ipv6_flowlabel(const char* unit, return 0; } -int config_parse_encap_limit(const char* unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_encap_limit( + const char* unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + Tunnel *t = userdata; int k = 0; int r; @@ -673,26 +681,27 @@ int config_parse_encap_limit(const char* unit, return 0; } -int config_parse_6rd_prefix(const char* unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_6rd_prefix( + const char* unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + Tunnel *t = userdata; + union in_addr_union p; + uint8_t l; + int r; assert(filename); assert(lvalue); assert(rvalue); - union in_addr_union p; - uint8_t l; - int r; - r = in_addr_prefix_from_string(rvalue, AF_INET6, &p, &l); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse 6rd prefix \"%s\", ignoring: %m", rvalue); diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c index 52d8b3736c..6829017f80 100644 --- a/src/network/netdev/vxlan.c +++ b/src/network/netdev/vxlan.c @@ -174,16 +174,18 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli return r; } -int config_parse_vxlan_address(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_vxlan_address( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + VxLan *v = userdata; union in_addr_union *addr = data, buffer; int r, f; @@ -225,16 +227,18 @@ int config_parse_vxlan_address(const char *unit, return 0; } -int config_parse_port_range(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_port_range( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + VxLan *v = userdata; uint16_t low, high; int r; @@ -257,16 +261,18 @@ int config_parse_port_range(const char *unit, return 0; } -int config_parse_flow_label(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_flow_label( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + VxLan *v = userdata; unsigned f; int r; @@ -293,16 +299,18 @@ int config_parse_flow_label(const char *unit, return 0; } -int config_parse_vxlan_ttl(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_vxlan_ttl( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + VxLan *v = userdata; unsigned f; int r; diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c index 2b201e271e..19c888287c 100644 --- a/src/network/networkd-dhcp-common.c +++ b/src/network/networkd-dhcp-common.c @@ -460,16 +460,17 @@ int config_parse_section_route_table( return 0; } -int config_parse_iaid(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_iaid( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { Network *network = userdata; uint32_t iaid; diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index c35b5514a5..6b4f6aaabd 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1844,7 +1844,8 @@ int config_parse_dhcp_ip_service_type( return 0; } -int config_parse_dhcp_fallback_lease_lifetime(const char *unit, +int config_parse_dhcp_fallback_lease_lifetime( + const char *unit, const char *filename, unsigned line, const char *section, @@ -1854,6 +1855,7 @@ int config_parse_dhcp_fallback_lease_lifetime(const char *unit, const char *rvalue, void *data, void *userdata) { + Network *network = userdata; uint32_t k; diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index daf34a7225..bb09ba9e89 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -715,7 +715,8 @@ bool network_has_static_ipv6_configurations(Network *network) { return false; } -int config_parse_stacked_netdev(const char *unit, +int config_parse_stacked_netdev( + const char *unit, const char *filename, unsigned line, const char *section, @@ -725,6 +726,7 @@ int config_parse_stacked_netdev(const char *unit, const char *rvalue, void *data, void *userdata) { + _cleanup_free_ char *name = NULL; NetDevKind kind = ltype; Hashmap **h = data; @@ -855,26 +857,26 @@ int config_parse_hostname( void *data, void *userdata) { - _cleanup_free_ char *hn = NULL; char **hostname = data; int r; assert(filename); assert(lvalue); assert(rvalue); - assert(hostname); + assert(data); - r = config_parse_string(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &hn, userdata); - if (r < 0) - return r; + if (isempty(rvalue)) { + *hostname = mfree(*hostname); + return 0; + } - if (!hostname_is_valid(hn, 0)) { + if (!hostname_is_valid(rvalue, 0)) { log_syntax(unit, LOG_WARNING, filename, line, 0, "Hostname is not valid, ignoring assignment: %s", rvalue); return 0; } - r = dns_name_is_valid(hn); + r = dns_name_is_valid(rvalue); if (r < 0) { log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to check validity of hostname '%s', ignoring assignment: %m", rvalue); @@ -886,7 +888,7 @@ int config_parse_hostname( return 0; } - return free_and_replace(*hostname, hn); + return free_and_strdup_warn(hostname, rvalue); } int config_parse_timezone( @@ -901,26 +903,27 @@ int config_parse_timezone( void *data, void *userdata) { - _cleanup_free_ char *tz = NULL; - char **datap = data; + char **tz = data; int r; assert(filename); assert(lvalue); assert(rvalue); - assert(datap); + assert(data); - r = config_parse_string(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &tz, userdata); - if (r < 0) - return r; + if (isempty(rvalue)) { + *tz = mfree(*tz); + return 0; + } - if (!timezone_is_valid(tz, LOG_WARNING)) { - log_syntax(unit, LOG_WARNING, filename, line, 0, + r = verify_timezone(rvalue, LOG_WARNING); + if (r < 0) { + log_syntax(unit, LOG_WARNING, filename, line, r, "Timezone is not valid, ignoring assignment: %s", rvalue); return 0; } - return free_and_replace(*datap, tz); + return free_and_strdup_warn(tz, rvalue); } int config_parse_dns(