ndisc.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _NDISC_H
  2. #define _NDISC_H
  3. /*
  4.  * ICMP codes for neighbour discovery messages
  5.  */
  6. #define NDISC_ROUTER_SOLICITATION 133
  7. #define NDISC_ROUTER_ADVERTISEMENT 134
  8. #define NDISC_NEIGHBOUR_SOLICITATION 135
  9. #define NDISC_NEIGHBOUR_ADVERTISEMENT 136
  10. #define NDISC_REDIRECT 137
  11. /*
  12.  * ndisc options
  13.  */
  14. #define ND_OPT_SOURCE_LL_ADDR 1
  15. #define ND_OPT_TARGET_LL_ADDR 2
  16. #define ND_OPT_PREFIX_INFO 3
  17. #define ND_OPT_REDIRECT_HDR 4
  18. #define ND_OPT_MTU 5
  19. #define MAX_RTR_SOLICITATION_DELAY HZ
  20. #define ND_REACHABLE_TIME (30*HZ)
  21. #define ND_RETRANS_TIMER HZ
  22. #define ND_MIN_RANDOM_FACTOR (1/2)
  23. #define ND_MAX_RANDOM_FACTOR (3/2)
  24. #ifdef __KERNEL__
  25. #include <linux/skbuff.h>
  26. #include <linux/netdevice.h>
  27. #include <linux/icmpv6.h>
  28. #include <net/neighbour.h>
  29. #include <asm/atomic.h>
  30. extern struct neigh_table nd_tbl;
  31. struct nd_msg {
  32.         struct icmp6hdr icmph;
  33.         struct in6_addr target;
  34.         struct {
  35.                 __u8 opt_type;
  36.                 __u8 opt_len;
  37.                 __u8 link_addr[MAX_ADDR_LEN];
  38.         } opt;
  39. };
  40. struct ra_msg {
  41.         struct icmp6hdr icmph;
  42. __u32 reachable_time;
  43. __u32 retrans_timer;
  44. };
  45. extern int ndisc_init(struct net_proto_family *ops);
  46. extern void ndisc_cleanup(void);
  47. extern int ndisc_rcv(struct sk_buff *skb);
  48. extern void ndisc_send_ns(struct net_device *dev,
  49.       struct neighbour *neigh,
  50.       struct in6_addr *solicit,
  51.       struct in6_addr *daddr,
  52.       struct in6_addr *saddr);
  53. extern void ndisc_send_rs(struct net_device *dev,
  54.       struct in6_addr *saddr,
  55.       struct in6_addr *daddr);
  56. extern void ndisc_forwarding_on(void);
  57. extern void ndisc_forwarding_off(void);
  58. extern void ndisc_send_redirect(struct sk_buff *skb,
  59.     struct neighbour *neigh,
  60.     struct in6_addr *target);
  61. extern int ndisc_mc_map(struct in6_addr *addr, char *buf, struct net_device *dev, int dir);
  62. struct rt6_info * dflt_rt_lookup(void);
  63. /*
  64.  * IGMP
  65.  */
  66. extern int igmp6_init(struct net_proto_family *ops);
  67. extern void igmp6_cleanup(void);
  68. extern int igmp6_event_query(struct sk_buff *skb);
  69. extern int igmp6_event_report(struct sk_buff *skb);
  70. extern void igmp6_cleanup(void);
  71. static inline struct neighbour * ndisc_get_neigh(struct net_device *dev, struct in6_addr *addr)
  72. {
  73. if (dev)
  74. return __neigh_lookup(&nd_tbl, addr, dev, 1);
  75. return NULL;
  76. }
  77. #endif /* __KERNEL__ */
  78. #endif