diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2016-07-08 21:18:56 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2016-07-08 23:55:23 +0200 |
commit | f3f58f25388902b0645d23c35d65cdb3dead895b (patch) | |
tree | 472e5806210d9c0baab32bdb3abfcd7f3c6639d4 /src/send.c | |
parent | examples: update ncat-client-server readme (diff) | |
download | wireguard-monolithic-historical-f3f58f25388902b0645d23c35d65cdb3dead895b.tar.xz wireguard-monolithic-historical-f3f58f25388902b0645d23c35d65cdb3dead895b.zip |
keepalives: only queue keepalive when queue is empty
Diffstat (limited to '')
-rw-r--r-- | src/send.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -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); } |