patch-2.1.15 linux/include/net/dst.h
Next file: linux/include/net/icmp.h
Previous file: linux/include/net/ax25.h
Back to the patch index
Back to the overall index
- Lines: 124
- Date:
Thu Dec 12 16:54:21 1996
- Orig file:
v2.1.14/linux/include/net/dst.h
- Orig date:
Thu Jan 1 02:00:00 1970
diff -u --recursive --new-file v2.1.14/linux/include/net/dst.h linux/include/net/dst.h
@@ -0,0 +1,123 @@
+/*
+ * net/dst.h Protocol independent destination cache definitions.
+ *
+ * Authors: Alexey Kuznetsov, <[email protected]>
+ *
+ */
+
+#ifndef _NET_DST_H
+#define _NET_DST_H
+
+/*
+ * 0 - no debugging messages
+ * 1 - rare events and bugs (default)
+ * 2 - trace mode.
+ */
+#ifdef NO_ANK_FIX
+#define RT_CACHE_DEBUG 0
+#else
+#define RT_CACHE_DEBUG 1
+#endif
+
+#define DST_GC_MIN (1*HZ)
+#define DST_GC_INC (5*HZ)
+#define DST_GC_MAX (120*HZ)
+
+struct sk_buff;
+
+struct dst_entry
+{
+ struct dst_entry *next;
+ atomic_t refcnt;
+ atomic_t use;
+ struct device *dev;
+ char obsolete;
+ char priority;
+ char __pad1, __pad2;
+ unsigned long lastuse;
+ unsigned window;
+ unsigned pmtu;
+ unsigned rtt;
+ int error;
+
+ struct dst_entry *neighbour;
+ struct hh_cache *hh;
+
+ int (*input)(struct sk_buff*);
+ int (*output)(struct sk_buff*);
+
+ struct dst_ops *ops;
+
+ char info[0];
+};
+
+
+struct dst_ops
+{
+ unsigned short family;
+ struct dst_entry * (*check)(struct dst_entry *);
+ struct dst_entry * (*reroute)(struct dst_entry *);
+ void (*destroy)(struct dst_entry *);
+};
+
+extern struct dst_entry * dst_garbage_list;
+extern atomic_t dst_total;
+
+static __inline__
+struct dst_entry * dst_clone(struct dst_entry * dst)
+{
+ if (dst)
+ atomic_inc(&dst->refcnt);
+ return dst;
+}
+
+static __inline__
+void dst_release(struct dst_entry * dst)
+{
+ if (dst)
+ atomic_dec(&dst->refcnt);
+}
+
+static __inline__
+struct dst_entry * dst_check(struct dst_entry ** dst_p)
+{
+ struct dst_entry * dst = *dst_p;
+ if (dst && dst->obsolete)
+ dst = dst->ops->check(dst);
+ return (*dst_p = dst);
+}
+
+static __inline__
+struct dst_entry * dst_reroute(struct dst_entry ** dst_p)
+{
+ struct dst_entry * dst = *dst_p;
+ if (dst && dst->obsolete)
+ dst = dst->ops->reroute(dst);
+ return (*dst_p = dst);
+}
+
+static __inline__
+void dst_destroy(struct dst_entry * dst)
+{
+ if (dst->neighbour)
+ dst_release(dst->neighbour);
+ if (dst->ops->destroy)
+ dst->ops->destroy(dst);
+ kfree(dst);
+ atomic_dec(&dst_total);
+}
+
+extern void * dst_alloc(int size, struct dst_ops * ops);
+extern void __dst_free(struct dst_entry * dst);
+
+static __inline__
+void dst_free(struct dst_entry * dst)
+{
+ if (!dst->refcnt) {
+ dst_destroy(dst);
+ return;
+ }
+ __dst_free(dst);
+}
+
+#endif /* _NET_DST_H */
FUNET's LINUX-ADM group, [email protected]
TCL-scripts by Sam Shen, [email protected]