>> Have you considered using ip_route_output_key() for IPv4 or >> ip6_route_output() for IPv6 to decide if this is a loopback? >> For reference you can check the flow starting at rdma_resolve_ip() >> > > Hi Moni, > > Yes, I had looked into it, but I haven't seen how I can find > out if the destination IP belongs to the same RXE. > The loopback flag will give us the "same host" > confirmation, but not the same rxe instance, right? > > Any ideas would be welcomed. > > Thanks, > Marcel > Hi Marcel
You are right about that. IFF_LOOPBACK tells you that the source and destination addresses are on the same host but not necessarily on the same RXE device. As Leon mentioned, calling addrX_same_rxe() for each packet seems to heavy , especially when the use case that justifies it (instead of calling memcmp() on src and dst) is rare. Do you agree? If so I think that marking a connection as loopback once is the right approach For RC/UC - when modified to RTR For UD - this is harder. IsLoopback() is function of the WQE (or at least the QP and AH together( but not the QP. I think you can add an improvement that will work for the majority of cases. This is a sketch of what I have in mind. Let me know what you think please 1. Add bool last_used_qp to AH structure 2. Add bool is_loopback_with_last_qp to AH structure 3. Set values to AH.last_used_qp and AH.is_loopback_with_last_qp in post_send() modify_ah(),... 4. Mark WQE as loopback depending on the above