diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml index cb2bd23f71..f9b558520b 100644 --- a/man/systemd.netdev.xml +++ b/man/systemd.netdev.xml @@ -600,8 +600,8 @@ Configures the default destination UDP port on a per-device basis. If destination port is not specified then Linux kernel default will be used. - Set destination port 4789 to get the IANA assigned value, - and destination port 0 to get default values. + Set destination port 4789 to get the IANA assigned value. If not set or if the + destination port is assigned the empty string the default port of 4789 is used. @@ -646,13 +646,13 @@ TOS= - Specifies the TOS value to use in outgoing packets. Ranges [1-255]. + Specifies the TOS value to use in outgoing packets. Ranges [1-255]. TTL= - Specifies the TTL value to use in outgoing packets. Ranges [1-255]. + Specifies the TTL value to use in outgoing packets. Ranges [1-255]. @@ -676,7 +676,8 @@ DestinationPort= - Specifies destination port. Defaults to 6081. + Specifies destination port. Defaults to 6081. If not set or assigned the empty string, the default + port of 6081 is used. diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c index 07c69f4711..e71ea58a10 100644 --- a/src/network/netdev/geneve.c +++ b/src/network/netdev/geneve.c @@ -238,36 +238,6 @@ int config_parse_geneve_address(const char *unit, return 0; } -int config_parse_geneve_destination_port(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; - uint16_t port; - int r; - - assert(filename); - assert(lvalue); - assert(rvalue); - assert(data); - - r = parse_ip_port(rvalue, &port); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse Geneve destination port '%s'.", rvalue); - return 0; - } - - v->dest_port = port; - - return 0; -} - int config_parse_geneve_flow_label(const char *unit, const char *filename, unsigned line, diff --git a/src/network/netdev/geneve.h b/src/network/netdev/geneve.h index f93b550b06..bde28bac55 100644 --- a/src/network/netdev/geneve.h +++ b/src/network/netdev/geneve.h @@ -73,17 +73,6 @@ int config_parse_geneve_address(const char *unit, void *data, void *userdata); -int config_parse_geneve_destination_port(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, diff --git a/src/network/netdev/netdev-gperf.gperf b/src/network/netdev/netdev-gperf.gperf index 6016b99b54..ed943789d7 100644 --- a/src/network/netdev/netdev-gperf.gperf +++ b/src/network/netdev/netdev-gperf.gperf @@ -79,7 +79,7 @@ VXLAN.FDBAgeingSec, config_parse_sec, 0, VXLAN.GroupPolicyExtension, config_parse_bool, 0, offsetof(VxLan, group_policy) VXLAN.MaximumFDBEntries, config_parse_unsigned, 0, offsetof(VxLan, max_fdb) VXLAN.PortRange, config_parse_port_range, 0, 0 -VXLAN.DestinationPort, config_parse_destination_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 GENEVE.Id, config_parse_geneve_vni, 0, offsetof(Geneve, id) GENEVE.Remote, config_parse_geneve_address, 0, offsetof(Geneve, remote) @@ -88,7 +88,7 @@ GENEVE.TTL, config_parse_uint8, 0, GENEVE.UDPChecksum, config_parse_bool, 0, offsetof(Geneve, udpcsum) GENEVE.UDP6ZeroCheckSumRx, config_parse_bool, 0, offsetof(Geneve, udp6zerocsumrx) GENEVE.UDP6ZeroCheckSumTx, config_parse_bool, 0, offsetof(Geneve, udp6zerocsumtx) -GENEVE.DestinationPort, config_parse_geneve_destination_port, 0, offsetof(Geneve, dest_port) +GENEVE.DestinationPort, config_parse_ip_port, 0, offsetof(Geneve, dest_port) GENEVE.FlowLabel, config_parse_geneve_flow_label, 0, 0 Tun.OneQueue, config_parse_bool, 0, offsetof(TunTap, one_queue) Tun.MultiQueue, config_parse_bool, 0, offsetof(TunTap, multi_queue) diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c index 7f20e6cdfe..b5b7aec2c0 100644 --- a/src/network/netdev/vxlan.c +++ b/src/network/netdev/vxlan.c @@ -271,36 +271,6 @@ int config_parse_port_range(const char *unit, return 0; } -int config_parse_destination_port(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 port; - int r; - - assert(filename); - assert(lvalue); - assert(rvalue); - assert(data); - - r = parse_ip_port(rvalue, &port); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse VXLAN destination port '%s'.", rvalue); - return 0; - } - - v->dest_port = port; - - return 0; -} - int config_parse_flow_label(const char *unit, const char *filename, unsigned line, diff --git a/src/network/netdev/vxlan.h b/src/network/netdev/vxlan.h index 7f97a9edc4..1eeda022a2 100644 --- a/src/network/netdev/vxlan.h +++ b/src/network/netdev/vxlan.h @@ -86,17 +86,6 @@ int config_parse_port_range(const char *unit, void *data, void *userdata); -int config_parse_destination_port(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, diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index d8393cbc8d..dae521ef9f 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -960,3 +960,40 @@ int config_parse_ifname( return 0; } + +int config_parse_ip_port( + 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) { + + uint16_t *s = data; + uint16_t port; + int r; + + assert(filename); + assert(lvalue); + assert(rvalue); + assert(data); + + if (isempty(rvalue)) { + *s = 0; + return 0; + } + + r = parse_ip_port(rvalue, &port); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse port '%s'.", rvalue); + return 0; + } + + *s = port; + + return 0; +} diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h index 82ea5c1288..ce1113485d 100644 --- a/src/shared/conf-parser.h +++ b/src/shared/conf-parser.h @@ -140,6 +140,7 @@ int config_parse_log_level(const char *unit, const char *filename, unsigned line int config_parse_signal(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_personality(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_ifname(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_ip_port(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); #define DEFINE_CONFIG_PARSE_ENUM(function,name,type,msg) \ int function(const char *unit, \