diff options
Diffstat (limited to 'datapath/linux/compat/ip_output-openvswitch.c')
| -rw-r--r-- | datapath/linux/compat/ip_output-openvswitch.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/datapath/linux/compat/ip_output-openvswitch.c b/datapath/linux/compat/ip_output-openvswitch.c new file mode 100644 index 000000000..a09fcbce4 --- /dev/null +++ b/datapath/linux/compat/ip_output-openvswitch.c @@ -0,0 +1,33 @@ +#include <linux/version.h> +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25) + +#include <linux/netfilter_ipv4.h> +#include <net/ip.h> + +int __ip_local_out(struct sk_buff *skb) +{ + struct iphdr *iph = ip_hdr(skb); + + iph->tot_len = htons(skb->len); + ip_send_check(iph); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) + return nf_hook(PF_INET, NF_IP_LOCAL_OUT, &skb, NULL, skb->dst->dev, + dst_output); +#else + return nf_hook(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, skb->dst->dev, + dst_output); +#endif /* kernel < 2.6.24 */ +} + +int ip_local_out(struct sk_buff *skb) +{ + int err; + + err = __ip_local_out(skb); + if (likely(err == 1)) + err = dst_output(skb); + + return err; +} + +#endif /* kernel < 2.6.25 */ |
