summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-01-20 11:01:41 +0100
committerThomas Haller <thaller@redhat.com>2021-01-20 11:01:41 +0100
commitc4938e455263c5eb3f699b6074ff968aa0e2bbf0 (patch)
tree2957b56b9a1af95e86311b4d6a230cdc28b35798
parent2372b562f9be478b20089374aae85aff1a120c35 (diff)
downloadNetworkManager-c4938e455263c5eb3f699b6074ff968aa0e2bbf0.tar.gz
Squashed 'shared/n-dhcp4/' changes from 8c91e9ae8999..f459d85fdef6
f459d85fdef6 packed: use c_errno() in packet_sendto_udp() to avoid compiler warning d52768da6acd client-lease: add n_dhcp4_client_lease_get_server_identifier() git-subtree-dir: shared/n-dhcp4 git-subtree-split: f459d85fdef6954b4f4b103e211fb9e175b12bac
-rw-r--r--src/libndhcp4.sym1
-rw-r--r--src/n-dhcp4-c-lease.c26
-rw-r--r--src/n-dhcp4.h1
-rw-r--r--src/test-api.c1
-rw-r--r--src/util/packet.c2
5 files changed, 30 insertions, 1 deletions
diff --git a/src/libndhcp4.sym b/src/libndhcp4.sym
index 0659926bec..6c06e2fd28 100644
--- a/src/libndhcp4.sym
+++ b/src/libndhcp4.sym
@@ -36,6 +36,7 @@ global:
n_dhcp4_client_lease_get_yiaddr;
n_dhcp4_client_lease_get_siaddr;
n_dhcp4_client_lease_get_lifetime;
+ n_dhcp4_client_lease_get_server_identifier;
n_dhcp4_client_lease_query;
n_dhcp4_client_lease_select;
n_dhcp4_client_lease_accept;
diff --git a/src/n-dhcp4-c-lease.c b/src/n-dhcp4-c-lease.c
index 6d9b4f3340..515814d4e6 100644
--- a/src/n-dhcp4-c-lease.c
+++ b/src/n-dhcp4-c-lease.c
@@ -242,6 +242,32 @@ _c_public_ void n_dhcp4_client_lease_get_lifetime(NDhcp4ClientLease *lease, uint
}
/**
+ * n_dhcp4_client_lease_get_server_identifier() - get the server identifier
+ * @lease: the lease to operate on
+ * @addr: return argument for the server identifier
+ *
+ * Gets the address contained in the server-identifier DHCP option, in network
+ * byte order.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+_c_public_ int n_dhcp4_client_lease_get_server_identifier (NDhcp4ClientLease *lease, struct in_addr *addr) {
+ uint8_t *data;
+ size_t n_data;
+ int r;
+
+ r = n_dhcp4_incoming_query(lease->message, N_DHCP4_OPTION_SERVER_IDENTIFIER, &data, &n_data);
+ if (r)
+ return r;
+ if (n_data < sizeof(struct in_addr))
+ return N_DHCP4_E_MALFORMED;
+
+ memcpy(addr, data, sizeof(struct in_addr));
+
+ return 0;
+}
+
+/**
* n_dhcp4_client_lease_query() - query the lease for an option
* @lease: the lease to operate on
* @option: the DHCP4 option code
diff --git a/src/n-dhcp4.h b/src/n-dhcp4.h
index 81452848d9..435c5600d8 100644
--- a/src/n-dhcp4.h
+++ b/src/n-dhcp4.h
@@ -171,6 +171,7 @@ void n_dhcp4_client_lease_get_siaddr(NDhcp4ClientLease *lease, struct in_addr *s
void n_dhcp4_client_lease_get_basetime(NDhcp4ClientLease *lease, uint64_t *ns_basetimep);
void n_dhcp4_client_lease_get_lifetime(NDhcp4ClientLease *lease, uint64_t *ns_lifetimep);
int n_dhcp4_client_lease_query(NDhcp4ClientLease *lease, uint8_t option, uint8_t **datap, size_t *n_datap);
+int n_dhcp4_client_lease_get_server_identifier (NDhcp4ClientLease *lease, struct in_addr *addr);
int n_dhcp4_client_lease_select(NDhcp4ClientLease *lease);
int n_dhcp4_client_lease_accept(NDhcp4ClientLease *lease);
diff --git a/src/test-api.c b/src/test-api.c
index be2d7b36a0..db3ff935ce 100644
--- a/src/test-api.c
+++ b/src/test-api.c
@@ -106,6 +106,7 @@ static void test_api_functions(void) {
(void *)n_dhcp4_client_lease_get_yiaddr,
(void *)n_dhcp4_client_lease_get_siaddr,
(void *)n_dhcp4_client_lease_get_lifetime,
+ (void *)n_dhcp4_client_lease_get_server_identifier,
(void *)n_dhcp4_client_lease_query,
(void *)n_dhcp4_client_lease_select,
(void *)n_dhcp4_client_lease_accept,
diff --git a/src/util/packet.c b/src/util/packet.c
index ef18b0b464..48f2c85eb9 100644
--- a/src/util/packet.c
+++ b/src/util/packet.c
@@ -223,7 +223,7 @@ int packet_sendto_udp(int sockfd,
pktlen = sendmsg(sockfd, &msg, 0);
if (pktlen < 0)
- return -errno;
+ return -c_errno();
/*
* Kernel never truncates. Worst case, we get -EMSGSIZE. Kernel *might*