pf_route() sends traffic to a specified next hop over a specific interface. The next hop is obtained in pf_map_addr() but the interface is obtained directly via r->rpool.cur->kif` outside of the lock held in pf_map_addr() in multiple places around pf. The chosen interface is not stored in source node.
Move the interface selection into pf_map_addr(), have the function return it together with the chosen IP address and ensure it's stored in struct pf_ksrc_node, store it in the source node and use the stored value when needed.
Sponsored by: InnoGames GmbH