aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/send.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2016-07-08 21:18:56 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2016-07-08 23:55:23 +0200
commitf3f58f25388902b0645d23c35d65cdb3dead895b (patch)
tree472e5806210d9c0baab32bdb3abfcd7f3c6639d4 /src/send.c
parentexamples: update ncat-client-server readme (diff)
downloadwireguard-monolithic-historical-f3f58f25388902b0645d23c35d65cdb3dead895b.tar.xz
wireguard-monolithic-historical-f3f58f25388902b0645d23c35d65cdb3dead895b.zip
keepalives: only queue keepalive when queue is empty
Diffstat (limited to 'src/send.c')
-rw-r--r--src/send.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/send.c b/src/send.c
index 1f63fd9..e1d8010 100644
--- a/src/send.c
+++ b/src/send.c
@@ -110,12 +110,15 @@ static inline void keep_key_fresh(struct wireguard_peer *peer)
void packet_send_keepalive(struct wireguard_peer *peer)
{
- struct sk_buff *skb = alloc_skb(DATA_PACKET_HEAD_ROOM + MESSAGE_MINIMUM_LENGTH, GFP_ATOMIC);
- if (unlikely(!skb))
- return;
- skb_reserve(skb, DATA_PACKET_HEAD_ROOM);
- skb->dev = netdev_pub(peer->device);
- skb_queue_tail(&peer->tx_packet_queue, skb);
+ struct sk_buff *skb;
+ if (!skb_queue_len(&peer->tx_packet_queue)) {
+ skb = alloc_skb(DATA_PACKET_HEAD_ROOM + MESSAGE_MINIMUM_LENGTH, GFP_ATOMIC);
+ if (unlikely(!skb))
+ return;
+ skb_reserve(skb, DATA_PACKET_HEAD_ROOM);
+ skb->dev = netdev_pub(peer->device);
+ skb_queue_tail(&peer->tx_packet_queue, skb);
+ }
packet_send_queue(peer);
}