diff options
| author | xengineering <me@xengineering.eu> | 2025-03-21 22:15:46 +0100 | 
|---|---|---|
| committer | xengineering <me@xengineering.eu> | 2025-03-21 22:15:46 +0100 | 
| commit | fbed749cd316f1c9fe8dbe8a564b41f93cf0ac1f (patch) | |
| tree | a6181828fd8e1601e58fef319547e1474dd24d82 | |
| parent | fcbd6ac3415d4a122d21b2e379ccf170620f45da (diff) | |
| download | iot-contact-fbed749cd316f1c9fe8dbe8a564b41f93cf0ac1f.tar iot-contact-fbed749cd316f1c9fe8dbe8a564b41f93cf0ac1f.tar.zst iot-contact-fbed749cd316f1c9fe8dbe8a564b41f93cf0ac1f.zip  | |
fw: Use SLAAC for network configuration
| -rw-r--r-- | fw/prj.conf | 8 | ||||
| -rw-r--r-- | fw/src/syslog.c | 56 | 
2 files changed, 54 insertions, 10 deletions
diff --git a/fw/prj.conf b/fw/prj.conf index 9ac1b51..a046a89 100644 --- a/fw/prj.conf +++ b/fw/prj.conf @@ -8,14 +8,10 @@ CONFIG_SHELL_PROMPT_UART="[iot-contact] "  CONFIG_NETWORKING=y  CONFIG_NET_SHELL=y  CONFIG_NET_SOCKETS=y +CONFIG_NET_CONNECTION_MANAGER=y  CONFIG_LOG=y  CONFIG_LOG_BACKEND_NET=y  CONFIG_LOG_BACKEND_NET_SERVER="[2001:db8::2]:514" +CONFIG_LOG_BACKEND_NET_AUTOSTART=n  CONFIG_LOG_MODE_DEFERRED=y - -# static IP address configuration is currently required for successful syslog -CONFIG_NET_CONFIG_SETTINGS=y -CONFIG_NET_CONFIG_NEED_IPV6=y -CONFIG_NET_CONFIG_MY_IPV6_ADDR="2001:db8::1" -CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=3 diff --git a/fw/src/syslog.c b/fw/src/syslog.c index fb15ab8..3291c0e 100644 --- a/fw/src/syslog.c +++ b/fw/src/syslog.c @@ -4,20 +4,68 @@   * obtain one at https://mozilla.org/MPL/2.0/.   */ +#include <stdbool.h> +  #include <zephyr/init.h>  #include <zephyr/kernel.h>  #include <zephyr/logging/log.h> +#include <zephyr/logging/log_backend.h> +#include <zephyr/logging/log_backend_net.h> +#include <zephyr/logging/log_ctrl.h> +#include <zephyr/logging/log_core.h> +#include <zephyr/net/conn_mgr_connectivity.h>  LOG_MODULE_REGISTER(syslog); -int init_syslog() +#define L4_EVENT_MASK (NET_EVENT_L4_CONNECTED | NET_EVENT_L4_DISCONNECTED) + +struct net_mgmt_event_callback l4_cb; +static K_SEM_DEFINE(network_connected, 0, 1); + +void l4_event_handler( +	struct net_mgmt_event_callback *cb, +	uint32_t event, +	struct net_if *iface)  { -	for(int i=0; i<5; i++) { -		LOG_INF("Informational message number %d", i); -		k_msleep(1000); +	switch (event) { +	case NET_EVENT_L4_CONNECTED: +		LOG_INF("Network connected"); +		k_sem_give(&network_connected); +		break; +	case NET_EVENT_L4_DISCONNECTED: +		LOG_INF("Network disconnected"); +		break; +	default: +		break;  	} +} + +int init_network_monitoring(void) +{ +	net_mgmt_init_event_callback(&l4_cb, l4_event_handler, L4_EVENT_MASK); +	net_mgmt_add_event_callback(&l4_cb);  	return 0;  } +SYS_INIT(init_network_monitoring, APPLICATION, 0); +int init_syslog(void) +{ +	LOG_INF("Waiting for network ..."); +	k_sem_take(&network_connected, K_FOREVER); + +	LOG_INF("Enabling syslog backend"); +	const struct log_backend *backend = log_backend_net_get(); +	if (log_backend_is_active(backend) == false) { +		/* flush log messages to ensure first syslog message is reproducible */ +		while (log_process()); +		log_backend_init(backend); +		log_backend_enable(backend, backend->cb->ctx, CONFIG_LOG_MAX_LEVEL); +		LOG_INF("Syslog backend enabled"); +	} else { +		LOG_INF("Syslog backend was already enabled"); +	} + +	return 0; +}  SYS_INIT(init_syslog, APPLICATION, 50);  | 
