Hello, groupI'm experimenting with another approach to pf route-to issues mentioned in D41517 and I can't get ip6_output do what I want.
How does one force ip6_output to use the provided next hop? ip_output does not seem to have problems with that. As long as ro and ro->nh are not NULL it will just do
dst = (struct sockaddr_in *)&ro->ro_dst; … gw = (const struct sockaddr *)dst; and use those without calling fib4_lookup() But I don't see the same logic in ip6_output. There's this check: if (ro->ro_nh != NULL && fwd_tag == NULL && ro->ro_dst.sin6_family == AF_INET6 && IN6_ARE_ADDR_EQUAL(&ro->ro_dst.sin6_addr, &ip6->ip6_dst)) { /* Nexthop is valid and contains valid ifp */ nh = ro->ro_nh; }Which fails beause the IP address in ro_dst is different than in ip6_dst - I am routing traffic to some host over a gateway different than that host.
The next block of code deals with fwd_tag, which I have not used, so it restores the destination for lookup to back to ip6->ip6_dst and that prevents ip6_output from using the supplied route.
Am I holding it wrong? -- | pozdrawiam / greetings | Powered by macOS, Debian and FreeBSD | | Kajetan Staszkiewicz | www: http://vegeta.tuxpowered.net | `------------------------^--------------------------------------'
OpenPGP_0x80AAD77FA6F30053.asc
Description: OpenPGP public key
OpenPGP_signature
Description: OpenPGP digital signature