diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/receive.c | 12 | ||||
-rw-r--r-- | src/socket.c | 8 | ||||
-rw-r--r-- | src/socket.h | 1 |
3 files changed, 10 insertions, 11 deletions
diff --git a/src/receive.c b/src/receive.c index ca87476..3ad790b 100644 --- a/src/receive.c +++ b/src/receive.c @@ -25,14 +25,6 @@ static inline void rx_stats(struct wireguard_peer *peer, size_t len) peer->rx_bytes += len; } -static inline void update_latest_addr(struct wireguard_peer *peer, struct sk_buff *skb) -{ - struct endpoint endpoint; - - if (!socket_endpoint_from_skb(&endpoint, skb)) - socket_set_peer_endpoint(peer, &endpoint); -} - #define SKB_TYPE_LE32(skb) ((struct message_header *)(skb)->data)->type static inline size_t validate_header_len(struct sk_buff *skb) @@ -122,7 +114,7 @@ static void receive_handshake_packet(struct wireguard_device *wg, struct sk_buff net_dbg_skb_ratelimited("%s: Invalid handshake initiation from %pISpfsc\n", wg->dev->name, skb); return; } - update_latest_addr(peer, skb); + socket_set_peer_endpoint_from_skb(peer, skb); net_dbg_ratelimited("%s: Receiving handshake initiation from peer %Lu (%pISpfsc)\n", wg->dev->name, peer->internal_id, &peer->endpoint.addr); packet_send_handshake_response(peer); break; @@ -138,7 +130,7 @@ static void receive_handshake_packet(struct wireguard_device *wg, struct sk_buff net_dbg_skb_ratelimited("%s: Invalid handshake response from %pISpfsc\n", wg->dev->name, skb); return; } - update_latest_addr(peer, skb); + socket_set_peer_endpoint_from_skb(peer, skb); net_dbg_ratelimited("%s: Receiving handshake response from peer %Lu (%pISpfsc)\n", wg->dev->name, peer->internal_id, &peer->endpoint.addr); if (noise_handshake_begin_session(&peer->handshake, &peer->keypairs)) { timers_session_derived(peer); diff --git a/src/socket.c b/src/socket.c index ff9f449..6139ef5 100644 --- a/src/socket.c +++ b/src/socket.c @@ -217,7 +217,6 @@ int socket_endpoint_from_skb(struct endpoint *endpoint, const struct sk_buff *sk endpoint->addr6.sin6_port = udp_hdr(skb)->source; endpoint->addr6.sin6_addr = ipv6_hdr(skb)->saddr; endpoint->addr6.sin6_scope_id = ipv6_iface_scope_id(&ipv6_hdr(skb)->saddr, skb->skb_iif); - /* TODO: endpoint->addr6.sin6_flowinfo */ endpoint->src6 = ipv6_hdr(skb)->daddr; } else return -EINVAL; @@ -258,6 +257,13 @@ out: write_unlock_bh(&peer->endpoint_lock); } +void socket_set_peer_endpoint_from_skb(struct wireguard_peer *peer, const struct sk_buff *skb) +{ + struct endpoint endpoint; + if (!socket_endpoint_from_skb(&endpoint, skb)) + socket_set_peer_endpoint(peer, &endpoint); +} + void socket_clear_peer_endpoint_src(struct wireguard_peer *peer) { write_lock_bh(&peer->endpoint_lock); diff --git a/src/socket.h b/src/socket.h index 2214a46..f579d93 100644 --- a/src/socket.h +++ b/src/socket.h @@ -19,6 +19,7 @@ int socket_send_buffer_as_reply_to_skb(struct wireguard_device *wg, struct sk_bu int socket_endpoint_from_skb(struct endpoint *endpoint, const struct sk_buff *skb); void socket_set_peer_endpoint(struct wireguard_peer *peer, const struct endpoint *endpoint); +void socket_set_peer_endpoint_from_skb(struct wireguard_peer *peer, const struct sk_buff *skb); void socket_clear_peer_endpoint_src(struct wireguard_peer *peer); #if defined(CONFIG_DYNAMIC_DEBUG) || defined(DEBUG) |