summaryrefslogtreecommitdiff
path: root/src/libsystemd-network/sd-dhcp-lease.c
diff options
context:
space:
mode:
authorSusant Sahani <ssahani@vmware.com>2020-04-22 14:48:11 +0200
committerSusant Sahani <ssahani@vmware.com>2020-04-22 14:48:11 +0200
commit50018bfa84f5f0a0271e7656264d303e034dcf4d (patch)
treed3916f8b9cb29ec99fcd956c17983e185847a595 /src/libsystemd-network/sd-dhcp-lease.c
parent91b75f1f2f3da4b3755acb831bf5a5be1bebfded (diff)
downloadsystemd-50018bfa84f5f0a0271e7656264d303e034dcf4d.tar.gz
sd-network: DHCPv4 Add support to send and receive LPR servers.
Diffstat (limited to 'src/libsystemd-network/sd-dhcp-lease.c')
-rw-r--r--src/libsystemd-network/sd-dhcp-lease.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c
index 5154af2304..abb2018810 100644
--- a/src/libsystemd-network/sd-dhcp-lease.c
+++ b/src/libsystemd-network/sd-dhcp-lease.c
@@ -140,6 +140,13 @@ int sd_dhcp_lease_get_servers(
*addr = lease->smtp_server;
return (int) lease->smtp_server_size;
+ case SD_DHCP_LEASE_LPR_SERVERS:
+ if (lease->lpr_server_size <= 0)
+ return -ENODATA;
+
+ *addr = lease->lpr_server;
+ return (int) lease->lpr_server_size;
+
default:
log_debug("Uknown DHCP lease info item %d.", what);
return -ENXIO;
@@ -161,6 +168,9 @@ int sd_dhcp_lease_get_pop3_server(sd_dhcp_lease *lease, const struct in_addr **a
int sd_dhcp_lease_get_smtp_server(sd_dhcp_lease *lease, const struct in_addr **addr) {
return sd_dhcp_lease_get_servers(lease, SD_DHCP_LEASE_SMTP_SERVERS, addr);
}
+int sd_dhcp_lease_get_lpr_servers(sd_dhcp_lease *lease, const struct in_addr **addr) {
+ return sd_dhcp_lease_get_servers(lease, SD_DHCP_LEASE_LPR_SERVERS, addr);
+}
int sd_dhcp_lease_get_domainname(sd_dhcp_lease *lease, const char **domainname) {
assert_return(lease, -EINVAL);
@@ -314,6 +324,7 @@ static sd_dhcp_lease *dhcp_lease_free(sd_dhcp_lease *lease) {
free(lease->sip);
free(lease->pop3_server);
free(lease->smtp_server);
+ free(lease->lpr_server);
free(lease->static_route);
free(lease->client_id);
free(lease->vendor_specific);
@@ -648,6 +659,12 @@ int dhcp_lease_parse_options(uint8_t code, uint8_t len, const void *option, void
log_debug_errno(r, "Failed to parse SMTP server, ignoring: %m");
break;
+ case SD_DHCP_OPTION_LPR_SERVER:
+ r = lease_parse_in_addrs(option, len, &lease->lpr_server, &lease->lpr_server_size);
+ if (r < 0)
+ log_debug_errno(r, "Failed to parse LPR server, ignoring: %m");
+ break;
+
case SD_DHCP_OPTION_STATIC_ROUTE:
r = lease_parse_routes(option, len, &lease->static_route, &lease->static_route_size, &lease->static_route_allocated);
if (r < 0)
@@ -1086,6 +1103,7 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) {
*sip = NULL,
*pop3_server = NULL,
*smtp_server = NULL,
+ *lpr_server = NULL,
*mtu = NULL,
*routes = NULL,
*domains = NULL,
@@ -1117,6 +1135,7 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) {
"SIP", &sip,
"POP3_SERVERS", &pop3_server,
"SMTP_SERVERS", &smtp_server,
+ "LPR_SERVERS", &lpr_server,
"MTU", &mtu,
"DOMAINNAME", &lease->domainname,
"HOSTNAME", &lease->hostname,
@@ -1245,6 +1264,15 @@ int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) {
lease->smtp_server_size = r;
}
+ if (lpr_server) {
+ r = deserialize_in_addrs(&lease->lpr_server, lpr_server);
+ if (r < 0)
+ log_debug_errno(r, "Failed to deserialize LPR server %s, ignoring: %m", lpr_server);
+ else
+ lease->lpr_server_size = r;
+ }
+
+
if (mtu) {
r = safe_atou16(mtu, &lease->mtu);
if (r < 0)