From: Yu Watanabe Date: Mon, 27 Apr 2026 05:39:26 +0000 (+0900) Subject: test-dhcp-client: add test case for BOOTP client mode X-Git-Tag: v261-rc1~131^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7df92102833f24a4428a223d6cdc77c804bb98d1;p=thirdparty%2Fsystemd.git test-dhcp-client: add test case for BOOTP client mode --- diff --git a/src/libsystemd-network/test-dhcp-client.c b/src/libsystemd-network/test-dhcp-client.c index e9ff0d95566..3adb201459e 100644 --- a/src/libsystemd-network/test-dhcp-client.c +++ b/src/libsystemd-network/test-dhcp-client.c @@ -804,6 +804,62 @@ TEST(init_reboot) { ASSERT_OK(sd_event_loop(sd_dhcp_client_get_event(client))); } +static int bootp_io_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) { + sd_dhcp_client *client = ASSERT_PTR(userdata); + static unsigned count = 0; + + count++; + log_debug("%s: count=%u", __func__, count); + + switch (count) { + case 1: { + _cleanup_(sd_dhcp_message_unrefp) sd_dhcp_message *request = NULL; + receive_message(fd, /* raw= */ true, /* check_xid= */ true, client, &request); + + verify_header(request); + ASSERT_TRUE(tlv_isempty(&request->options)); + + _cleanup_(sd_dhcp_message_unrefp) sd_dhcp_message *reply = NULL; + create_reply(client, request, DHCP_ACK, &reply); + + send_message(fd, /* raw= */ true, client, reply); + break; + } + default: + assert_not_reached(); + } + + return 0; +} + +static int bootp_client_handler(sd_dhcp_client *client, int event, void *userdata) { + sd_event *e = ASSERT_PTR(userdata); + static unsigned count = 0; + + count++; + log_debug("%s: count=%u, event=%i", __func__, count, event); + + switch (count) { + case 1: + ASSERT_EQ(event, SD_DHCP_CLIENT_EVENT_IP_ACQUIRE); + verify_reply(client, DHCP_STATE_BOUND); + ASSERT_OK(sd_event_exit(e, 0)); + break; + default: + assert_not_reached(); + } + + return 0; +} + +TEST(bootp) { + _cleanup_(sd_dhcp_client_unrefp) sd_dhcp_client *client = NULL; + setup(bootp_io_handler, bootp_client_handler, &client); + ASSERT_OK(sd_dhcp_client_set_bootp(client, true)); + ASSERT_OK(sd_dhcp_client_start(client)); + ASSERT_OK(sd_event_loop(sd_dhcp_client_get_event(client))); +} + static int intro(void) { ASSERT_OK_ERRNO(setenv("SYSTEMD_NETWORK_TEST_MODE", "1", /* overwrite= */ true)); return 0;