diff options
author | chris <chris@debian11> | 2023-01-01 14:59:20 +0100 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-01-12 13:26:47 +0900 |
commit | ea577968540db7eb4d9b9922506dc0cad0426ec7 (patch) | |
tree | 7f310d456f64da0d729b0bb34176067827b6d40d /src/network | |
parent | c24b0bd1df41f9aa5607c333a223797c092995ad (diff) | |
download | systemd-ea577968540db7eb4d9b9922506dc0cad0426ec7.tar.gz |
optionally set socket priority on DHCPv4 raw socket
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/networkd-dhcp4.c | 42 | ||||
-rw-r--r-- | src/network/networkd-dhcp4.h | 1 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 1 | ||||
-rw-r--r-- | src/network/networkd-network.h | 2 |
4 files changed, 46 insertions, 0 deletions
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index e4005719d0..43850e1e95 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1499,6 +1499,12 @@ static int dhcp4_configure(Link *link) { return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set IP service type: %m"); } + if (link->network->dhcp_socket_priority_set) { + r = sd_dhcp_client_set_socket_priority(link->dhcp_client, link->network->dhcp_socket_priority); + if (r < 0) + return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set socket priority: %m"); + } + if (link->network->dhcp_fallback_lease_lifetime > 0) { r = sd_dhcp_client_set_fallback_lease_lifetime(link->dhcp_client, link->network->dhcp_fallback_lease_lifetime); if (r < 0) @@ -1701,6 +1707,42 @@ int config_parse_dhcp_ip_service_type( return 0; } +int config_parse_dhcp_socket_priority( + 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 = ASSERT_PTR(data); + int a, r; + + assert(lvalue); + assert(rvalue); + + if (isempty(rvalue)) { + network->dhcp_socket_priority_set = false; + return 0; + } + + r = safe_atoi(rvalue, &a); + if (r < 0) { + log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to parse socket priority, ignoring: %s", rvalue); + return 0; + } + + network->dhcp_socket_priority_set = true; + network->dhcp_socket_priority = a; + + return 0; +} + int config_parse_dhcp_fallback_lease_lifetime( const char *unit, const char *filename, diff --git a/src/network/networkd-dhcp4.h b/src/network/networkd-dhcp4.h index 1d30cd15df..0f14e07943 100644 --- a/src/network/networkd-dhcp4.h +++ b/src/network/networkd-dhcp4.h @@ -29,6 +29,7 @@ int link_request_dhcp4_client(Link *link); CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_client_identifier); CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_max_attempts); CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_ip_service_type); +CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_socket_priority); CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_mud_url); CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_fallback_lease_lifetime); CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_label); diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 762eef5b91..c205e56c62 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -243,6 +243,7 @@ DHCPv4.SendDecline, config_parse_bool, DHCPv4.DenyList, config_parse_in_addr_prefixes, AF_INET, offsetof(Network, dhcp_deny_listed_ip) DHCPv4.AllowList, config_parse_in_addr_prefixes, AF_INET, offsetof(Network, dhcp_allow_listed_ip) DHCPv4.IPServiceType, config_parse_dhcp_ip_service_type, 0, offsetof(Network, dhcp_ip_service_type) +DHCPv4.SocketPriority, config_parse_dhcp_socket_priority, 0, 0 DHCPv4.SendOption, config_parse_dhcp_send_option, AF_INET, offsetof(Network, dhcp_client_send_options) DHCPv4.SendVendorOption, config_parse_dhcp_send_option, 0, offsetof(Network, dhcp_client_send_vendor_options) DHCPv4.RouteMTUBytes, config_parse_mtu, AF_INET, offsetof(Network, dhcp_route_mtu) diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index 79e8ceb06b..09f0e9beea 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -130,6 +130,8 @@ struct Network { uint16_t dhcp_client_port; int dhcp_critical; int dhcp_ip_service_type; + int dhcp_socket_priority; + bool dhcp_socket_priority_set; bool dhcp_anonymize; bool dhcp_send_hostname; int dhcp_broadcast; |