|
@@ -44,38 +44,35 @@ struct fib_info;
|
|
|
struct rtable {
|
|
|
struct dst_entry dst;
|
|
|
|
|
|
- /* Lookup key. */
|
|
|
- __be32 rt_key_dst;
|
|
|
- __be32 rt_key_src;
|
|
|
-
|
|
|
int rt_genid;
|
|
|
unsigned int rt_flags;
|
|
|
__u16 rt_type;
|
|
|
- __u8 rt_key_tos;
|
|
|
+ __u16 rt_is_input;
|
|
|
|
|
|
- __be32 rt_dst; /* Path destination */
|
|
|
- __be32 rt_src; /* Path source */
|
|
|
- int rt_route_iif;
|
|
|
int rt_iif;
|
|
|
- int rt_oif;
|
|
|
- __u32 rt_mark;
|
|
|
|
|
|
/* Info on neighbour */
|
|
|
__be32 rt_gateway;
|
|
|
|
|
|
/* Miscellaneous cached information */
|
|
|
u32 rt_pmtu;
|
|
|
- struct fib_info *fi; /* for client ref to shared metrics */
|
|
|
};
|
|
|
|
|
|
static inline bool rt_is_input_route(const struct rtable *rt)
|
|
|
{
|
|
|
- return rt->rt_route_iif != 0;
|
|
|
+ return rt->rt_is_input != 0;
|
|
|
}
|
|
|
|
|
|
static inline bool rt_is_output_route(const struct rtable *rt)
|
|
|
{
|
|
|
- return rt->rt_route_iif == 0;
|
|
|
+ return rt->rt_is_input == 0;
|
|
|
+}
|
|
|
+
|
|
|
+static inline __be32 rt_nexthop(const struct rtable *rt, __be32 daddr)
|
|
|
+{
|
|
|
+ if (rt->rt_gateway)
|
|
|
+ return rt->rt_gateway;
|
|
|
+ return daddr;
|
|
|
}
|
|
|
|
|
|
struct ip_rt_acct {
|
|
@@ -109,7 +106,6 @@ extern struct ip_rt_acct __percpu *ip_rt_acct;
|
|
|
struct in_device;
|
|
|
extern int ip_rt_init(void);
|
|
|
extern void rt_cache_flush(struct net *net, int how);
|
|
|
-extern void rt_cache_flush_batch(struct net *net);
|
|
|
extern struct rtable *__ip_route_output_key(struct net *, struct flowi4 *flp);
|
|
|
extern struct rtable *ip_route_output_flow(struct net *, struct flowi4 *flp,
|
|
|
struct sock *sk);
|
|
@@ -161,20 +157,8 @@ static inline struct rtable *ip_route_output_gre(struct net *net, struct flowi4
|
|
|
return ip_route_output_key(net, fl4);
|
|
|
}
|
|
|
|
|
|
-extern int ip_route_input_common(struct sk_buff *skb, __be32 dst, __be32 src,
|
|
|
- u8 tos, struct net_device *devin, bool noref);
|
|
|
-
|
|
|
-static inline int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,
|
|
|
- u8 tos, struct net_device *devin)
|
|
|
-{
|
|
|
- return ip_route_input_common(skb, dst, src, tos, devin, false);
|
|
|
-}
|
|
|
-
|
|
|
-static inline int ip_route_input_noref(struct sk_buff *skb, __be32 dst, __be32 src,
|
|
|
- u8 tos, struct net_device *devin)
|
|
|
-{
|
|
|
- return ip_route_input_common(skb, dst, src, tos, devin, true);
|
|
|
-}
|
|
|
+extern int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,
|
|
|
+ u8 tos, struct net_device *devin);
|
|
|
|
|
|
extern void ipv4_update_pmtu(struct sk_buff *skb, struct net *net, u32 mtu,
|
|
|
int oif, u32 mark, u8 protocol, int flow_flags);
|