From 025f6d09b9b5745ccb29621d93e0ed487d014ac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wiesner=20Andr=C3=A1s?= Date: Fri, 24 Feb 2023 11:29:32 +0100 Subject: [PATCH] DHCP processing semaphore added --- prefab/packet_parsers/dhcp.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/prefab/packet_parsers/dhcp.c b/prefab/packet_parsers/dhcp.c index 530b76a..eade4d1 100644 --- a/prefab/packet_parsers/dhcp.c +++ b/prefab/packet_parsers/dhcp.c @@ -16,6 +16,7 @@ static struct { cbd desc; uint32_t tranId; EthInterface *intf; + ETHLIB_OS_SEM_TYPE procSem; } s; static const uint8_t DHCP_MAGIC_COOKIE[] = {99, 130, 83, 99}; @@ -248,6 +249,8 @@ void dhcp_request(ip4_addr reqAddr, ip4_addr dhcpServerAddr) { } static void dhcp_process(DhcpProps *props, DhcpOption *opts) { + ETHLIB_OS_SEM_WAIT(&s.procSem); // LOCK! + switch (s.state) { case DHCP_INIT: dhcp_discover(); // send discover message @@ -309,6 +312,8 @@ static void dhcp_process(DhcpProps *props, DhcpOption *opts) { default: break; } + + ETHLIB_OS_SEM_POST(&s.procSem); // RELEASE! } static int dhcp_resp_cb(const Pckt *pckt, PcktSieveLayerTag tag) { @@ -329,6 +334,8 @@ void dhcp_start() { } void dhcp_initiate(EthInterface *intf) { + ETHLIB_OS_SEM_CREATE(&s.procSem); + ETHLIB_OS_SEM_POST(&s.procSem); s.state = DHCP_INIT; s.buf = dynmem_alloc(DHCP_MIN_PACKET_SIZE); s.desc = udp_new_connblock(intf, IPv4_ANY_ADDR, DHCP_CLIENT_PORT, dhcp_resp_cb);