Summary: | gateway with `ping -6 -e` is ignored | ||||||
---|---|---|---|---|---|---|---|
Product: | Base System | Reporter: | jcaplan | ||||
Component: | kern | Assignee: | freebsd-net (Nobody) <net> | ||||
Status: | Open --- | ||||||
Severity: | Affects Some People | CC: | emaste, grahamperrin, jlduran, net, zlei | ||||
Priority: | --- | Keywords: | easy, regression | ||||
Version: | 13.0-STABLE | Flags: | koobs:
mfc-stable13?
koobs: mfc-stable12- koobs: mfc-stable11- |
||||
Hardware: | Any | ||||||
OS: | Any | ||||||
Attachments: |
|
*** Bug 257287 has been marked as a duplicate of this bug. *** |
Created attachment 226555 [details] proposed patch Overview -------- Specifying a gateway with `ping -6 -e` is ignored. Steps to Reproduce ------------------ Two devices D1 and D2 D1: ifconfig vmx0 inet6 3ffe::1 ifconfig vmx1 inet6 2001::1 D2: ifconfig vmx0 inet6 3ffe::2 ifconfig vmx1 inet6 2001::2 Then on D1: ping -6 -e 3ffe::2 -c3 2001::2 Actual Results: --------------- The icmp6 message goes out from D1 on vmx1 Expected Results ---------------- The icmp6 message goes out from D1 on vmx0 Build Date & Hardware --------------------- FreeBSD freebsd 13.0-RELEASE FreeBSD 13.0-RELEASE #6 releng/13.0-n244733-ea31abc261f: Sat Jun 19 06:23:53 UTC 2021 Additional Information ---------------------- See attached patch. Control flow has changed quite a bit in ip6_output() since 12.2. In this scenario, we have ro == NULL and hit the else block to determine the outgoing interface based on the destination ip. When ping6 uses the IPV6_NEXTHOP option, then opt->ip6po_nextroute.ro_nh is defined. However, when we hit the old check later on, nh == NULL so it is ignored and we never get a chance to check for a hard coded next hop. Instead, when ro == NULL, need to check the option and hard code the destination prior to calling fib6_lookup() which will assign the interface.