LCOV - code coverage report
Current view: top level - include/net - sock_reuseport.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 8 11 72.7 %
Date: 2021-04-22 12:43:58 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _SOCK_REUSEPORT_H
       3             : #define _SOCK_REUSEPORT_H
       4             : 
       5             : #include <linux/filter.h>
       6             : #include <linux/skbuff.h>
       7             : #include <linux/types.h>
       8             : #include <linux/spinlock.h>
       9             : #include <net/sock.h>
      10             : 
      11             : extern spinlock_t reuseport_lock;
      12             : 
      13             : struct sock_reuseport {
      14             :         struct rcu_head         rcu;
      15             : 
      16             :         u16                     max_socks;      /* length of socks */
      17             :         u16                     num_socks;      /* elements in socks */
      18             :         /* The last synq overflow event timestamp of this
      19             :          * reuse->socks[] group.
      20             :          */
      21             :         unsigned int            synq_overflow_ts;
      22             :         /* ID stays the same even after the size of socks[] grows. */
      23             :         unsigned int            reuseport_id;
      24             :         unsigned int            bind_inany:1;
      25             :         unsigned int            has_conns:1;
      26             :         struct bpf_prog __rcu   *prog;          /* optional BPF sock selector */
      27             :         struct sock             *socks[];       /* array of sock pointers */
      28             : };
      29             : 
      30             : extern int reuseport_alloc(struct sock *sk, bool bind_inany);
      31             : extern int reuseport_add_sock(struct sock *sk, struct sock *sk2,
      32             :                               bool bind_inany);
      33             : extern void reuseport_detach_sock(struct sock *sk);
      34             : extern struct sock *reuseport_select_sock(struct sock *sk,
      35             :                                           u32 hash,
      36             :                                           struct sk_buff *skb,
      37             :                                           int hdr_len);
      38             : extern int reuseport_attach_prog(struct sock *sk, struct bpf_prog *prog);
      39             : extern int reuseport_detach_prog(struct sock *sk);
      40             : 
      41          13 : static inline bool reuseport_has_conns(struct sock *sk, bool set)
      42             : {
      43          13 :         struct sock_reuseport *reuse;
      44          13 :         bool ret = false;
      45             : 
      46          13 :         rcu_read_lock();
      47          13 :         reuse = rcu_dereference(sk->sk_reuseport_cb);
      48          13 :         if (reuse) {
      49           0 :                 if (set)
      50           0 :                         reuse->has_conns = 1;
      51           0 :                 ret = reuse->has_conns;
      52             :         }
      53          13 :         rcu_read_unlock();
      54             : 
      55          13 :         return ret;
      56             : }
      57             : 
      58             : #endif  /* _SOCK_REUSEPORT_H */

Generated by: LCOV version 1.14