]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp-lease: add a meta-getter to simplify querying of server lists
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 2 Apr 2020 13:42:31 +0000 (15:42 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 10 Apr 2020 15:45:46 +0000 (17:45 +0200)
src/libsystemd-network/sd-dhcp-lease.c
src/systemd/sd-dhcp-lease.h

index 1b7b6e1068733a8ad22c526757fabb6eba404c61..5154af23049ef1ff75b28ff0affc683aa829aa2e 100644 (file)
@@ -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) {
index 1ed5bf27a3a5b592cb9cc6281f9ec7b893896750..70544e13f1d8ca2f2ca8782595b4cde1444414f1 100644 (file)
@@ -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);