LCOV - code coverage report
Current view: top level - include/net - dst_ops.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 5 9 55.6 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _NET_DST_OPS_H
       3             : #define _NET_DST_OPS_H
       4             : #include <linux/types.h>
       5             : #include <linux/percpu_counter.h>
       6             : #include <linux/cache.h>
       7             : 
       8             : struct dst_entry;
       9             : struct kmem_cachep;
      10             : struct net_device;
      11             : struct sk_buff;
      12             : struct sock;
      13             : struct net;
      14             : 
      15             : struct dst_ops {
      16             :         unsigned short          family;
      17             :         unsigned int            gc_thresh;
      18             : 
      19             :         int                     (*gc)(struct dst_ops *ops);
      20             :         struct dst_entry *      (*check)(struct dst_entry *, __u32 cookie);
      21             :         unsigned int            (*default_advmss)(const struct dst_entry *);
      22             :         unsigned int            (*mtu)(const struct dst_entry *);
      23             :         u32 *                   (*cow_metrics)(struct dst_entry *, unsigned long);
      24             :         void                    (*destroy)(struct dst_entry *);
      25             :         void                    (*ifdown)(struct dst_entry *,
      26             :                                           struct net_device *dev, int how);
      27             :         struct dst_entry *      (*negative_advice)(struct dst_entry *);
      28             :         void                    (*link_failure)(struct sk_buff *);
      29             :         void                    (*update_pmtu)(struct dst_entry *dst, struct sock *sk,
      30             :                                                struct sk_buff *skb, u32 mtu,
      31             :                                                bool confirm_neigh);
      32             :         void                    (*redirect)(struct dst_entry *dst, struct sock *sk,
      33             :                                             struct sk_buff *skb);
      34             :         int                     (*local_out)(struct net *net, struct sock *sk, struct sk_buff *skb);
      35             :         struct neighbour *      (*neigh_lookup)(const struct dst_entry *dst,
      36             :                                                 struct sk_buff *skb,
      37             :                                                 const void *daddr);
      38             :         void                    (*confirm_neigh)(const struct dst_entry *dst,
      39             :                                                  const void *daddr);
      40             : 
      41             :         struct kmem_cache       *kmem_cachep;
      42             : 
      43             :         struct percpu_counter   pcpuc_entries ____cacheline_aligned_in_smp;
      44             : };
      45             : 
      46           0 : static inline int dst_entries_get_fast(struct dst_ops *dst)
      47             : {
      48           0 :         return percpu_counter_read_positive(&dst->pcpuc_entries);
      49             : }
      50             : 
      51           0 : static inline int dst_entries_get_slow(struct dst_ops *dst)
      52             : {
      53           0 :         return percpu_counter_sum_positive(&dst->pcpuc_entries);
      54             : }
      55             : 
      56             : #define DST_PERCPU_COUNTER_BATCH 32
      57          24 : static inline void dst_entries_add(struct dst_ops *dst, int val)
      58             : {
      59          24 :         percpu_counter_add_batch(&dst->pcpuc_entries, val,
      60             :                                  DST_PERCPU_COUNTER_BATCH);
      61          24 : }
      62             : 
      63           2 : static inline int dst_entries_init(struct dst_ops *dst)
      64             : {
      65           2 :         return percpu_counter_init(&dst->pcpuc_entries, 0, GFP_KERNEL);
      66             : }
      67             : 
      68             : static inline void dst_entries_destroy(struct dst_ops *dst)
      69             : {
      70             :         percpu_counter_destroy(&dst->pcpuc_entries);
      71             : }
      72             : 
      73             : #endif

Generated by: LCOV version 1.14