2005-04-17 02:20:36 +04:00
# ifndef _NDISC_H
# define _NDISC_H
/*
* ICMP codes for neighbour discovery messages
*/
# define NDISC_ROUTER_SOLICITATION 133
# define NDISC_ROUTER_ADVERTISEMENT 134
# define NDISC_NEIGHBOUR_SOLICITATION 135
# define NDISC_NEIGHBOUR_ADVERTISEMENT 136
# define NDISC_REDIRECT 137
2008-03-12 01:35:59 +03:00
/*
* Router type : cross - layer information from link - layer to
* IPv6 layer reported by certain link types ( e . g . , RFC4214 ) .
*/
# define NDISC_NODETYPE_UNSPEC 0 /* unspecified (default) */
# define NDISC_NODETYPE_HOST 1 /* host or unauthorized router */
# define NDISC_NODETYPE_NODEFAULT 2 /* non-default router */
# define NDISC_NODETYPE_DEFAULT 3 /* default router */
2005-04-17 02:20:36 +04:00
/*
* ndisc options
*/
enum {
__ND_OPT_PREFIX_INFO_END = 0 ,
ND_OPT_SOURCE_LL_ADDR = 1 , /* RFC2461 */
ND_OPT_TARGET_LL_ADDR = 2 , /* RFC2461 */
ND_OPT_PREFIX_INFO = 3 , /* RFC2461 */
ND_OPT_REDIRECT_HDR = 4 , /* RFC2461 */
ND_OPT_MTU = 5 , /* RFC2461 */
2006-03-21 04:06:24 +03:00
__ND_OPT_ARRAY_MAX ,
ND_OPT_ROUTE_INFO = 24 , /* RFC4191 */
2007-10-11 08:22:05 +04:00
ND_OPT_RDNSS = 25 , /* RFC5006 */
2005-04-17 02:20:36 +04:00
__ND_OPT_MAX
} ;
# define MAX_RTR_SOLICITATION_DELAY HZ
# define ND_REACHABLE_TIME (30*HZ)
# define ND_RETRANS_TIMER HZ
# define ND_MIN_RANDOM_FACTOR (1 / 2)
# define ND_MAX_RANDOM_FACTOR (3 / 2)
# ifdef __KERNEL__
2005-12-27 07:43:12 +03:00
# include <linux/compiler.h>
2005-04-17 02:20:36 +04:00
# include <linux/icmpv6.h>
2005-12-27 07:43:12 +03:00
# include <linux/in6.h>
# include <linux/types.h>
2005-04-17 02:20:36 +04:00
# include <net/neighbour.h>
2005-12-27 07:43:12 +03:00
struct ctl_table ;
struct file ;
struct inet6_dev ;
struct net_device ;
struct net_proto_family ;
struct sk_buff ;
2005-04-17 02:20:36 +04:00
extern struct neigh_table nd_tbl ;
struct nd_msg {
struct icmp6hdr icmph ;
struct in6_addr target ;
__u8 opt [ 0 ] ;
} ;
struct rs_msg {
struct icmp6hdr icmph ;
__u8 opt [ 0 ] ;
} ;
struct ra_msg {
struct icmp6hdr icmph ;
2006-11-15 07:56:00 +03:00
__be32 reachable_time ;
__be32 retrans_timer ;
2005-04-17 02:20:36 +04:00
} ;
struct nd_opt_hdr {
__u8 nd_opt_type ;
__u8 nd_opt_len ;
} __attribute__ ( ( __packed__ ) ) ;
2008-02-29 22:13:15 +03:00
extern int ndisc_init ( void ) ;
2005-04-17 02:20:36 +04:00
extern void ndisc_cleanup ( void ) ;
extern int ndisc_rcv ( struct sk_buff * skb ) ;
extern void ndisc_send_ns ( struct net_device * dev ,
struct neighbour * neigh ,
[IPV6]: Make address arguments const.
- net/ipv6/addrconf.c:
ipv6_get_ifaddr(), ipv6_dev_get_saddr()
- net/ipv6/mcast.c:
ipv6_sock_mc_join(), ipv6_sock_mc_drop(),
inet6_mc_check(),
ipv6_dev_mc_inc(), __ipv6_dev_mc_dec(), ipv6_dev_mc_dec(),
ipv6_chk_mcast_addr()
- net/ipv6/route.c:
rt6_lookup(), icmp6_dst_alloc()
- net/ipv6/ip6_output.c:
ip6_nd_hdr()
- net/ipv6/ndisc.c:
ndisc_send_ns(), ndisc_send_rs(), ndisc_send_redirect(),
ndisc_get_neigh(), __ndisc_send()
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
2008-04-10 10:42:10 +04:00
const struct in6_addr * solicit ,
const struct in6_addr * daddr ,
const struct in6_addr * saddr ) ;
2005-04-17 02:20:36 +04:00
extern void ndisc_send_rs ( struct net_device * dev ,
[IPV6]: Make address arguments const.
- net/ipv6/addrconf.c:
ipv6_get_ifaddr(), ipv6_dev_get_saddr()
- net/ipv6/mcast.c:
ipv6_sock_mc_join(), ipv6_sock_mc_drop(),
inet6_mc_check(),
ipv6_dev_mc_inc(), __ipv6_dev_mc_dec(), ipv6_dev_mc_dec(),
ipv6_chk_mcast_addr()
- net/ipv6/route.c:
rt6_lookup(), icmp6_dst_alloc()
- net/ipv6/ip6_output.c:
ip6_nd_hdr()
- net/ipv6/ndisc.c:
ndisc_send_ns(), ndisc_send_rs(), ndisc_send_redirect(),
ndisc_get_neigh(), __ndisc_send()
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
2008-04-10 10:42:10 +04:00
const struct in6_addr * saddr ,
const struct in6_addr * daddr ) ;
2005-04-17 02:20:36 +04:00
extern void ndisc_send_redirect ( struct sk_buff * skb ,
struct neighbour * neigh ,
[IPV6]: Make address arguments const.
- net/ipv6/addrconf.c:
ipv6_get_ifaddr(), ipv6_dev_get_saddr()
- net/ipv6/mcast.c:
ipv6_sock_mc_join(), ipv6_sock_mc_drop(),
inet6_mc_check(),
ipv6_dev_mc_inc(), __ipv6_dev_mc_dec(), ipv6_dev_mc_dec(),
ipv6_chk_mcast_addr()
- net/ipv6/route.c:
rt6_lookup(), icmp6_dst_alloc()
- net/ipv6/ip6_output.c:
ip6_nd_hdr()
- net/ipv6/ndisc.c:
ndisc_send_ns(), ndisc_send_rs(), ndisc_send_redirect(),
ndisc_get_neigh(), __ndisc_send()
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
2008-04-10 10:42:10 +04:00
const struct in6_addr * target ) ;
2005-04-17 02:20:36 +04:00
extern int ndisc_mc_map ( struct in6_addr * addr , char * buf , struct net_device * dev , int dir ) ;
/*
* IGMP
*/
2008-02-29 22:13:15 +03:00
extern int igmp6_init ( void ) ;
2005-04-17 02:20:36 +04:00
extern void igmp6_cleanup ( void ) ;
extern int igmp6_event_query ( struct sk_buff * skb ) ;
extern int igmp6_event_report ( struct sk_buff * skb ) ;
# ifdef CONFIG_SYSCTL
2005-12-27 07:43:12 +03:00
extern int ndisc_ifinfo_sysctl_change ( struct ctl_table * ctl ,
2005-04-17 02:20:36 +04:00
int write ,
struct file * filp ,
void __user * buffer ,
size_t * lenp ,
loff_t * ppos ) ;
2008-10-16 09:04:23 +04:00
int ndisc_ifinfo_sysctl_strategy ( ctl_table * ctl ,
void __user * oldval , size_t __user * oldlenp ,
2008-05-20 03:25:42 +04:00
void __user * newval , size_t newlen ) ;
2005-04-17 02:20:36 +04:00
# endif
extern void inet6_ifinfo_notify ( int event ,
struct inet6_dev * idev ) ;
[IPV6]: Make address arguments const.
- net/ipv6/addrconf.c:
ipv6_get_ifaddr(), ipv6_dev_get_saddr()
- net/ipv6/mcast.c:
ipv6_sock_mc_join(), ipv6_sock_mc_drop(),
inet6_mc_check(),
ipv6_dev_mc_inc(), __ipv6_dev_mc_dec(), ipv6_dev_mc_dec(),
ipv6_chk_mcast_addr()
- net/ipv6/route.c:
rt6_lookup(), icmp6_dst_alloc()
- net/ipv6/ip6_output.c:
ip6_nd_hdr()
- net/ipv6/ndisc.c:
ndisc_send_ns(), ndisc_send_rs(), ndisc_send_redirect(),
ndisc_get_neigh(), __ndisc_send()
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
2008-04-10 10:42:10 +04:00
static inline struct neighbour * ndisc_get_neigh ( struct net_device * dev , const struct in6_addr * addr )
2005-04-17 02:20:36 +04:00
{
if ( dev )
return __neigh_lookup ( & nd_tbl , addr , dev , 1 ) ;
return NULL ;
}
# endif /* __KERNEL__ */
# endif