linux/include/net/ndisc.h
<<
>>
Prefs
   1#ifndef _NDISC_H
   2#define _NDISC_H
   3
   4/*
   5 *      ICMP codes for neighbour discovery messages
   6 */
   7
   8#define NDISC_ROUTER_SOLICITATION       133
   9#define NDISC_ROUTER_ADVERTISEMENT      134
  10#define NDISC_NEIGHBOUR_SOLICITATION    135
  11#define NDISC_NEIGHBOUR_ADVERTISEMENT   136
  12#define NDISC_REDIRECT                  137
  13
  14/*
  15 *      ndisc options
  16 */
  17
  18enum {
  19        __ND_OPT_PREFIX_INFO_END = 0,
  20        ND_OPT_SOURCE_LL_ADDR = 1,      /* RFC2461 */
  21        ND_OPT_TARGET_LL_ADDR = 2,      /* RFC2461 */
  22        ND_OPT_PREFIX_INFO = 3,         /* RFC2461 */
  23        ND_OPT_REDIRECT_HDR = 4,        /* RFC2461 */
  24        ND_OPT_MTU = 5,                 /* RFC2461 */
  25        __ND_OPT_ARRAY_MAX,
  26        ND_OPT_ROUTE_INFO = 24,         /* RFC4191 */
  27        __ND_OPT_MAX
  28};
  29
  30#define MAX_RTR_SOLICITATION_DELAY      HZ
  31
  32#define ND_REACHABLE_TIME               (30*HZ)
  33#define ND_RETRANS_TIMER                HZ
  34
  35#define ND_MIN_RANDOM_FACTOR            (1/2)
  36#define ND_MAX_RANDOM_FACTOR            (3/2)
  37
  38#ifdef __KERNEL__
  39
  40#include <linux/compiler.h>
  41#include <linux/icmpv6.h>
  42#include <linux/in6.h>
  43#include <linux/types.h>
  44
  45#include <net/neighbour.h>
  46
  47struct ctl_table;
  48struct file;
  49struct inet6_dev;
  50struct net_device;
  51struct net_proto_family;
  52struct sk_buff;
  53
  54extern struct neigh_table nd_tbl;
  55
  56struct nd_msg {
  57        struct icmp6hdr icmph;
  58        struct in6_addr target;
  59        __u8            opt[0];
  60};
  61
  62struct rs_msg {
  63        struct icmp6hdr icmph;
  64        __u8            opt[0];
  65};
  66
  67struct ra_msg {
  68        struct icmp6hdr         icmph;
  69        __be32                  reachable_time;
  70        __be32                  retrans_timer;
  71};
  72
  73struct nd_opt_hdr {
  74        __u8            nd_opt_type;
  75        __u8            nd_opt_len;
  76} __attribute__((__packed__));
  77
  78
  79extern int                      ndisc_init(struct net_proto_family *ops);
  80
  81extern void                     ndisc_cleanup(void);
  82
  83extern int                      ndisc_rcv(struct sk_buff *skb);
  84
  85extern void                     ndisc_send_ns(struct net_device *dev,
  86                                              struct neighbour *neigh,
  87                                              struct in6_addr *solicit,
  88                                              struct in6_addr *daddr,
  89                                              struct in6_addr *saddr);
  90
  91extern void                     ndisc_send_rs(struct net_device *dev,
  92                                              struct in6_addr *saddr,
  93                                              struct in6_addr *daddr);
  94
  95extern void                     ndisc_forwarding_on(void);
  96extern void                     ndisc_forwarding_off(void);
  97
  98extern void                     ndisc_send_redirect(struct sk_buff *skb,
  99                                                    struct neighbour *neigh,
 100                                                    struct in6_addr *target);
 101
 102extern int                      ndisc_mc_map(struct in6_addr *addr, char *buf, struct net_device *dev, int dir);
 103
 104
 105struct rt6_info *               dflt_rt_lookup(void);
 106
 107/*
 108 *      IGMP
 109 */
 110extern int                      igmp6_init(struct net_proto_family *ops);
 111
 112extern void                     igmp6_cleanup(void);
 113
 114extern int                      igmp6_event_query(struct sk_buff *skb);
 115
 116extern int                      igmp6_event_report(struct sk_buff *skb);
 117
 118extern void                     igmp6_cleanup(void);
 119
 120#ifdef CONFIG_SYSCTL
 121extern int                      ndisc_ifinfo_sysctl_change(struct ctl_table *ctl,
 122                                                           int write,
 123                                                           struct file * filp,
 124                                                           void __user *buffer,
 125                                                           size_t *lenp,
 126                                                           loff_t *ppos);
 127#endif
 128
 129extern void                     inet6_ifinfo_notify(int event,
 130                                                    struct inet6_dev *idev);
 131
 132static inline struct neighbour * ndisc_get_neigh(struct net_device *dev, struct in6_addr *addr)
 133{
 134
 135        if (dev)
 136                return __neigh_lookup(&nd_tbl, addr, dev, 1);
 137
 138        return NULL;
 139}
 140
 141
 142#endif /* __KERNEL__ */
 143
 144
 145#endif
 146
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.