LCOV - code coverage report
Current view: top level - include/net - sock_reuseport.h (source / functions) Hit Total Coverage
Test: gcov_data_raspi2_real_modules_combined.info Lines: 2 4 50.0 %
Date: 2020-09-30 20:25:40 Functions: 0 0 -
Branches: 1 2 50.0 %

           Branch data     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[0];      /* 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                 :            : static inline bool reuseport_has_conns(struct sock *sk, bool set)
      42                 :            : {
      43                 :            :         struct sock_reuseport *reuse;
      44                 :            :         bool ret = false;
      45                 :            : 
      46                 :            :         rcu_read_lock();
      47                 :       1035 :         reuse = rcu_dereference(sk->sk_reuseport_cb);
      48         [ -  + ]:       1035 :         if (reuse) {
      49                 :            :                 if (set)
      50                 :          0 :                         reuse->has_conns = 1;
      51                 :          0 :                 ret = reuse->has_conns;
      52                 :            :         }
      53                 :            :         rcu_read_unlock();
      54                 :            : 
      55                 :            :         return ret;
      56                 :            : }
      57                 :            : 
      58                 :            : int reuseport_get_id(struct sock_reuseport *reuse);
      59                 :            : 
      60                 :            : #endif  /* _SOCK_REUSEPORT_H */

Generated by: LCOV version 1.14