Lines Matching refs:peer

9 #include "peer.h"
21 static void wg_packet_send_handshake_initiation(struct wg_peer *peer)
25 if (!wg_birthdate_has_expired(atomic64_read(&peer->last_sent_handshake),
29 atomic64_set(&peer->last_sent_handshake, ktime_get_coarse_boottime_ns());
30 net_dbg_ratelimited("%s: Sending handshake initiation to peer %llu (%pISpfsc)\n",
31 peer->device->dev->name, peer->internal_id,
32 &peer->endpoint.addr);
34 if (wg_noise_handshake_create_initiation(&packet, &peer->handshake)) {
35 wg_cookie_add_mac_to_packet(&packet, sizeof(packet), peer);
36 wg_timers_any_authenticated_packet_traversal(peer);
37 wg_timers_any_authenticated_packet_sent(peer);
38 atomic64_set(&peer->last_sent_handshake,
40 wg_socket_send_buffer_to_peer(peer, &packet, sizeof(packet),
42 wg_timers_handshake_initiated(peer);
48 struct wg_peer *peer = container_of(work, struct wg_peer,
51 wg_packet_send_handshake_initiation(peer);
52 wg_peer_put(peer);
55 void wg_packet_send_queued_handshake_initiation(struct wg_peer *peer,
59 peer->timer_handshake_attempts = 0;
66 if (!wg_birthdate_has_expired(atomic64_read(&peer->last_sent_handshake),
68 unlikely(READ_ONCE(peer->is_dead)))
71 wg_peer_get(peer);
72 /* Queues up calling packet_send_queued_handshakes(peer), where we do a
73 * peer_put(peer) after:
75 if (!queue_work(peer->device->handshake_send_wq,
76 &peer->transmit_handshake_work))
80 wg_peer_put(peer);
85 void wg_packet_send_handshake_response(struct wg_peer *peer)
89 atomic64_set(&peer->last_sent_handshake, ktime_get_coarse_boottime_ns());
90 net_dbg_ratelimited("%s: Sending handshake response to peer %llu (%pISpfsc)\n",
91 peer->device->dev->name, peer->internal_id,
92 &peer->endpoint.addr);
94 if (wg_noise_handshake_create_response(&packet, &peer->handshake)) {
95 wg_cookie_add_mac_to_packet(&packet, sizeof(packet), peer);
96 if (wg_noise_handshake_begin_session(&peer->handshake,
97 &peer->keypairs)) {
98 wg_timers_session_derived(peer);
99 wg_timers_any_authenticated_packet_traversal(peer);
100 wg_timers_any_authenticated_packet_sent(peer);
101 atomic64_set(&peer->last_sent_handshake,
103 wg_socket_send_buffer_to_peer(peer, &packet,
124 static void keep_key_fresh(struct wg_peer *peer)
130 keypair = rcu_dereference_bh(peer->keypairs.current_keypair);
138 wg_packet_send_queued_handshake_initiation(peer, false);
221 void wg_packet_send_keepalive(struct wg_peer *peer)
225 if (skb_queue_empty(&peer->staged_packet_queue)) {
231 skb->dev = peer->device->dev;
233 skb_queue_tail(&peer->staged_packet_queue, skb);
234 net_dbg_ratelimited("%s: Sending keepalive packet to peer %llu (%pISpfsc)\n",
235 peer->device->dev->name, peer->internal_id,
236 &peer->endpoint.addr);
239 wg_packet_send_staged_packets(peer);
242 static void wg_packet_create_data_done(struct wg_peer *peer, struct sk_buff *first)
247 wg_timers_any_authenticated_packet_traversal(peer);
248 wg_timers_any_authenticated_packet_sent(peer);
251 if (likely(!wg_socket_send_skb_to_peer(peer, skb,
257 wg_timers_data_sent(peer);
259 keep_key_fresh(peer);
264 struct wg_peer *peer = container_of(work, struct wg_peer, transmit_packet_work);
269 while ((first = wg_prev_queue_peek(&peer->tx_queue)) != NULL &&
272 wg_prev_queue_drop_peeked(&peer->tx_queue);
276 wg_packet_create_data_done(peer, first);
281 wg_peer_put(peer);
311 static void wg_packet_create_data(struct wg_peer *peer, struct sk_buff *first)
313 struct wg_device *wg = peer->device;
317 if (unlikely(READ_ONCE(peer->is_dead)))
320 ret = wg_queue_enqueue_per_device_and_peer(&wg->encrypt_queue, &peer->tx_queue, first,
329 wg_peer_put(peer);
333 void wg_packet_purge_staged_packets(struct wg_peer *peer)
335 spin_lock_bh(&peer->staged_packet_queue.lock);
336 DEV_STATS_ADD(peer->device->dev, tx_dropped,
337 peer->staged_packet_queue.qlen);
338 __skb_queue_purge(&peer->staged_packet_queue);
339 spin_unlock_bh(&peer->staged_packet_queue.lock);
342 void wg_packet_send_staged_packets(struct wg_peer *peer)
350 spin_lock_bh(&peer->staged_packet_queue.lock);
351 skb_queue_splice_init(&peer->staged_packet_queue, &packets);
352 spin_unlock_bh(&peer->staged_packet_queue.lock);
359 rcu_dereference_bh(peer->keypairs.current_keypair));
386 wg_peer_get(keypair->entry.peer);
388 wg_packet_create_data(peer, packets.next);
406 spin_lock_bh(&peer->staged_packet_queue.lock);
407 skb_queue_splice(&packets, &peer->staged_packet_queue);
408 spin_unlock_bh(&peer->staged_packet_queue.lock);
413 wg_packet_send_queued_handshake_initiation(peer, false);