Skip to content

Commit 664e66c

Browse files
jukkarrlubos
authored andcommitted
[nrf fromtree] 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 <[email protected]> (cherry picked from commit 2ed2232) Signed-off-by: Robert Lubos <[email protected]>
1 parent 8b3dda7 commit 664e66c

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;
@@ -502,7 +515,7 @@ static void test_ethernet_set_qav(void)
502515
params.qav_param.enabled = true;
503516

504517
ret = zsock_setsockopt(fd, SOL_NET_MGMT_RAW,
505-
NET_REQUEST_ETHERNET_SET_QAV_PARAM,
518+
SO_NET_MGMT_ETHERNET_SET_QAV_PARAM,
506519
&params, sizeof(params));
507520
zassert_equal(ret, 0, "Cannot set Qav parameters");
508521
}
@@ -529,7 +542,7 @@ static void test_ethernet_get_qav(void)
529542
params.qav_param.type = ETHERNET_QAV_PARAM_TYPE_STATUS;
530543

531544
ret = zsock_getsockopt(fd, SOL_NET_MGMT_RAW,
532-
NET_REQUEST_ETHERNET_GET_QAV_PARAM,
545+
SO_NET_MGMT_ETHERNET_GET_QAV_PARAM,
533546
&params, &optlen);
534547
zassert_equal(ret, 0, "Cannot get Qav parameters (%d)", ret);
535548
zassert_equal(optlen, sizeof(params), "Invalid optlen (%d)", optlen);
@@ -556,7 +569,7 @@ static void test_ethernet_get_unknown_option(void)
556569
memset(&params, 0, sizeof(params));
557570

558571
ret = zsock_getsockopt(fd, SOL_NET_MGMT_RAW,
559-
NET_REQUEST_ETHERNET_GET_PRIORITY_QUEUES_NUM,
572+
SO_NET_MGMT_ETHERNET_GET_PRIORITY_QUEUES_NUM,
560573
&params, &optlen);
561574
zassert_equal(ret, -1, "Could get prio queue parameters (%d)", errno);
562575
zassert_equal(errno, EINVAL, "prio queue get parameters");
@@ -581,7 +594,7 @@ static void test_ethernet_set_unknown_option(void)
581594
memset(&params, 0, sizeof(params));
582595

583596
ret = zsock_setsockopt(fd, SOL_NET_MGMT_RAW,
584-
NET_REQUEST_ETHERNET_SET_MAC_ADDRESS,
597+
SO_NET_MGMT_ETHERNET_SET_MAC_ADDRESS,
585598
&params, optlen);
586599
zassert_equal(ret, -1, "Could set promisc_mode parameters (%d)", errno);
587600
zassert_equal(errno, EINVAL, "promisc_mode set parameters");

0 commit comments

Comments
 (0)