LCOV - code coverage report
Current view: top level - zephyr/net - socket_net_mgmt.h Hit Total Coverage
Test: new.info Lines: 11 11 100.0 %
Date: 2024-12-22 00:14:23

          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_ */

Generated by: LCOV version 1.14