LCOV - code coverage report
Current view: top level - net/netlink - af_netlink.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 2 2 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _AF_NETLINK_H
       3             : #define _AF_NETLINK_H
       4             : 
       5             : #include <linux/rhashtable.h>
       6             : #include <linux/atomic.h>
       7             : #include <linux/workqueue.h>
       8             : #include <net/sock.h>
       9             : 
      10             : /* flags */
      11             : #define NETLINK_F_KERNEL_SOCKET         0x1
      12             : #define NETLINK_F_RECV_PKTINFO          0x2
      13             : #define NETLINK_F_BROADCAST_SEND_ERROR  0x4
      14             : #define NETLINK_F_RECV_NO_ENOBUFS       0x8
      15             : #define NETLINK_F_LISTEN_ALL_NSID       0x10
      16             : #define NETLINK_F_CAP_ACK               0x20
      17             : #define NETLINK_F_EXT_ACK               0x40
      18             : #define NETLINK_F_STRICT_CHK            0x80
      19             : 
      20             : #define NLGRPSZ(x)      (ALIGN(x, sizeof(unsigned long) * 8) / 8)
      21             : #define NLGRPLONGS(x)   (NLGRPSZ(x)/sizeof(unsigned long))
      22             : 
      23             : struct netlink_sock {
      24             :         /* struct sock has to be the first member of netlink_sock */
      25             :         struct sock             sk;
      26             :         u32                     portid;
      27             :         u32                     dst_portid;
      28             :         u32                     dst_group;
      29             :         u32                     flags;
      30             :         u32                     subscriptions;
      31             :         u32                     ngroups;
      32             :         unsigned long           *groups;
      33             :         unsigned long           state;
      34             :         size_t                  max_recvmsg_len;
      35             :         wait_queue_head_t       wait;
      36             :         bool                    bound;
      37             :         bool                    cb_running;
      38             :         int                     dump_done_errno;
      39             :         struct netlink_callback cb;
      40             :         struct mutex            *cb_mutex;
      41             :         struct mutex            cb_def_mutex;
      42             :         void                    (*netlink_rcv)(struct sk_buff *skb);
      43             :         int                     (*netlink_bind)(struct net *net, int group);
      44             :         void                    (*netlink_unbind)(struct net *net, int group);
      45             :         struct module           *module;
      46             : 
      47             :         struct rhash_head       node;
      48             :         struct rcu_head         rcu;
      49             :         struct work_struct      work;
      50             : };
      51             : 
      52        5450 : static inline struct netlink_sock *nlk_sk(struct sock *sk)
      53             : {
      54        5133 :         return container_of(sk, struct netlink_sock, sk);
      55             : }
      56             : 
      57             : struct netlink_table {
      58             :         struct rhashtable       hash;
      59             :         struct hlist_head       mc_list;
      60             :         struct listeners __rcu  *listeners;
      61             :         unsigned int            flags;
      62             :         unsigned int            groups;
      63             :         struct mutex            *cb_mutex;
      64             :         struct module           *module;
      65             :         int                     (*bind)(struct net *net, int group);
      66             :         void                    (*unbind)(struct net *net, int group);
      67             :         bool                    (*compare)(struct net *net, struct sock *sock);
      68             :         int                     registered;
      69             : };
      70             : 
      71             : extern struct netlink_table *nl_table;
      72             : extern rwlock_t nl_table_lock;
      73             : 
      74             : #endif

Generated by: LCOV version 1.14