Skip to content

Commit d237729

Browse files
committed
net: handle dhcp properly
1 parent 5f63a57 commit d237729

File tree

3 files changed

+7
-24
lines changed

3 files changed

+7
-24
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#include "SocketHelpers.h"
22

33
struct net_mgmt_event_callback NetworkInterface::mgmt_cb;
4-
struct net_dhcpv4_option_callback NetworkInterface::dhcp_cb;
4+
struct net_dhcpv4_option_callback NetworkInterface::dhcp_cb;

libraries/SocketWrapper/SocketHelpers.h

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include "zephyr/net/dhcpv4.h"
4+
#include <cstddef>
45
#include <zephyr/kernel.h>
56
#include <zephyr/linker/sections.h>
67
#include <errno.h>
@@ -38,18 +39,7 @@ class NetworkInterface {
3839
static struct net_mgmt_event_callback mgmt_cb;
3940
static struct net_dhcpv4_option_callback dhcp_cb;
4041

41-
static void link_handler(struct net_mgmt_event_callback *cb,
42-
uint32_t mgmt_event,
43-
struct net_if *iface)
44-
{
45-
if (mgmt_event == NET_EVENT_IF_UP) {
46-
//printk("Interface %p is up\n", iface);
47-
} else {
48-
//printk("Interface %p is down\n", iface);
49-
}
50-
}
51-
52-
static void addr_handler(struct net_mgmt_event_callback *cb,
42+
static void event_handler(struct net_mgmt_event_callback *cb,
5343
uint32_t mgmt_event,
5444
struct net_if *iface)
5545
{
@@ -99,10 +89,7 @@ class NetworkInterface {
9989

10090
int dhcp()
10191
{
102-
net_mgmt_init_event_callback(&mgmt_cb, addr_handler, NET_EVENT_IPV4_ADDR_ADD);
103-
net_mgmt_add_event_callback(&mgmt_cb);
104-
105-
net_mgmt_init_event_callback(&mgmt_cb, link_handler, NET_EVENT_IF_UP | NET_EVENT_IF_DOWN);
92+
net_mgmt_init_event_callback(&mgmt_cb, event_handler, NET_EVENT_IPV4_ADDR_ADD | NET_EVENT_IF_UP | NET_EVENT_IF_DOWN);
10693
net_mgmt_add_event_callback(&mgmt_cb);
10794

10895
net_dhcpv4_init_option_callback(&dhcp_cb, option_handler,
@@ -117,8 +104,7 @@ class NetworkInterface {
117104
}
118105

119106
public:
120-
NetworkInterface(int iface_index) : iface_index(iface_index) {
121-
}
107+
NetworkInterface(int iface_index) : iface_index(iface_index) {}
122108
~NetworkInterface() {}
123109
IPAddress localIP() {
124110
return IPAddress(net_if_get_by_index(iface_index)->config.ip.ipv4->unicast[0].ipv4.address.in_addr.s_addr);
@@ -140,11 +126,7 @@ class NetworkInterface {
140126

141127
bool begin() {
142128
dhcp();
143-
// TODO: replace me with semaphore on the callback
144-
while (net_if_get_by_index(iface_index)->config.ip.ipv4->unicast[0].ipv4.address.in_addr.s_addr == 0) {
145-
k_sleep(K_MSEC(100));
146-
}
147-
return 0;
129+
net_mgmt_event_wait_on_iface(net_if_get_by_index(iface_index), NET_EVENT_IPV4_ADDR_ADD, NULL, NULL, NULL, K_FOREVER); return 0;
148130
}
149131

150132
// Manual functions

loader/llext_exports.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ FORCE_EXPORT_SYM(net_dhcpv4_add_option_callback);
6565

6666
#if defined(CONFIG_NET_MGMT_EVENT)
6767
FORCE_EXPORT_SYM(net_mgmt_add_event_callback);
68+
FORCE_EXPORT_SYM(net_mgmt_event_wait_on_iface);
6869
#endif
6970

7071
#if defined(CONFIG_BT)

0 commit comments

Comments
 (0)