Line data Source code
1 1 : /** @file 2 : * @brief NET_MGMT socket definitions. 3 : * 4 : * Definitions for NET_MGMT socket support. 5 : */ 6 : 7 : /* 8 : * Copyright (c) 2019 Intel Corporation 9 : * 10 : * SPDX-License-Identifier: Apache-2.0 11 : */ 12 : 13 : #ifndef ZEPHYR_INCLUDE_NET_SOCKET_NET_MGMT_H_ 14 : #define ZEPHYR_INCLUDE_NET_SOCKET_NET_MGMT_H_ 15 : 16 : #include <zephyr/types.h> 17 : #include <zephyr/net/net_ip.h> 18 : #include <zephyr/net/net_if.h> 19 : #include <zephyr/net/net_mgmt.h> 20 : 21 : #ifdef __cplusplus 22 : extern "C" { 23 : #endif 24 : 25 : /** 26 : * @brief Socket NET_MGMT library 27 : * @defgroup socket_net_mgmt Socket NET_MGMT library 28 : * @since 2.0 29 : * @version 0.1.0 30 : * @ingroup networking 31 : * @{ 32 : */ 33 : 34 : /** @cond INTERNAL_HIDDEN */ 35 : 36 : /* Protocols of the protocol family PF_NET_MGMT */ 37 : #define NET_MGMT_EVENT_PROTO 0x01 38 : 39 : /* Socket NET_MGMT options */ 40 : #define SOL_NET_MGMT_BASE 100 41 : #define SOL_NET_MGMT_RAW (SOL_NET_MGMT_BASE + 1) 42 : 43 : /** @endcond */ 44 : 45 : /** 46 : * struct sockaddr_nm - The sockaddr structure for NET_MGMT sockets 47 : * 48 : * Similar concepts are used as in Linux AF_NETLINK. The NETLINK name is not 49 : * used in order to avoid confusion between Zephyr and Linux as the 50 : * implementations are different. 51 : * 52 : * The socket domain (address family) is AF_NET_MGMT, and the type of socket 53 : * is either SOCK_RAW or SOCK_DGRAM, because this is a datagram-oriented 54 : * service. 55 : * 56 : * The protocol (protocol type) selects for which feature the socket is used. 57 : * 58 : * When used with bind(), the nm_pid field of the sockaddr_nm can be 59 : * filled with the calling thread' own id. The nm_pid serves here as the local 60 : * address of this net_mgmt socket. The application is responsible for picking 61 : * a unique integer value to fill in nm_pid. 62 : */ 63 1 : struct sockaddr_nm { 64 : /** AF_NET_MGMT address family. */ 65 1 : sa_family_t nm_family; 66 : 67 : /** Network interface related to this address */ 68 1 : int nm_ifindex; 69 : 70 : /** Thread id or similar that is used to separate the different 71 : * sockets. Application can decide how the pid is constructed. 72 : */ 73 1 : uintptr_t nm_pid; 74 : 75 : /** net_mgmt mask */ 76 1 : uint32_t nm_mask; 77 : }; 78 : 79 : 80 : /** 81 : * Each network management message is prefixed with this header. 82 : */ 83 1 : struct net_mgmt_msghdr { 84 : /** Network management version */ 85 1 : uint32_t nm_msg_version; 86 : 87 : /** Length of the data */ 88 1 : uint32_t nm_msg_len; 89 : 90 : /** The actual message data follows */ 91 1 : uint8_t nm_msg[]; 92 : }; 93 : 94 : /** 95 : * Version of the message is placed to the header. Currently we have 96 : * following versions. 97 : * 98 : * Network management message versions: 99 : * 100 : * 0x0001 : The net_mgmt event info message follows directly 101 : * after the header. 102 : */ 103 1 : #define NET_MGMT_SOCKET_VERSION_1 0x0001 104 : 105 : /** 106 : * @} 107 : */ 108 : 109 : #ifdef __cplusplus 110 : } 111 : #endif 112 : 113 : #endif /* ZEPHYR_INCLUDE_NET_SOCKET_NET_MGMT_H_ */