mirror of
https://passt.top/passt
synced 2025-06-12 18:45:34 +02:00
udp: Merge udp[46]_mh_recv arrays
We've already gotten rid of most of the IPv4/IPv6 specific data structures in udp.c by merging them with each other. One significant one remains: udp[46]_mh_recv. This was a bit awkward to remove because of a subtle interaction. We initialise the msg_namelen fields to represent the total size we have for a socket address, but when we receive into the arrays those are modified to the actual length of the sockaddr we received. That meant that naively merging the arrays meant that if we received IPv4 datagrams, then IPv6 datagrams, the addresses for the latter would be truncated. In this patch address that by resetting the received msg_namelen as soon as we've found a flow for the datagram. Finding the flow is the only thing that might use the actual sockaddr length, although we in fact don't need it for the time being. This also removes the last use of the 'v6' field from udp_listen_epoll_ref, so remove that as well. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
418feb37ec
commit
620e19a1b4
2 changed files with 17 additions and 39 deletions
2
udp.h
2
udp.h
|
@ -26,14 +26,12 @@ void udp_update_l2_buf(const unsigned char *eth_d, const unsigned char *eth_s);
|
|||
* union udp_listen_epoll_ref - epoll reference for "listening" UDP sockets
|
||||
* @port: Source port for connected sockets, bound port otherwise
|
||||
* @pif: pif for this socket
|
||||
* @v6: Set for IPv6 sockets or connections
|
||||
* @u32: Opaque u32 value of reference
|
||||
*/
|
||||
union udp_listen_epoll_ref {
|
||||
struct {
|
||||
in_port_t port;
|
||||
uint8_t pif;
|
||||
bool v6:1;
|
||||
};
|
||||
uint32_t u32;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue