summaryrefslogtreecommitdiff
path: root/src/network/networkd-dhcp-server.c
diff options
context:
space:
mode:
authorYegor Alexeyev <yegor.alexeyev@gmail.com>2021-03-15 21:19:52 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-04-20 15:11:53 +0200
commitc95df5879eeb2cec8bc8eec2cfa7e741e1d9469f (patch)
tree3add531eb313ecdc610daa8da6b3d96155a82cc4 /src/network/networkd-dhcp-server.c
parentd5bfddf037fba39367064bed357ba50ae8466b38 (diff)
downloadsystemd-c95df5879eeb2cec8bc8eec2cfa7e741e1d9469f.tar.gz
relay role implementation
Diffstat (limited to 'src/network/networkd-dhcp-server.c')
-rw-r--r--src/network/networkd-dhcp-server.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c
index 64bb23f387..bd368672da 100644
--- a/src/network/networkd-dhcp-server.c
+++ b/src/network/networkd-dhcp-server.c
@@ -352,6 +352,10 @@ int dhcp4_server_configure(Link *link) {
if (r < 0)
return log_link_error_errno(link, r, "Failed to set router emission for DHCP server: %m");
+ r = sd_dhcp_server_set_relay_target(link->dhcp_server, &link->network->dhcp_server_relay_target);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Failed to set relay target for DHCP server: %m");
+
if (link->network->dhcp_server_emit_timezone) {
_cleanup_free_ char *buffer = NULL;
const char *tz;
@@ -398,6 +402,32 @@ int dhcp4_server_configure(Link *link) {
return 0;
}
+int config_parse_dhcp_server_relay_target(
+ 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;
+ union in_addr_union a;
+ int r;
+
+ r = in_addr_from_string(AF_INET, rvalue, &a);
+ if (r < 0) {
+ log_syntax(unit, LOG_WARNING, filename, line, r,
+ "Failed to parse %s= address '%s', ignoring: %m", lvalue, rvalue);
+ return 0;
+ }
+ network->dhcp_server_relay_target = a.in;
+ return r;
+}
+
int config_parse_dhcp_server_emit(
const char *unit,
const char *filename,