patch-2.1.79 linux/include/net/ndisc.h

Next file: linux/include/net/neighbour.h
Previous file: linux/include/net/ipv6.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.78/linux/include/net/ndisc.h linux/include/net/ndisc.h
@@ -1,34 +1,6 @@
 #ifndef _NDISC_H
 #define _NDISC_H
 
-
-/*
- *	Neighbor Cache Entry States (7.3.2.)
- */
-
-/*
- *	The lsb is set for states that have a timer associated
- */
-
-#define NUD_NONE	0x00
-#define NUD_INCOMPLETE	0x11
-#define NUD_REACHABLE	0x20
-#define NUD_STALE	0x30
-#define NUD_DELAY	0x41
-#define NUD_PROBE	0x51
-#define NUD_FAILED	0x60	/* neighbour discovery failed	*/
-
-#define NUD_IN_TIMER	0x01
-
-#define NDISC_QUEUE_LEN	3
-
-#define NCF_NOARP		0x0100	/* no ARP needed on this device */
-#define NCF_SUBNET		0x0200  /* NC entry for subnet		*/
-#define NCF_INVALID		0x0400
-#define NCF_DELAY_EXPIRED	0x0800	/* time to move to PROBE	*/
-#define NCF_ROUTER		0x1000	/* neighbour is a router	*/
-#define NCF_HHVALID		0x2000	/* Hardware header is valid	*/
-
 /*
  *	ICMP codes for neighbour discovery messages
  */
@@ -51,13 +23,11 @@
 
 #define MAX_RTR_SOLICITATION_DELAY	HZ
 
-#define RECHABLE_TIME			(30*HZ)
-#define RETRANS_TIMER			HZ
-
-#define MIN_RANDOM_FACTOR		(1/2)
-#define MAX_RANDOM_FACTOR		(3/2)
+#define ND_REACHABLE_TIME		(30*HZ)
+#define ND_RETRANS_TIMER		HZ
 
-#define REACH_RANDOM_INTERVAL		(60*60*HZ)	/* 1 hour */
+#define ND_MIN_RANDOM_FACTOR		(1/2)
+#define ND_MAX_RANDOM_FACTOR		(3/2)
 
 #ifdef __KERNEL__
 
@@ -67,28 +37,7 @@
 #include <net/neighbour.h>
 #include <asm/atomic.h>
 
-/*
- *	neighbour cache entry
- *	used by neighbour discovery module
- */
-
-struct nd_neigh {
-	struct neighbour	neigh;
-	struct in6_addr		ndn_addr;	/* next hop addr */
-
-	__u8			ndn_plen,	/* prefix len	 */
-				ndn_type,	/* {unicast, multicast} */
-				ndn_nud_state,
-				ndn_probes;
-	
-	unsigned long		ndn_expires;	/* timer expires at	*/
-
-#define ndn_refcnt		neigh.refcnt
-#define ndn_tstamp		neigh.lastused
-#define ndn_dev			neigh.dev
-#define ndn_flags		neigh.flags
-#define ndn_ha			neigh.ha
-};
+extern struct neigh_table nd_tbl;
 
 struct nd_msg {
         struct icmp6hdr	icmph;
@@ -106,25 +55,8 @@
 	__u32			retrans_timer;
 };
 
-struct ndisc_statistics {
-	__u32	allocs;			/* allocated entries		*/
-	__u32	free_delayed;		/* zombie entries		*/
-	__u32	snt_probes_ucast;	/* ns probes sent (ucast)	*/
-	__u32	snt_probes_mcast;	/* ns probes sent (mcast)	*/
-	__u32	rcv_probes_ucast;	/* ns probes rcv  (ucast)	*/
-	__u32	rcv_probes_mcast;	/* ns probes rcv  (mcast)	*/
-	__u32	rcv_upper_conf;		/* confirmations from upper layers */
-	__u32	res_failed;		/* address resolution failures	*/
-};
-
-extern struct neighbour *	ndisc_find_neigh(struct device *dev, 
-						 struct in6_addr *addr);
-
-extern void			ndisc_validate(struct neighbour *neigh);
 
 extern void			ndisc_init(struct net_proto_family *ops);
-extern struct neighbour*	ndisc_get_neigh(struct device *dev,
-						struct in6_addr *addr);
 extern void			ndisc_cleanup(void);
 
 extern int			ndisc_rcv(struct sk_buff *skb,
@@ -134,9 +66,6 @@
 					  struct ipv6_options *opt,
 					  unsigned short len);
 
-extern void			ndisc_event_send(struct neighbour *neigh,
-						 struct sk_buff *skb);
-
 extern void			ndisc_send_ns(struct device *dev,
 					      struct neighbour *neigh,
 					      struct in6_addr *solicit,
@@ -147,9 +76,6 @@
 					      struct in6_addr *saddr,
 					      struct in6_addr *daddr);
 
-extern int			ndisc_eth_resolv(unsigned char *,
-						struct sk_buff *);
-
 extern void			ndisc_forwarding_on(void);
 extern void			ndisc_forwarding_off(void);
 
@@ -157,10 +83,10 @@
 						    struct neighbour *neigh,
 						    struct in6_addr *target);
 
-struct rt6_info *		dflt_rt_lookup(void);
+extern int			ndisc_mc_map(struct in6_addr *addr, char *buf, struct device *dev, int dir);
 
-extern unsigned long	nd_rand_seed;
-extern unsigned long	ipv6_random(void);
+
+struct rt6_info *		dflt_rt_lookup(void);
 
 /*
  *	IGMP
@@ -174,6 +100,22 @@
 extern int			igmp6_event_report(struct sk_buff *skb,
 						   struct icmp6hdr *hdr,
 						   int len);
+
+extern __inline__ struct neighbour * ndisc_get_neigh(struct device *dev, struct in6_addr *addr)
+{
+
+	if (dev) {
+		struct neighbour *neigh;
+
+		start_bh_atomic();
+		neigh = __neigh_lookup(&nd_tbl, addr, dev, 1);
+		end_bh_atomic();
+
+		return neigh;
+	}
+	return NULL;
+}
+
 
 #endif /* __KERNEL__ */
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov