LCOV - code coverage report
Current view: top level - include/net - arp.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 7 26 26.9 %
Date: 2021-04-22 12:43:58 Functions: 2 4 50.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /* linux/net/inet/arp.h */
       3             : #ifndef _ARP_H
       4             : #define _ARP_H
       5             : 
       6             : #include <linux/if_arp.h>
       7             : #include <linux/hash.h>
       8             : #include <net/neighbour.h>
       9             : 
      10             : 
      11             : extern struct neigh_table arp_tbl;
      12             : 
      13         452 : static inline u32 arp_hashfn(const void *pkey, const struct net_device *dev, u32 *hash_rnd)
      14             : {
      15         452 :         u32 key = *(const u32 *)pkey;
      16         452 :         u32 val = key ^ hash32_ptr(dev);
      17             : 
      18         452 :         return val * hash_rnd[0];
      19             : }
      20             : 
      21             : #ifdef CONFIG_INET
      22         446 : static inline struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key)
      23             : {
      24         446 :         if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
      25           0 :                 key = INADDR_ANY;
      26             : 
      27         446 :         return ___neigh_lookup_noref(&arp_tbl, neigh_key_eq32, arp_hashfn, &key, dev);
      28             : }
      29             : #else
      30             : static inline
      31             : struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key)
      32             : {
      33             :         return NULL;
      34             : }
      35             : #endif
      36             : 
      37           0 : static inline struct neighbour *__ipv4_neigh_lookup(struct net_device *dev, u32 key)
      38             : {
      39           0 :         struct neighbour *n;
      40             : 
      41           0 :         rcu_read_lock_bh();
      42           0 :         n = __ipv4_neigh_lookup_noref(dev, key);
      43           0 :         if (n && !refcount_inc_not_zero(&n->refcnt))
      44           0 :                 n = NULL;
      45           0 :         rcu_read_unlock_bh();
      46             : 
      47           0 :         return n;
      48             : }
      49             : 
      50           0 : static inline void __ipv4_confirm_neigh(struct net_device *dev, u32 key)
      51             : {
      52           0 :         struct neighbour *n;
      53             : 
      54           0 :         rcu_read_lock_bh();
      55           0 :         n = __ipv4_neigh_lookup_noref(dev, key);
      56           0 :         if (n) {
      57           0 :                 unsigned long now = jiffies;
      58             : 
      59             :                 /* avoid dirtying neighbour */
      60           0 :                 if (READ_ONCE(n->confirmed) != now)
      61           0 :                         WRITE_ONCE(n->confirmed, now);
      62             :         }
      63           0 :         rcu_read_unlock_bh();
      64           0 : }
      65             : 
      66             : void arp_init(void);
      67             : int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg);
      68             : void arp_send(int type, int ptype, __be32 dest_ip,
      69             :               struct net_device *dev, __be32 src_ip,
      70             :               const unsigned char *dest_hw,
      71             :               const unsigned char *src_hw, const unsigned char *th);
      72             : int arp_mc_map(__be32 addr, u8 *haddr, struct net_device *dev, int dir);
      73             : void arp_ifdown(struct net_device *dev);
      74             : 
      75             : struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip,
      76             :                            struct net_device *dev, __be32 src_ip,
      77             :                            const unsigned char *dest_hw,
      78             :                            const unsigned char *src_hw,
      79             :                            const unsigned char *target_hw);
      80             : void arp_xmit(struct sk_buff *skb);
      81             : 
      82             : #endif  /* _ARP_H */

Generated by: LCOV version 1.14