summaryrefslogtreecommitdiffstats
path: root/quicktun.c
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-04-26 11:35:01 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-04-26 11:35:01 +0200
commit6a9ee3470814517e13e2b838dee4fcddae8d33e7 (patch)
tree5f4e38e88e877504a8688959697842439cf2c643 /quicktun.c
parent6162ae09c6a0f62eb687e3b6ddd9ab65e7cb0886 (diff)
downloadmodquicktun-6a9ee3470814517e13e2b838dee4fcddae8d33e7.tar
modquicktun-6a9ee3470814517e13e2b838dee4fcddae8d33e7.zip
Made new xmit function compatible to 2.6.39 kernels
Diffstat (limited to 'quicktun.c')
-rw-r--r--quicktun.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/quicktun.c b/quicktun.c
index f57e480..5d9724e 100644
--- a/quicktun.c
+++ b/quicktun.c
@@ -14,6 +14,7 @@
#include <net/sock.h>
#include "quicktun.h"
+#include "compat.h"
#define DRV_NAME "quicktun"
@@ -66,18 +67,9 @@ static netdev_tx_t quicktun_net_xmit(struct sk_buff *skb, struct net_device *dev
remote_addr = rcu_dereference(tun->remote_address);
if (likely(remote_addr->addr.sin_addr.s_addr)) {
- struct flowi fl = {
- .nl_u = {
- .ip4_u = {
- .saddr = tun->local_address.sin_addr.s_addr,
- .daddr = remote_addr->addr.sin_addr.s_addr,
- .tos = 0,
- }
- },
- .proto = IPPROTO_UDP
- };
-
- if (ip_route_output_key(dev_net(dev), &rt, &fl)) {
+ rt = ip_route_output_ports(dev_net(dev), NULL, remote_addr->addr.sin_addr.s_addr, tun->local_address.sin_addr.s_addr,
+ remote_addr->addr.sin_port, tun->local_address.sin_port, IPPROTO_UDP, 0, 0);
+ if (!rt) {
tun->dev->stats.tx_carrier_errors++;
goto error;
}