Skip to content

Commit 2ed2232

Browse files
jukkarkartben
authored andcommitted
net: socket: mgmt: Create proper socket options for net_mgmt sockets
We cannot use the network management event number directly as a socket option value because the management value is uint64_t and that cannot be mapped directly to 32 bit integer. So have an intermediate socket option that is mapped to actual network management request number in getsockopt() and setsockopt(). Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
1 parent 5a9a39c commit 2ed2232

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

include/zephyr/net/socket_net_mgmt.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ extern "C" {
4242

4343
/** @endcond */
4444

45+
/**
46+
* @name Socket options for NET_MGMT sockets
47+
* @{
48+
*/
49+
50+
/** Set Ethernet Qav parameters */
51+
#define SO_NET_MGMT_ETHERNET_SET_QAV_PARAM 1
52+
53+
/** Get Ethernet Qav parameters */
54+
#define SO_NET_MGMT_ETHERNET_GET_QAV_PARAM 2
55+
56+
/** @} */ /* for @name */
57+
4558
/**
4659
* struct sockaddr_nm - The sockaddr structure for NET_MGMT sockets
4760
*

subsys/net/lib/sockets/sockets_net_mgmt.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ static int znet_mgmt_getsockopt(struct net_mgmt_socket *mgmt, int level,
237237
}
238238

239239
if (IS_ENABLED(CONFIG_NET_L2_ETHERNET_MGMT)) {
240-
if (optname == NET_REQUEST_ETHERNET_GET_QAV_PARAM) {
240+
if (optname == SO_NET_MGMT_ETHERNET_GET_QAV_PARAM) {
241241
int ret;
242242

243243
ret = net_mgmt(NET_REQUEST_ETHERNET_GET_QAV_PARAM,
@@ -274,7 +274,7 @@ static int znet_mgmt_setsockopt(struct net_mgmt_socket *mgmt, int level,
274274
}
275275

276276
if (IS_ENABLED(CONFIG_NET_L2_ETHERNET_MGMT)) {
277-
if (optname == NET_REQUEST_ETHERNET_SET_QAV_PARAM) {
277+
if (optname == SO_NET_MGMT_ETHERNET_SET_QAV_PARAM) {
278278
int ret;
279279

280280
ret = net_mgmt(NET_REQUEST_ETHERNET_SET_QAV_PARAM,

tests/net/socket/net_mgmt/src/main.c

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,19 @@ LOG_MODULE_REGISTER(net_test, CONFIG_NET_SOCKETS_LOG_LEVEL);
2020
#define STACK_SIZE 1024
2121
#define THREAD_PRIORITY K_PRIO_COOP(8)
2222

23+
/* Use a base value for socket options that are not implemented.
24+
* This is used to check if the socket option is implemented or not.
25+
*/
26+
#define NOT_IMPLEMENTED_SOCKET_OPTION_BASE (INT32_MAX - 1000)
27+
28+
#if !defined(SO_NET_MGMT_ETHERNET_GET_PRIORITY_QUEUES_NUM)
29+
#define SO_NET_MGMT_ETHERNET_GET_PRIORITY_QUEUES_NUM (NOT_IMPLEMENTED_SOCKET_OPTION_BASE + 1)
30+
#endif /* !defined(SO_NET_MGMT_ETHERNET_GET_PRIORITY_QUEUES_NUM) */
31+
32+
#if !defined(SO_NET_MGMT_ETHERNET_SET_MAC_ADDRESS)
33+
#define SO_NET_MGMT_ETHERNET_SET_MAC_ADDRESS (NOT_IMPLEMENTED_SOCKET_OPTION_BASE + 2)
34+
#endif /* !defined(SO_NET_MGMT_ETHERNET_SET_MAC_ADDRESS) */
35+
2336
static struct net_if *default_iface;
2437

2538
static ZTEST_BMEM int fd;
@@ -483,7 +496,7 @@ static void test_ethernet_set_qav(void)
483496
params.qav_param.enabled = true;
484497

485498
ret = zsock_setsockopt(fd, SOL_NET_MGMT_RAW,
486-
NET_REQUEST_ETHERNET_SET_QAV_PARAM,
499+
SO_NET_MGMT_ETHERNET_SET_QAV_PARAM,
487500
&params, sizeof(params));
488501
zassert_equal(ret, 0, "Cannot set Qav parameters");
489502
}
@@ -510,7 +523,7 @@ static void test_ethernet_get_qav(void)
510523
params.qav_param.type = ETHERNET_QAV_PARAM_TYPE_STATUS;
511524

512525
ret = zsock_getsockopt(fd, SOL_NET_MGMT_RAW,
513-
NET_REQUEST_ETHERNET_GET_QAV_PARAM,
526+
SO_NET_MGMT_ETHERNET_GET_QAV_PARAM,
514527
&params, &optlen);
515528
zassert_equal(ret, 0, "Cannot get Qav parameters (%d)", ret);
516529
zassert_equal(optlen, sizeof(params), "Invalid optlen (%d)", optlen);
@@ -537,7 +550,7 @@ static void test_ethernet_get_unknown_option(void)
537550
memset(&params, 0, sizeof(params));
538551

539552
ret = zsock_getsockopt(fd, SOL_NET_MGMT_RAW,
540-
NET_REQUEST_ETHERNET_GET_PRIORITY_QUEUES_NUM,
553+
SO_NET_MGMT_ETHERNET_GET_PRIORITY_QUEUES_NUM,
541554
&params, &optlen);
542555
zassert_equal(ret, -1, "Could get prio queue parameters (%d)", errno);
543556
zassert_equal(errno, EINVAL, "prio queue get parameters");
@@ -562,7 +575,7 @@ static void test_ethernet_set_unknown_option(void)
562575
memset(&params, 0, sizeof(params));
563576

564577
ret = zsock_setsockopt(fd, SOL_NET_MGMT_RAW,
565-
NET_REQUEST_ETHERNET_SET_MAC_ADDRESS,
578+
SO_NET_MGMT_ETHERNET_SET_MAC_ADDRESS,
566579
&params, optlen);
567580
zassert_equal(ret, -1, "Could set promisc_mode parameters (%d)", errno);
568581
zassert_equal(errno, EINVAL, "promisc_mode set parameters");

0 commit comments

Comments
 (0)