int __use;
struct dst_entry *child;
struct net_device *dev;
- int obsolete;
+ short error;
+ short obsolete;
int flags;
#define DST_HOST 1
#define DST_NOXFRM 2
#define DST_NOPOLICY 4
#define DST_NOHASH 8
+#define DST_BALANCED 0x10
unsigned long lastuse;
unsigned long expires;
unsigned long rate_last; /* rate limiting for ICMP */
unsigned long rate_tokens;
- int error;
-
struct neighbour *neighbour;
struct hh_cache *hh;
struct xfrm_state *xfrm;
return dst->metrics[metric-1];
}
-static inline u32
-dst_path_metric(const struct dst_entry *dst, int metric)
+static inline u32 dst_mtu(const struct dst_entry *dst)
{
- return dst->path->metrics[metric-1];
+ u32 mtu = dst_metric(dst, RTAX_MTU);
+ /*
+ * Alexey put it here, so ask him about it :)
+ */
+ barrier();
+ return mtu;
}
static inline u32
-dst_pmtu(const struct dst_entry *dst)
+dst_allfrag(const struct dst_entry *dst)
{
- u32 mtu = dst_path_metric(dst, RTAX_MTU);
+ int ret = dst_metric(dst, RTAX_FEATURES) & RTAX_FEATURE_ALLFRAG;
/* Yes, _exactly_. This is paranoia. */
barrier();
- return mtu;
+ return ret;
}
static inline int
}
}
+static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie)
+{
+ if (dst->obsolete)
+ dst = dst->ops->check(dst, cookie);
+ return dst;
+}
+
extern void dst_init(void);
struct flowi;