On Thu, Feb 20, 2025 at 11:08:28AM -0500, Jon Maloy wrote: > > > On 2025-02-19 22:47, David Gibson wrote: > > On Wed, Feb 19, 2025 at 02:30:05PM -0500, Jon Maloy wrote: > > > Reconstruct incoming ICMP headers for failed UDP connect and forward back > > > to local peer. > > > > > > v2: - Added patch breaking out udp header creation from function > > > tap_udp4_send(). > > > - Updated the ICMP creation by using the new function. > > > - Added logics to find correct flow, depending on origin. > > > - All done after feedback from David Gibson. > > > v3: - More changes after feedback from David Gibson. > > > > [...] > > > "listening" socket. > > > > The only way I can see to fix this would be to create connect()ed > > sockets for both ends of a flow when we establish it. I _think_ we can > > have the listening and connected socket concurrently (at least with > > REUSEADDR) with the connect()ed socket taking priority when it > > matches. > > > > However, it does have a complication: there's a brief time window > > between bind() and connect() on the new socket, when it might pick up > > packets that should go to the original listening socket. We'd need to > > decide what to do with that case. > > > > In any case, it kind of looks like there's not much point trying to > > handle error events on the listening socket (beyond a debug() > > message), since I'm not sure such events are ever delivered. > > > > I eliminated the handling of listener sockets ICMPs in my latest > version. I think that makes sense for now. > I can create a separate connected socket in a separate patch, > if you agree that is the way to go. That's reasonable. Fwiw someone momentarily popped up on the IRC and suggested trying to read MSG_ERRQUEUE for the listening sockets on EPOLLIN events. I don't know if that will do anything useful, but you could try. -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson