diff options
author | Thomas Haller <thaller@redhat.com> | 2021-01-20 11:01:41 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2021-01-20 11:01:41 +0100 |
commit | c4938e455263c5eb3f699b6074ff968aa0e2bbf0 (patch) | |
tree | 2957b56b9a1af95e86311b4d6a230cdc28b35798 | |
parent | 2372b562f9be478b20089374aae85aff1a120c35 (diff) | |
download | NetworkManager-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.sym | 1 | ||||
-rw-r--r-- | src/n-dhcp4-c-lease.c | 26 | ||||
-rw-r--r-- | src/n-dhcp4.h | 1 | ||||
-rw-r--r-- | src/test-api.c | 1 | ||||
-rw-r--r-- | src/util/packet.c | 2 |
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* |