/* * Quicktun tunnel driver - compatiblity definitions * Copyright (C) 2011 Matthias Schiffer * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef __QUICKTUN_COMPAT_H #define __QUICKTUN_COMPAT_H #include #include #include #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 39) static inline struct rtable *ip_route_output_ports(struct net *net, struct sock *sk, __be32 daddr, __be32 saddr, __be16 dport, __be16 sport, __u8 proto, __u8 tos, int oif) { struct rtable *rt; struct flowi fl = { .nl_u = { .ip4_u = { .saddr = saddr, .daddr = daddr, .tos = tos, } }, .oif = oif, .proto = proto }; if (ip_route_output_key(net, &rt, &fl)) return NULL; return rt; } #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 37) static inline void __skb_tunnel_rx(struct sk_buff *skb, struct net_device *dev) { skb->dev = dev; #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) skb->rxhash = 0; #endif skb_set_queue_mapping(skb, 0); skb_dst_drop(skb); nf_reset(skb); } #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 36) #define RTABLE_DST(rtable) (&(rtable)->u.dst) #else #define RTABLE_DST(rtable) (&(rtable)->dst) #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 34) #define rcu_dereference_protected(p, c) rcu_dereference(p) #endif #endif /* __QUICKTUN_COMPAT_H */