summaryrefslogtreecommitdiff
path: root/drivers/net/ovpn/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ovpn/io.c')
-rw-r--r--drivers/net/ovpn/io.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/net/ovpn/io.c b/drivers/net/ovpn/io.c
index dd8a8055d967..10d8afecec55 100644
--- a/drivers/net/ovpn/io.c
+++ b/drivers/net/ovpn/io.c
@@ -394,10 +394,22 @@ netdev_tx_t ovpn_net_xmit(struct sk_buff *skb, struct net_device *dev)
/* retrieve peer serving the destination IP of this packet */
peer = ovpn_peer_get_by_dst(ovpn, skb);
if (unlikely(!peer)) {
- net_dbg_ratelimited("%s: no peer to send data to\n",
- netdev_name(ovpn->dev));
+ switch (skb->protocol) {
+ case htons(ETH_P_IP):
+ net_dbg_ratelimited("%s: no peer to send data to dst=%pI4\n",
+ netdev_name(ovpn->dev),
+ &ip_hdr(skb)->daddr);
+ break;
+ case htons(ETH_P_IPV6):
+ net_dbg_ratelimited("%s: no peer to send data to dst=%pI6c\n",
+ netdev_name(ovpn->dev),
+ &ipv6_hdr(skb)->daddr);
+ break;
+ }
goto drop;
}
+ /* dst was needed for peer selection - it can now be dropped */
+ skb_dst_drop(skb);
ovpn_peer_stats_increment_tx(&peer->vpn_stats, skb->len);
ovpn_send(ovpn, skb_list.next, peer);
@@ -408,7 +420,7 @@ drop:
dev_dstats_tx_dropped(ovpn->dev);
skb_tx_error(skb);
kfree_skb_list(skb);
- return NET_XMIT_DROP;
+ return NETDEV_TX_OK;
}
/**