@@ -13,6 +13,7 @@ LOG_MODULE_DECLARE(net_shell);
13
13
#include <zephyr/net/net_mgmt.h>
14
14
#include <zephyr/net/net_event.h>
15
15
#include <zephyr/net/coap_mgmt.h>
16
+ #include <zephyr/net/ethernet_mgmt.h>
16
17
17
18
#include "net_shell_private.h"
18
19
@@ -24,6 +25,11 @@ LOG_MODULE_DECLARE(net_shell);
24
25
#define MONITOR_L3_IPV6_MASK (_NET_EVENT_IPV6_BASE | NET_MGMT_COMMAND_MASK)
25
26
#define MONITOR_L4_MASK (_NET_EVENT_L4_BASE | NET_MGMT_COMMAND_MASK)
26
27
28
+ #if defined(CONFIG_NET_L2_ETHERNET_MGMT )
29
+ #define MONITOR_L2_ETHERNET_MASK (_NET_ETHERNET_BASE)
30
+ static struct net_mgmt_event_callback l2_ethernet_cb ;
31
+ #endif
32
+
27
33
static bool net_event_monitoring ;
28
34
static bool net_event_shutting_down ;
29
35
static struct net_mgmt_event_callback l2_cb ;
@@ -65,20 +71,66 @@ static void event_handler(struct net_mgmt_event_callback *cb,
65
71
}
66
72
}
67
73
68
- static const char * get_l2_desc (uint32_t event )
74
+ static char * get_l2_desc (struct event_msg * msg ,
75
+ const char * * desc , const char * * desc2 ,
76
+ char * extra_info , size_t extra_info_len )
69
77
{
70
- static const char * desc = "<unknown event>" ;
78
+ static const char * desc_unknown = "<unknown event>" ;
79
+ char * info = NULL ;
71
80
72
- switch (event ) {
81
+ #if defined(CONFIG_NET_L2_ETHERNET_MGMT )
82
+ #define MAX_VLAN_TAG_INFO_STR_LEN sizeof("tag xxxx disabled")
83
+ static char vlan_buf [MAX_VLAN_TAG_INFO_STR_LEN + 1 ];
84
+ #endif
85
+
86
+ * desc = desc_unknown ;
87
+
88
+ switch (msg -> event ) {
73
89
case NET_EVENT_IF_DOWN :
74
- desc = "down" ;
90
+ * desc = "interface" ;
91
+ * desc2 = "down" ;
75
92
break ;
76
93
case NET_EVENT_IF_UP :
77
- desc = "up" ;
94
+ * desc = "interface" ;
95
+ * desc2 = "up" ;
96
+ break ;
97
+ case NET_EVENT_ETHERNET_CARRIER_ON :
98
+ #if defined(CONFIG_NET_L2_ETHERNET_MGMT )
99
+ * desc = "Ethernet" ;
100
+ * desc2 = "carrier on" ;
101
+ #endif
78
102
break ;
103
+ case NET_EVENT_ETHERNET_CARRIER_OFF :
104
+ #if defined(CONFIG_NET_L2_ETHERNET_MGMT )
105
+ * desc = "Ethernet" ;
106
+ * desc2 = "carrier off" ;
107
+ #endif
108
+ break ;
109
+ case NET_EVENT_ETHERNET_VLAN_TAG_ENABLED : {
110
+ #if defined(CONFIG_NET_L2_ETHERNET_MGMT )
111
+ uint16_t tag = * ((uint16_t * )msg -> data );
112
+
113
+ * desc = "VLAN" ;
114
+ snprintk (vlan_buf , MAX_VLAN_TAG_INFO_STR_LEN ,
115
+ "tag %u enabled" , (uint16_t )tag );
116
+ * desc2 = vlan_buf ;
117
+ #endif
118
+ break ;
119
+ }
120
+ case NET_EVENT_ETHERNET_VLAN_TAG_DISABLED : {
121
+ #if defined(CONFIG_NET_L2_ETHERNET_MGMT )
122
+ uint16_t tag = * ((uint16_t * )msg -> data );
123
+
124
+ * desc = "VLAN" ;
125
+ snprintk (vlan_buf , MAX_VLAN_TAG_INFO_STR_LEN ,
126
+ "tag %u enabled" , (uint16_t )tag );
127
+ * desc2 = vlan_buf ;
128
+ #endif
129
+ break ;
130
+ }
79
131
}
80
132
81
- return desc ;
133
+ return info ;
82
134
}
83
135
84
136
static char * get_l3_desc (struct event_msg * msg ,
@@ -386,6 +438,12 @@ static void event_mon_handler(const struct shell *sh, void *p2, void *p3)
386
438
MONITOR_L4_MASK );
387
439
net_mgmt_add_event_callback (& l4_cb );
388
440
441
+ #if defined(CONFIG_NET_L2_ETHERNET_MGMT )
442
+ net_mgmt_init_event_callback (& l2_ethernet_cb , event_handler ,
443
+ MONITOR_L2_ETHERNET_MASK );
444
+ net_mgmt_add_event_callback (& l2_ethernet_cb );
445
+ #endif
446
+
389
447
while (net_event_shutting_down == false) {
390
448
const char * layer_str = "<unknown layer>" ;
391
449
const char * desc = "" , * desc2 = "" ;
@@ -402,7 +460,8 @@ static void event_mon_handler(const struct shell *sh, void *p2, void *p3)
402
460
layer = NET_MGMT_GET_LAYER (msg .event );
403
461
if (layer == NET_MGMT_LAYER_L2 ) {
404
462
layer_str = "L2" ;
405
- desc = get_l2_desc (msg .event );
463
+ info = get_l2_desc (& msg , & desc , & desc2 ,
464
+ extra_info , NET_IPV6_ADDR_LEN );
406
465
} else if (layer == NET_MGMT_LAYER_L3 ) {
407
466
layer_str = "L3" ;
408
467
info = get_l3_desc (& msg , & desc , & desc2 ,
@@ -423,6 +482,10 @@ static void event_mon_handler(const struct shell *sh, void *p2, void *p3)
423
482
net_mgmt_del_event_callback (& l3_ipv6_cb );
424
483
net_mgmt_del_event_callback (& l4_cb );
425
484
485
+ #if defined(CONFIG_NET_L2_ETHERNET_MGMT )
486
+ net_mgmt_del_event_callback (& l2_ethernet_cb );
487
+ #endif
488
+
426
489
k_msgq_purge (& event_mon_msgq );
427
490
428
491
net_event_monitoring = false;
0 commit comments