diff options
author | David Howells <dhowells@redhat.com> | 2017-08-29 10:18:37 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2017-08-29 10:55:20 +0100 |
commit | 7b674e390e513ea443c5a0f27ec95e93fb8a94fa (patch) | |
tree | 21ed0fb6ec3d190608bf72cbf9e3776d7e296fbe /net/rxrpc/ar-internal.h | |
parent | 0a3785855edcdb326ebf052c4f92ebc2710614c6 (diff) | |
download | linux-7b674e390e513ea443c5a0f27ec95e93fb8a94fa.tar.gz linux-7b674e390e513ea443c5a0f27ec95e93fb8a94fa.tar.bz2 linux-7b674e390e513ea443c5a0f27ec95e93fb8a94fa.zip |
rxrpc: Fix IPv6 support
Fix IPv6 support in AF_RXRPC in the following ways:
(1) When extracting the address from a received IPv4 packet, if the local
transport socket is open for IPv6 then fill out the sockaddr_rxrpc
struct for an IPv4-mapped-to-IPv6 AF_INET6 transport address instead
of an AF_INET one.
(2) When sending CHALLENGE or RESPONSE packets, the transport length needs
to be set from the sockaddr_rxrpc::transport_len field rather than
sizeof() on the IPv4 transport address.
(3) When processing an IPv4 ICMP packet received by an IPv6 socket, set up
the address correctly before searching for the affected peer.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/ar-internal.h')
-rw-r--r-- | net/rxrpc/ar-internal.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h index 8cac66774de1..227e24794055 100644 --- a/net/rxrpc/ar-internal.h +++ b/net/rxrpc/ar-internal.h @@ -830,7 +830,6 @@ void rxrpc_process_connection(struct work_struct *); */ extern unsigned int rxrpc_connection_expiry; -int rxrpc_extract_addr_from_skb(struct sockaddr_rxrpc *, struct sk_buff *); struct rxrpc_connection *rxrpc_alloc_connection(gfp_t); struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *, struct sk_buff *); @@ -1060,7 +1059,8 @@ static inline void rxrpc_sysctl_exit(void) {} /* * utils.c */ -int rxrpc_extract_addr_from_skb(struct sockaddr_rxrpc *, struct sk_buff *); +int rxrpc_extract_addr_from_skb(struct rxrpc_local *, struct sockaddr_rxrpc *, + struct sk_buff *); static inline bool before(u32 seq1, u32 seq2) { |