From 8541db8f5932898fe7b08625f718b8cfcd149b4c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 2 Apr 2020 15:42:31 +0200 Subject: [PATCH] sd-dhcp-lease: add a meta-getter to simplify querying of server lists --- src/libsystemd-network/sd-dhcp-lease.c | 85 +++++++++++++++----------- src/systemd/sd-dhcp-lease.h | 10 +++ 2 files changed, 58 insertions(+), 37 deletions(-) diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c index 1b7b6e10687..5154af23049 100644 --- a/src/libsystemd-network/sd-dhcp-lease.c +++ b/src/libsystemd-network/sd-dhcp-lease.c @@ -96,59 +96,70 @@ int sd_dhcp_lease_get_mtu(sd_dhcp_lease *lease, uint16_t *mtu) { return 0; } -int sd_dhcp_lease_get_dns(sd_dhcp_lease *lease, const struct in_addr **addr) { +int sd_dhcp_lease_get_servers( + sd_dhcp_lease *lease, + sd_dhcp_lease_info what, + const struct in_addr **addr) { + assert_return(lease, -EINVAL); assert_return(addr, -EINVAL); - if (lease->dns_size <= 0) - return -ENODATA; + switch (what) { + case SD_DHCP_LEASE_DNS_SERVERS: + if (lease->dns_size <= 0) + return -ENODATA; - *addr = lease->dns; - return (int) lease->dns_size; -} + *addr = lease->dns; + return (int) lease->dns_size; -int sd_dhcp_lease_get_ntp(sd_dhcp_lease *lease, const struct in_addr **addr) { - assert_return(lease, -EINVAL); - assert_return(addr, -EINVAL); + case SD_DHCP_LEASE_NTP_SERVERS: + if (lease->ntp_size <= 0) + return -ENODATA; - if (lease->ntp_size <= 0) - return -ENODATA; + *addr = lease->ntp; + return (int) lease->ntp_size; - *addr = lease->ntp; - return (int) lease->ntp_size; -} + case SD_DHCP_LEASE_SIP_SERVERS: + if (lease->sip_size <= 0) + return -ENODATA; -int sd_dhcp_lease_get_sip(sd_dhcp_lease *lease, const struct in_addr **addr) { - assert_return(lease, -EINVAL); - assert_return(addr, -EINVAL); + *addr = lease->sip; + return (int) lease->sip_size; - if (lease->sip_size <= 0) - return -ENODATA; + case SD_DHCP_LEASE_POP3_SERVERS: + if (lease->pop3_server_size <= 0) + return -ENODATA; - *addr = lease->sip; - return (int) lease->sip_size; -} + *addr = lease->pop3_server; + return (int) lease->pop3_server_size; -int sd_dhcp_lease_get_pop3_server(sd_dhcp_lease *lease, const struct in_addr **addr) { - assert_return(lease, -EINVAL); - assert_return(addr, -EINVAL); + case SD_DHCP_LEASE_SMTP_SERVERS: + if (lease->smtp_server_size <= 0) + return -ENODATA; - if (lease->pop3_server_size <= 0) - return -ENODATA; + *addr = lease->smtp_server; + return (int) lease->smtp_server_size; - *addr = lease->pop3_server; - return (int) lease->pop3_server_size; + default: + log_debug("Uknown DHCP lease info item %d.", what); + return -ENXIO; + } } +int sd_dhcp_lease_get_dns(sd_dhcp_lease *lease, const struct in_addr **addr) { + return sd_dhcp_lease_get_servers(lease, SD_DHCP_LEASE_DNS_SERVERS, addr); +} +int sd_dhcp_lease_get_ntp(sd_dhcp_lease *lease, const struct in_addr **addr) { + return sd_dhcp_lease_get_servers(lease, SD_DHCP_LEASE_NTP_SERVERS, addr); +} +int sd_dhcp_lease_get_sip(sd_dhcp_lease *lease, const struct in_addr **addr) { + return sd_dhcp_lease_get_servers(lease, SD_DHCP_LEASE_SIP_SERVERS, addr); +} +int sd_dhcp_lease_get_pop3_server(sd_dhcp_lease *lease, const struct in_addr **addr) { + return sd_dhcp_lease_get_servers(lease, SD_DHCP_LEASE_POP3_SERVERS, addr); +} int sd_dhcp_lease_get_smtp_server(sd_dhcp_lease *lease, const struct in_addr **addr) { - assert_return(lease, -EINVAL); - assert_return(addr, -EINVAL); - - if (lease->smtp_server_size <= 0) - return -ENODATA; - - *addr = lease->smtp_server; - return (int) lease->smtp_server_size; + return sd_dhcp_lease_get_servers(lease, SD_DHCP_LEASE_SMTP_SERVERS, addr); } int sd_dhcp_lease_get_domainname(sd_dhcp_lease *lease, const char **domainname) { diff --git a/src/systemd/sd-dhcp-lease.h b/src/systemd/sd-dhcp-lease.h index 1ed5bf27a3a..70544e13f1d 100644 --- a/src/systemd/sd-dhcp-lease.h +++ b/src/systemd/sd-dhcp-lease.h @@ -33,6 +33,15 @@ typedef struct sd_dhcp_route sd_dhcp_route; sd_dhcp_lease *sd_dhcp_lease_ref(sd_dhcp_lease *lease); sd_dhcp_lease *sd_dhcp_lease_unref(sd_dhcp_lease *lease); +typedef enum sd_dhcp_lease_info { + SD_DHCP_LEASE_DNS_SERVERS = 0, + SD_DHCP_LEASE_NTP_SERVERS, + SD_DHCP_LEASE_SIP_SERVERS, + SD_DHCP_LEASE_POP3_SERVERS, + SD_DHCP_LEASE_SMTP_SERVERS, + _SD_DHCP_LEASE_INFO_MAX, +} sd_dhcp_lease_info; + int sd_dhcp_lease_get_address(sd_dhcp_lease *lease, struct in_addr *addr); int sd_dhcp_lease_get_lifetime(sd_dhcp_lease *lease, uint32_t *lifetime); int sd_dhcp_lease_get_t1(sd_dhcp_lease *lease, uint32_t *t1); @@ -42,6 +51,7 @@ int sd_dhcp_lease_get_netmask(sd_dhcp_lease *lease, struct in_addr *addr); int sd_dhcp_lease_get_router(sd_dhcp_lease *lease, const struct in_addr **addr); int sd_dhcp_lease_get_next_server(sd_dhcp_lease *lease, struct in_addr *addr); int sd_dhcp_lease_get_server_identifier(sd_dhcp_lease *lease, struct in_addr *addr); +int sd_dhcp_lease_get_servers(sd_dhcp_lease *lease, sd_dhcp_lease_info what, const struct in_addr **addr); int sd_dhcp_lease_get_dns(sd_dhcp_lease *lease, const struct in_addr **addr); int sd_dhcp_lease_get_ntp(sd_dhcp_lease *lease, const struct in_addr **addr); int sd_dhcp_lease_get_sip(sd_dhcp_lease *lease, const struct in_addr **addr); -- 2.47.3