summaryrefslogtreecommitdiff
path: root/libdhcp
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-10 00:06:34 -0700
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-10 00:06:34 -0700
commit6cd125e1ffd44fdf62c44d22c519561a8c9d7268 (patch)
treebf2b4a8225fe0d6f00084a1577c70bb564a20600 /libdhcp
parentf466cff948ec638f26a9a77a391904ebe03c4dfb (diff)
parenta51875001eb672d73c9d84d44bb32abce327b931 (diff)
Merge branch 'lukeshu/libobj-simple'
Diffstat (limited to 'libdhcp')
-rw-r--r--libdhcp/dhcp_client.c53
-rw-r--r--libdhcp/include/libdhcp/client.h4
2 files changed, 28 insertions, 29 deletions
diff --git a/libdhcp/dhcp_client.c b/libdhcp/dhcp_client.c
index ea6ed28..e50c5f3 100644
--- a/libdhcp/dhcp_client.c
+++ b/libdhcp/dhcp_client.c
@@ -1,6 +1,6 @@
/* libdhcp/dhcp_client.c - A DHCP client
*
- * Copyright (C) 2024 Luke T. Shumaker <lukeshu@lukeshu.com>
+ * Copyright (C) 2024-2025 Luke T. Shumaker <lukeshu@lukeshu.com>
* SPDX-License-Identifier: AGPL-3.0-or-later
*
* -----------------------------------------------------------------------------
@@ -87,7 +87,6 @@
#include <string.h> /* for strlen(), memcpy(), memset() */
#include <libmisc/rand.h>
-#include <libmisc/vcall.h>
#include <libhw/generic/alarmclock.h>
#define LOG_NAME DHCP
@@ -125,8 +124,8 @@ enum requirement {
struct dhcp_client {
/* Static. */
- implements_net_iface *iface;
- implements_net_packet_conn *sock;
+ lo_interface net_iface iface;
+ lo_interface net_packet_conn sock;
struct net_eth_addr self_eth_addr;
char *self_hostname;
size_t self_id_len;
@@ -313,7 +312,7 @@ static bool dhcp_client_send(struct dhcp_client *client, uint8_t msgtyp, const c
switch (msgtyp) {
case DHCP_MSGTYP_DISCOVER: case DHCP_MSGTYP_INFORM:
case DHCP_MSGTYP_REQUEST:
- secs = (VCALL(bootclock, get_time_ns) - client->time_ns_init)/NS_PER_S;
+ secs = (LO_CALL(bootclock, get_time_ns) - client->time_ns_init)/NS_PER_S;
if (!secs)
/* systemd's sd-dhcp-client.c asserts that some
* servers are broken and require .secs to be
@@ -462,7 +461,7 @@ static bool dhcp_client_send(struct dhcp_client *client, uint8_t msgtyp, const c
* Send *
\**********************************************************************/
debugf("state %s: sending DHCP %s", state_strs[client->state], dhcp_msgtyp_str(msgtyp));
- ssize_t r = VCALL(client->sock, sendto, scratch_msg, DHCP_MSG_BASE_SIZE + optlen,
+ ssize_t r = LO_CALL(client->sock, sendto, scratch_msg, DHCP_MSG_BASE_SIZE + optlen,
client_broadcasts ? net_ip4_addr_broadcast : client->lease_server_id, DHCP_PORT_SERVER);
if (r < 0) {
debugf("error: sendto: %zd", r);
@@ -579,7 +578,7 @@ static ssize_t dhcp_client_recv(struct dhcp_client *client, struct dhcp_recv_msg
assert(client);
ignore:
- msg_len = VCALL(client->sock, recvfrom, &ret->raw, sizeof(ret->raw), &srv_addr, &srv_port);
+ msg_len = LO_CALL(client->sock, recvfrom, &ret->raw, sizeof(ret->raw), &srv_addr, &srv_port);
if (msg_len < 0)
/* msg_len is -errno */
return msg_len;
@@ -702,9 +701,9 @@ static ssize_t dhcp_client_recv(struct dhcp_client *client, struct dhcp_recv_msg
}
/** @return true if there's a conflict, false if the addr appears to be unused */
-static bool dhcp_check_conflict(implements_net_packet_conn *sock, struct net_ip4_addr addr) {
- assert(sock);
- ssize_t v = VCALL(sock, sendto, "CHECK_IP_CONFLICT", 17, addr, 5000);
+static bool dhcp_check_conflict(lo_interface net_packet_conn sock, struct net_ip4_addr addr) {
+ assert(!LO_IS_NULL(sock));
+ ssize_t v = LO_CALL(sock, sendto, "CHECK_IP_CONFLICT", 17, addr, 5000);
debugf("check_ip_conflict => %zd", v);
return v != -NET_EARP_TIMEOUT;
}
@@ -745,7 +744,7 @@ static void dhcp_client_take_lease(struct dhcp_client *client, struct dhcp_recv_
infof(":: addr = "PRI_net_ip4_addr, ARG_net_ip4_addr(client->lease_client_addr));
infof(":: gateway_addr = "PRI_net_ip4_addr, ARG_net_ip4_addr(client->lease_auxdata.gateway_addr));
infof(":: subnet_mask = "PRI_net_ip4_addr, ARG_net_ip4_addr(client->lease_auxdata.subnet_mask));
- VCALL(client->iface, ifup, (struct net_iface_config){
+ LO_CALL(client->iface, ifup, (struct net_iface_config){
.addr = client->lease_client_addr,
.gateway_addr = client->lease_auxdata.gateway_addr,
.subnet_mask = client->lease_auxdata.subnet_mask,
@@ -772,11 +771,11 @@ static void dhcp_client_setstate(struct dhcp_client *client,
switch (client->state) {
case STATE_INIT:
client->xid = rand_uint63n(UINT32_MAX);
- client->time_ns_init = VCALL(bootclock, get_time_ns);
+ client->time_ns_init = LO_CALL(bootclock, get_time_ns);
dhcp_client_setstate(client, STATE_SELECTING, DHCP_MSGTYP_DISCOVER, NULL, scratch_msg);
break;
case STATE_SELECTING:
- VCALL(client->sock, set_read_deadline, client->time_ns_init+CONFIG_DHCP_SELECTING_NS);
+ LO_CALL(client->sock, set_read_deadline, client->time_ns_init+CONFIG_DHCP_SELECTING_NS);
switch ((r = dhcp_client_recv(client, scratch_msg))) {
case 0:
switch (scratch_msg->option_dat[scratch_msg->options[DHCP_OPT_DHCP_MSG_TYPE].off]) {
@@ -798,7 +797,7 @@ static void dhcp_client_setstate(struct dhcp_client *client,
}
break;
case STATE_REQUESTING:
- VCALL(client->sock, set_read_deadline, 0);
+ LO_CALL(client->sock, set_read_deadline, 0);
switch ((r = dhcp_client_recv(client, scratch_msg))) {
case 0:
switch (scratch_msg->option_dat[scratch_msg->options[DHCP_OPT_DHCP_MSG_TYPE].off]) {
@@ -825,7 +824,7 @@ static void dhcp_client_setstate(struct dhcp_client *client,
}
break;
case STATE_BOUND:
- VCALL(client->sock, set_read_deadline, client->lease_time_ns_t1);
+ LO_CALL(client->sock, set_read_deadline, client->lease_time_ns_t1);
switch ((r = dhcp_client_recv(client, scratch_msg))) {
case 0:
/* discard */
@@ -840,14 +839,14 @@ static void dhcp_client_setstate(struct dhcp_client *client,
break;
case STATE_RENEWING:
client->xid = rand_uint63n(UINT32_MAX);
- client->time_ns_init = VCALL(bootclock, get_time_ns);
+ client->time_ns_init = LO_CALL(bootclock, get_time_ns);
- VCALL(client->sock, set_read_deadline, client->lease_time_ns_t2);
+ LO_CALL(client->sock, set_read_deadline, client->lease_time_ns_t2);
switch ((r = dhcp_client_recv(client, scratch_msg))) {
case 0:
switch (scratch_msg->option_dat[scratch_msg->options[DHCP_OPT_DHCP_MSG_TYPE].off]) {
case DHCP_MSGTYP_NAK:
- VCALL(client->iface, ifdown);
+ LO_CALL(client->iface, ifdown);
dhcp_client_setstate(client, STATE_INIT, 0, NULL, scratch_msg);
break;
case DHCP_MSGTYP_ACK:
@@ -868,12 +867,12 @@ static void dhcp_client_setstate(struct dhcp_client *client,
}
break;
case STATE_REBINDING:
- VCALL(client->sock, set_read_deadline, client->lease_time_ns_end);
+ LO_CALL(client->sock, set_read_deadline, client->lease_time_ns_end);
switch ((r = dhcp_client_recv(client, scratch_msg))) {
case 0:
switch (scratch_msg->option_dat[scratch_msg->options[DHCP_OPT_DHCP_MSG_TYPE].off]) {
case DHCP_MSGTYP_NAK:
- VCALL(client->iface, ifdown);
+ LO_CALL(client->iface, ifdown);
dhcp_client_setstate(client, STATE_BOUND, 0, NULL, scratch_msg);
break;
case DHCP_MSGTYP_ACK:
@@ -885,7 +884,7 @@ static void dhcp_client_setstate(struct dhcp_client *client,
}
break;
case -NET_ERECV_TIMEOUT:
- VCALL(client->iface, ifdown);
+ LO_CALL(client->iface, ifdown);
dhcp_client_setstate(client, STATE_BOUND, 0, NULL, scratch_msg);
break;
default:
@@ -902,9 +901,9 @@ static void dhcp_client_setstate(struct dhcp_client *client,
}
}
-[[noreturn]] void dhcp_client_main(implements_net_iface *iface,
+[[noreturn]] void dhcp_client_main(lo_interface net_iface iface,
char *self_hostname) {
- assert(iface);
+ assert(!LO_IS_NULL(iface));
/* Even though a client ID is optional and not meaningful for
* us (the best we can do is to duplicate .chaddr), systemd's
@@ -912,14 +911,14 @@ static void dhcp_client_setstate(struct dhcp_client *client,
* require it to be set. */
struct {uint8_t typ; struct net_eth_addr dat;} client_id = {
DHCP_HTYPE_ETHERNET,
- VCALL(iface, hwaddr),
+ LO_CALL(iface, hwaddr),
};
struct dhcp_client client = {
/* Static. */
.iface = iface,
- .sock = VCALL(iface, udp_conn, DHCP_PORT_CLIENT),
- .self_eth_addr = VCALL(iface, hwaddr),
+ .sock = LO_CALL(iface, udp_conn, DHCP_PORT_CLIENT),
+ .self_eth_addr = LO_CALL(iface, hwaddr),
.self_hostname = self_hostname,
.self_id_len = sizeof(client_id),
.self_id_dat = &client_id,
@@ -927,7 +926,7 @@ static void dhcp_client_setstate(struct dhcp_client *client,
/* Mutable. */
.state = STATE_INIT,
};
- assert(client.sock);
+ assert(!LO_IS_NULL(client.sock));
struct dhcp_recv_msg scratch;
diff --git a/libdhcp/include/libdhcp/client.h b/libdhcp/include/libdhcp/client.h
index c3cb76f..f81e9b1 100644
--- a/libdhcp/include/libdhcp/client.h
+++ b/libdhcp/include/libdhcp/client.h
@@ -1,6 +1,6 @@
/* libdhcp/client.h - A DHCP client
*
- * Copyright (C) 2024 Luke T. Shumaker <lukeshu@lukeshu.com>
+ * Copyright (C) 2024-2025 Luke T. Shumaker <lukeshu@lukeshu.com>
* SPDX-License-Identifier: AGPL-3.0-or-later
*
* -----------------------------------------------------------------------------
@@ -69,7 +69,7 @@
#include <libhw/generic/net.h>
-[[noreturn]] void dhcp_client_main(implements_net_iface *iface,
+[[noreturn]] void dhcp_client_main(lo_interface net_iface iface,
char *self_hostname);
#endif /* _LIBDHCP_CLIENT_H_ */