Skip to content

Commit b2dcaa8

Browse files
jukkarkartben
authored andcommitted
net: shell: events: Add Ethernet L2 support
Print Ethernet carrier on/off and VLAN tag enabled/disabled status when monitoring events. Signed-off-by: Jukka Rissanen <[email protected]>
1 parent 85bdab0 commit b2dcaa8

File tree

1 file changed

+70
-7
lines changed

1 file changed

+70
-7
lines changed

subsys/net/lib/shell/events.c

Lines changed: 70 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ LOG_MODULE_DECLARE(net_shell);
1313
#include <zephyr/net/net_mgmt.h>
1414
#include <zephyr/net/net_event.h>
1515
#include <zephyr/net/coap_mgmt.h>
16+
#include <zephyr/net/ethernet_mgmt.h>
1617

1718
#include "net_shell_private.h"
1819

@@ -24,6 +25,11 @@ LOG_MODULE_DECLARE(net_shell);
2425
#define MONITOR_L3_IPV6_MASK (_NET_EVENT_IPV6_BASE | NET_MGMT_COMMAND_MASK)
2526
#define MONITOR_L4_MASK (_NET_EVENT_L4_BASE | NET_MGMT_COMMAND_MASK)
2627

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+
2733
static bool net_event_monitoring;
2834
static bool net_event_shutting_down;
2935
static struct net_mgmt_event_callback l2_cb;
@@ -65,20 +71,66 @@ static void event_handler(struct net_mgmt_event_callback *cb,
6571
}
6672
}
6773

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)
6977
{
70-
static const char *desc = "<unknown event>";
78+
static const char *desc_unknown = "<unknown event>";
79+
char *info = NULL;
7180

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) {
7389
case NET_EVENT_IF_DOWN:
74-
desc = "down";
90+
*desc = "interface";
91+
*desc2 = "down";
7592
break;
7693
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
78102
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+
}
79131
}
80132

81-
return desc;
133+
return info;
82134
}
83135

84136
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)
386438
MONITOR_L4_MASK);
387439
net_mgmt_add_event_callback(&l4_cb);
388440

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+
389447
while (net_event_shutting_down == false) {
390448
const char *layer_str = "<unknown layer>";
391449
const char *desc = "", *desc2 = "";
@@ -402,7 +460,8 @@ static void event_mon_handler(const struct shell *sh, void *p2, void *p3)
402460
layer = NET_MGMT_GET_LAYER(msg.event);
403461
if (layer == NET_MGMT_LAYER_L2) {
404462
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);
406465
} else if (layer == NET_MGMT_LAYER_L3) {
407466
layer_str = "L3";
408467
info = get_l3_desc(&msg, &desc, &desc2,
@@ -423,6 +482,10 @@ static void event_mon_handler(const struct shell *sh, void *p2, void *p3)
423482
net_mgmt_del_event_callback(&l3_ipv6_cb);
424483
net_mgmt_del_event_callback(&l4_cb);
425484

485+
#if defined(CONFIG_NET_L2_ETHERNET_MGMT)
486+
net_mgmt_del_event_callback(&l2_ethernet_cb);
487+
#endif
488+
426489
k_msgq_purge(&event_mon_msgq);
427490

428491
net_event_monitoring = false;

0 commit comments

Comments
 (0)