patch-2.1.8 linux/include/net/ipv6_route.h
Next file: linux/include/net/ndisc.h
Previous file: linux/include/net/ipv6.h
Back to the patch index
Back to the overall index
- Lines: 197
- Date:
Sun Nov 3 11:04:42 1996
- Orig file:
v2.1.7/linux/include/net/ipv6_route.h
- Orig date:
Thu Jan 1 02:00:00 1970
diff -u --recursive --new-file v2.1.7/linux/include/net/ipv6_route.h linux/include/net/ipv6_route.h
@@ -0,0 +1,196 @@
+/*
+ * Linux INET6 implementation
+ *
+ * Authors:
+ * Pedro Roque <roque@di.fc.ul.pt>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _NET_IPV6_ROUTE_H
+#define _NET_IPV6_ROUTE_H
+
+#include <linux/ipv6_route.h>
+
+
+#ifdef __KERNEL__
+
+
+struct fib6_node {
+ struct fib6_node *parent;
+ struct fib6_node *left;
+ struct fib6_node *right;
+
+ struct rt6_info *leaf;
+
+ __u16 fn_bit; /* bit key */
+ __u16 fn_flags;
+ __u32 fn_sernum;
+};
+
+
+struct rt6_info;
+
+typedef void (*rt6_output_method_t) (struct sk_buff *skb, struct rt6_info *rt);
+
+struct rt6_info {
+ struct fib6_node *fib_node;
+ struct rt6_info *next;
+
+ struct in6_addr rt_dst;
+
+ atomic_t rt_use; /* dcache references */
+ atomic_t rt_ref; /* fib references */
+
+ struct neighbour *rt_nexthop;
+ struct device *rt_dev;
+
+ rt6_output_method_t rt_output_method;
+
+ __u16 rt_metric;
+ __u16 rt_prefixlen;
+ __u32 rt_flags;
+ unsigned long rt_expires;
+};
+
+extern struct rt6_info *default_rt_list;
+extern struct rt6_info *last_resort_rt;
+
+struct dest_entry {
+ struct rt6_info rt;
+
+ __u32 dc_irtt;
+ __u32 dc_window;
+ __u16 dc_pmtu;
+
+ unsigned long dc_tstamp; /* for garbage collection */
+
+#define dc_addr rt.rt_dst
+#define dc_usecnt rt.rt_use
+#define dc_nexthop rt.rt_nexthop
+#define dc_flags rt.rt_flags
+};
+
+/*
+ * Structure for assync processing of operations on the routing
+ * table
+ */
+
+struct rt6_req {
+ int operation;
+ struct rt6_info *ptr;
+
+ struct rt6_req *next;
+ struct rt6_req *prev;
+
+#define RT_OPER_ADD 1
+#define RT_OPER_DEL 2
+};
+
+struct rt6_statistics {
+ __u32 fib_nodes;
+ __u32 fib_route_nodes;
+ __u32 fib_rt_alloc;
+ __u32 fib_rt_entries;
+ __u32 fib_dc_alloc;
+};
+
+#define RTN_ROOT 0x0001 /* root node */
+#define RTN_BACKTRACK 0x0002 /* backtrack point */
+#define RTN_TAG 0x0010
+
+/*
+ * Values for destination cache garbage colection
+ * These are wild guesses for now...
+ */
+
+#define DC_WATER_MARK 512
+#define DC_SHORT_TIMEOUT (5*HZ)
+#define DC_LONG_TIMEOUT (15*HZ)
+
+#define DC_TIME_RUN (5*HZ)
+#define DC_TIME_RETRY HZ
+
+/*
+ * Prototypes
+ */
+
+/*
+ * check/obtain destination cache from routing table
+ */
+
+extern struct dest_entry * ipv6_dst_check(struct dest_entry *dc,
+ struct in6_addr * daddr,
+ __u32 sernum, int flags);
+
+extern struct dest_entry * ipv6_dst_route(struct in6_addr * daddr,
+ struct device *src_dev,
+ int flags);
+
+extern void ipv6_dst_unlock(struct dest_entry *dest);
+
+extern struct rt6_info * fibv6_lookup(struct in6_addr *addr,
+ struct device *dev,
+ int flags);
+
+/*
+ * user space set/del route
+ */
+
+extern int ipv6_route_ioctl(unsigned int cmd, void *arg);
+
+
+extern void ipv6_route_init(void);
+extern void ipv6_route_cleanup(void);
+
+extern int ipv6_route_add(struct in6_rtmsg *rt);
+
+extern int fib6_del_rt(struct rt6_info *rt);
+
+extern void rt6_sndmsg(__u32 type, struct in6_addr *dst,
+ struct in6_addr *gw, __u16 plen,
+ __u16 metric, char *devname,
+ __u16 flags);
+/*
+ * ICMP interface
+ */
+
+extern struct rt6_info * ipv6_rt_redirect(struct device *dev,
+ struct in6_addr *dest,
+ struct in6_addr *target,
+ int on_link);
+
+extern void rt6_handle_pmtu(struct in6_addr *addr,
+ int pmtu);
+/*
+ *
+ */
+
+extern struct fib6_node routing_table;
+extern struct rt6_statistics rt6_stats;
+
+static __inline__ void rt_release(struct rt6_info *rt)
+{
+ atomic_dec(&rt->rt_ref);
+ if ((rt->rt_use | rt->rt_ref) == 0)
+ {
+ if (rt->rt_nexthop)
+ {
+ ndisc_dec_neigh(rt->rt_nexthop);
+ }
+
+ if (rt->rt_flags & RTI_DCACHE)
+ {
+ rt6_stats.fib_dc_alloc--;
+ }
+ rt6_stats.fib_rt_alloc--;
+ kfree(rt);
+ }
+}
+
+#endif
+
+#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov