From dc009781e0836fa1cb18df46ee7ac3b509738fed Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 8 Jul 2016 02:29:38 +0200 Subject: persistent keepalive: add kernel mechanism --- src/socket.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/socket.c') diff --git a/src/socket.c b/src/socket.c index ac19a47..5b7bbf8 100644 --- a/src/socket.c +++ b/src/socket.c @@ -4,6 +4,7 @@ #include "socket.h" #include "packets.h" #include "messages.h" +#include "timers.h" #include #include @@ -250,8 +251,10 @@ int socket_send_skb_to_peer(struct wireguard_peer *peer, struct sk_buff *skb, u8 read_lock_bh(&peer->endpoint_lock); ret = send(dev, skb, dst, &peer->endpoint_flow.fl4, &peer->endpoint_flow.fl6, &peer->endpoint_addr, rcu_dereference(peer->device->sock4), rcu_dereference(peer->device->sock6), dscp); - if (!ret) + if (!ret) { + timers_any_packet_sent(peer); peer->tx_bytes += skb_len; + } read_unlock_bh(&peer->endpoint_lock); rcu_read_unlock(); @@ -265,7 +268,8 @@ int socket_send_buffer_to_peer(struct wireguard_peer *peer, void *buffer, size_t if (!skb) return -ENOMEM; skb_reserve(skb, SKB_HEADER_LEN); - memcpy(skb_put(skb, len), buffer, len); + if (likely(buffer)) + memcpy(skb_put(skb, len), buffer, len); return socket_send_skb_to_peer(peer, skb, dscp); } -- cgit v1.2.3-59-g8ed1b