aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2017-10-06 17:01:15 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2017-10-06 18:01:54 +0200
commit5101cb7615c68f7756d14fc70aca807a251f5048 (patch)
tree3b7316c95bcda002e1d3157782f9b0fbbdac3aee
parentsocket: don't bother recomparing afterwards (diff)
downloadwireguard-monolithic-historical-5101cb7615c68f7756d14fc70aca807a251f5048.tar.xz
wireguard-monolithic-historical-5101cb7615c68f7756d14fc70aca807a251f5048.zip
socket: gcc inlining makes this faster
-rw-r--r--src/receive.c12
-rw-r--r--src/socket.c8
-rw-r--r--src/socket.h1
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)