2005-04-17 02:20:36 +04:00
/* linux/net/inet/arp.h */
# ifndef _ARP_H
# define _ARP_H
# include <linux/if_arp.h>
2012-08-09 01:52:28 +04:00
# include <linux/hash.h>
2005-04-17 02:20:36 +04:00
# include <net/neighbour.h>
extern struct neigh_table arp_tbl ;
2015-03-04 02:10:44 +03:00
static inline u32 arp_hashfn ( const void * pkey , const struct net_device * dev , u32 * hash_rnd )
2011-07-11 12:37:28 +04:00
{
2015-03-04 02:10:44 +03:00
u32 key = * ( const u32 * ) pkey ;
2012-08-09 01:52:28 +04:00
u32 val = key ^ hash32_ptr ( dev ) ;
2011-07-11 12:37:28 +04:00
2015-03-04 02:10:44 +03:00
return val * hash_rnd [ 0 ] ;
2011-07-11 12:37:28 +04:00
}
2012-07-02 13:02:15 +04:00
static inline struct neighbour * __ipv4_neigh_lookup_noref ( struct net_device * dev , u32 key )
2011-07-12 02:44:24 +04:00
{
2015-03-04 02:10:44 +03:00
return ___neigh_lookup_noref ( & arp_tbl , neigh_key_eq32 , arp_hashfn , & key , dev ) ;
2012-07-02 13:02:15 +04:00
}
static inline struct neighbour * __ipv4_neigh_lookup ( struct net_device * dev , u32 key )
{
struct neighbour * n ;
rcu_read_lock_bh ( ) ;
n = __ipv4_neigh_lookup_noref ( dev , key ) ;
if ( n & & ! atomic_inc_not_zero ( & n - > refcnt ) )
n = NULL ;
2011-07-12 02:44:24 +04:00
rcu_read_unlock_bh ( ) ;
return n ;
}
2013-08-01 04:31:35 +04:00
void arp_init ( void ) ;
int arp_ioctl ( struct net * net , unsigned int cmd , void __user * arg ) ;
void arp_send ( int type , int ptype , __be32 dest_ip ,
struct net_device * dev , __be32 src_ip ,
const unsigned char * dest_hw ,
const unsigned char * src_hw , const unsigned char * th ) ;
int arp_mc_map ( __be32 addr , u8 * haddr , struct net_device * dev , int dir ) ;
void arp_ifdown ( struct net_device * dev ) ;
2005-04-17 02:20:36 +04:00
2013-08-01 04:31:35 +04:00
struct sk_buff * arp_create ( int type , int ptype , __be32 dest_ip ,
struct net_device * dev , __be32 src_ip ,
const unsigned char * dest_hw ,
const unsigned char * src_hw ,
const unsigned char * target_hw ) ;
void arp_xmit ( struct sk_buff * skb ) ;
2005-04-17 02:20:36 +04:00
# endif /* _ARP_H */