From 6c5d24afea05629135f344108209d3db92574edd Mon Sep 17 00:00:00 2001 From: Pravin B Shelar Date: Mon, 29 Jul 2013 15:47:34 -0700 Subject: [PATCH] datapath: Move find_route() to compat.h Signed-off-by: Pravin B Shelar Acked-by: Jesse Gross --- datapath/compat.h | 42 ++++++++++++++++++++++++++++++++++++++++++ datapath/tunnel.c | 38 -------------------------------------- datapath/tunnel.h | 4 ---- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/datapath/compat.h b/datapath/compat.h index 65734ff15..8457dbf31 100644 --- a/datapath/compat.h +++ b/datapath/compat.h @@ -19,7 +19,12 @@ #ifndef COMPAT_H #define COMPAT_H 1 +#include +#include #include +#include +#include + #ifndef HAVE_NLA_NUL_STRING static inline int CHECK_NUL_STRING(struct nlattr *attr, int maxlen) @@ -113,4 +118,41 @@ static inline void skb_set_mark(struct sk_buff *skb, u32 mark) #define inet_sport(sk) (inet_sk(sk)->inet_sport) #endif +static inline struct rtable *find_route(struct net *net, + __be32 *saddr, __be32 daddr, + u8 ipproto, u8 tos, u32 skb_mark) +{ + struct rtable *rt; + /* Tunnel configuration keeps DSCP part of TOS bits, But Linux + * router expect RT_TOS bits only. */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39) + struct flowi fl = { .nl_u = { .ip4_u = { + .daddr = daddr, + .saddr = *saddr, +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) + .fwmark = skb_mark, +#endif + .tos = RT_TOS(tos) } }, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) + .mark = skb_mark, +#endif + .proto = ipproto }; + + if (unlikely(ip_route_output_key(net, &rt, &fl))) + return ERR_PTR(-EADDRNOTAVAIL); + *saddr = fl.nl_u.ip4_u.saddr; + return rt; +#else + struct flowi4 fl = { .daddr = daddr, + .saddr = *saddr, + .flowi4_tos = RT_TOS(tos), + .flowi4_mark = skb_mark, + .flowi4_proto = ipproto }; + + rt = ip_route_output_key(net, &fl); + *saddr = fl.saddr; + return rt; +#endif +} #endif /* compat.h */ diff --git a/datapath/tunnel.c b/datapath/tunnel.c index bd63da555..c2c3df4c2 100644 --- a/datapath/tunnel.c +++ b/datapath/tunnel.c @@ -79,44 +79,6 @@ void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb, ovs_vport_receive(vport, skb, tun_key); } -struct rtable *find_route(struct net *net, - __be32 *saddr, __be32 daddr, u8 ipproto, - u8 tos, u32 skb_mark) -{ - struct rtable *rt; - /* Tunnel configuration keeps DSCP part of TOS bits, But Linux - * router expect RT_TOS bits only. */ - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,39) - struct flowi fl = { .nl_u = { .ip4_u = { - .daddr = daddr, - .saddr = *saddr, -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) - .fwmark = skb_mark, -#endif - .tos = RT_TOS(tos) } }, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) - .mark = skb_mark, -#endif - .proto = ipproto }; - - if (unlikely(ip_route_output_key(net, &rt, &fl))) - return ERR_PTR(-EADDRNOTAVAIL); - *saddr = fl.nl_u.ip4_u.saddr; - return rt; -#else - struct flowi4 fl = { .daddr = daddr, - .saddr = *saddr, - .flowi4_tos = RT_TOS(tos), - .flowi4_mark = skb_mark, - .flowi4_proto = ipproto }; - - rt = ip_route_output_key(net, &fl); - *saddr = fl.saddr; - return rt; -#endif -} - static bool need_linearize(const struct sk_buff *skb) { int i; diff --git a/datapath/tunnel.h b/datapath/tunnel.h index aa521450f..7625dbe66 100644 --- a/datapath/tunnel.h +++ b/datapath/tunnel.h @@ -26,10 +26,6 @@ #include "flow.h" #include "vport.h" -struct rtable *find_route(struct net *net, - __be32 *saddr, __be32 daddr, u8 ipproto, - u8 tos, u32 skb_mark); - u16 ovs_tnl_get_src_port(struct sk_buff *skb); int ovs_tnl_send(struct vport *vport, struct sk_buff *skb, -- 2.47.0