nfsd: track last inode only in use_wgather case
[safe/jmp/linux-2.6] / include / net / ndisc.h
index f85d6e4..1459ed3 100644 (file)
 #define NDISC_REDIRECT                 137
 
 /*
+ * 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 */
+
+/*
  *     ndisc options
  */
 
@@ -22,6 +31,9 @@ enum {
        ND_OPT_PREFIX_INFO = 3,         /* RFC2461 */
        ND_OPT_REDIRECT_HDR = 4,        /* RFC2461 */
        ND_OPT_MTU = 5,                 /* RFC2461 */
+       __ND_OPT_ARRAY_MAX,
+       ND_OPT_ROUTE_INFO = 24,         /* RFC4191 */
+       ND_OPT_RDNSS = 25,              /* RFC5006 */
        __ND_OPT_MAX
 };
 
@@ -35,11 +47,19 @@ enum {
 
 #ifdef __KERNEL__
 
-#include <linux/skbuff.h>
-#include <linux/netdevice.h>
+#include <linux/compiler.h>
 #include <linux/icmpv6.h>
+#include <linux/in6.h>
+#include <linux/types.h>
+
 #include <net/neighbour.h>
-#include <asm/atomic.h>
+
+struct ctl_table;
+struct file;
+struct inet6_dev;
+struct net_device;
+struct net_proto_family;
+struct sk_buff;
 
 extern struct neigh_table nd_tbl;
 
@@ -56,8 +76,8 @@ struct rs_msg {
 
 struct ra_msg {
         struct icmp6hdr                icmph;
-       __u32                   reachable_time;
-       __u32                   retrans_timer;
+       __be32                  reachable_time;
+       __be32                  retrans_timer;
 };
 
 struct nd_opt_hdr {
@@ -66,7 +86,7 @@ struct nd_opt_hdr {
 } __attribute__((__packed__));
 
 
-extern int                     ndisc_init(struct net_proto_family *ops);
+extern int                     ndisc_init(void);
 
 extern void                    ndisc_cleanup(void);
 
@@ -74,30 +94,40 @@ extern int                  ndisc_rcv(struct sk_buff *skb);
 
 extern void                    ndisc_send_ns(struct net_device *dev,
                                              struct neighbour *neigh,
-                                             struct in6_addr *solicit,
-                                             struct in6_addr *daddr,
-                                             struct in6_addr *saddr);
+                                             const struct in6_addr *solicit,
+                                             const struct in6_addr *daddr,
+                                             const struct in6_addr *saddr);
 
 extern void                    ndisc_send_rs(struct net_device *dev,
-                                             struct in6_addr *saddr,
-                                             struct in6_addr *daddr);
-
-extern void                    ndisc_forwarding_on(void);
-extern void                    ndisc_forwarding_off(void);
+                                             const struct in6_addr *saddr,
+                                             const struct in6_addr *daddr);
 
 extern void                    ndisc_send_redirect(struct sk_buff *skb,
                                                    struct neighbour *neigh,
-                                                   struct in6_addr *target);
+                                                   const struct in6_addr *target);
 
 extern int                     ndisc_mc_map(struct in6_addr *addr, char *buf, struct net_device *dev, int dir);
 
+extern struct sk_buff          *ndisc_build_skb(struct net_device *dev,
+                                                const struct in6_addr *daddr,
+                                                const struct in6_addr *saddr,
+                                                struct icmp6hdr *icmp6h,
+                                                const struct in6_addr *target,
+                                                int llinfo);
+
+extern void                    ndisc_send_skb(struct sk_buff *skb,
+                                              struct net_device *dev,
+                                              struct neighbour *neigh,
+                                              const struct in6_addr *daddr,
+                                              const struct in6_addr *saddr,
+                                              struct icmp6hdr *icmp6h);
+
 
-struct rt6_info *              dflt_rt_lookup(void);
 
 /*
  *     IGMP
  */
-extern int                     igmp6_init(struct net_proto_family *ops);
+extern int                     igmp6_init(void);
 
 extern void                    igmp6_cleanup(void);
 
@@ -105,27 +135,29 @@ extern int                        igmp6_event_query(struct sk_buff *skb);
 
 extern int                     igmp6_event_report(struct sk_buff *skb);
 
-extern void                    igmp6_cleanup(void);
 
 #ifdef CONFIG_SYSCTL
-extern int                     ndisc_ifinfo_sysctl_change(ctl_table *ctl,
+extern int                     ndisc_ifinfo_sysctl_change(struct ctl_table *ctl,
                                                           int write,
                                                           struct file * filp,
                                                           void __user *buffer,
                                                           size_t *lenp,
                                                           loff_t *ppos);
+int ndisc_ifinfo_sysctl_strategy(ctl_table *ctl,
+                                void __user *oldval, size_t __user *oldlenp,
+                                void __user *newval, size_t newlen);
 #endif
 
 extern void                    inet6_ifinfo_notify(int event,
                                                    struct inet6_dev *idev);
 
-static inline struct neighbour * ndisc_get_neigh(struct net_device *dev, struct in6_addr *addr)
+static inline struct neighbour * ndisc_get_neigh(struct net_device *dev, const struct in6_addr *addr)
 {
 
        if (dev)
-               return __neigh_lookup(&nd_tbl, addr, dev, 1);
+               return __neigh_lookup_errno(&nd_tbl, addr, dev);
 
-       return NULL;
+       return ERR_PTR(-ENODEV);
 }