tcp: Remove v6 flag from tcp_epoll_ref
This bit in the TCP specific epoll reference indicates whether the connection is IPv6 or IPv4. However the sites which refer to it are already calling accept() which (optionally) returns an address for the remote end of the connection. We can use the sa_family field in that address to determine the connection type independent of the epoll reference. This does have a cost: for the spliced case, it means we now need to get that address from accept() which introduces an extran copy_to_user(). However, in future we want to allow handling IPv4 connectons through IPv6 sockets, which means we won't be able to determine the IP version at the time we create the listening socket and epoll reference. So, at some point we'll have to pay this cost anyway. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:

committed by
Stefano Brivio

parent
7f1f2f3f51
commit
034fa8a58d
2
tcp.h
2
tcp.h
@@ -33,7 +33,6 @@ void tcp_update_l2_buf(const unsigned char *eth_d, const unsigned char *eth_s,
|
||||
* union tcp_epoll_ref - epoll reference portion for TCP connections
|
||||
* @listen: Set if this file descriptor is a listening socket
|
||||
* @outbound: Listening socket maps to outbound, spliced connection
|
||||
* @v6: Set for IPv6 sockets or connections
|
||||
* @timer: Reference is a timerfd descriptor for connection
|
||||
* @index: Index of connection in table, or port for bound sockets
|
||||
* @u32: Opaque u32 value of reference
|
||||
@@ -42,7 +41,6 @@ union tcp_epoll_ref {
|
||||
struct {
|
||||
uint32_t listen:1,
|
||||
outbound:1,
|
||||
v6:1,
|
||||
timer:1,
|
||||
index:20;
|
||||
} tcp;
|
||||
|
Reference in New Issue
Block a user