summaryrefslogtreecommitdiff
path: root/sys/dev/microcode/ral/microcode.h
diff options
context:
space:
mode:
authorozaki-r <ozaki-r@NetBSD.org>2016-04-26 09:30:01 +0000
committerozaki-r <ozaki-r@NetBSD.org>2016-04-26 09:30:01 +0000
commitce4e075c935f30490048c0cff03f4b4273d085bc (patch)
tree3cb0b23dfaa2abd5663f088de805868fd2c8daa7 /sys/dev/microcode/ral/microcode.h
parent9fc612ad2d65537f6fece71af7a5b65269bad26b (diff)
Stop using rt_gwroute on packet sending paths
rt_gwroute of rtentry is a reference to a rtentry of the gateway for a rtentry with RTF_GATEWAY. That was used by L2 (arp and ndp) to look up L2 addresses. By separating L2 nexthop caches, we don't need a route for the purpose and we can stop using rt_gwroute. By doing so, we can reduce referencing and modifying rtentries, which makes it easy to apply a lock (and/or psref) to the routing table and rtentries. One issue to do this is to keep RTF_REJECT behavior. It seems it was broken when we moved rtalloc1 things from L2 output routines (e.g., ether_output) to ip_hresolv_output, but (fortunately?) it works unexpectedly. What we mistook are: - RTF_REJECT was checked for any routes in L2 output routines, but in ip_hresolv_output it is checked only when the route is RTF_GATEWAY - The RTF_REJECT check wasn't copied to IPv6 (nd6_output) It seems that rt_gwroute checks hid the mistakes and it looked work (unexpectedly) and removing rt_gwroute checks unveil the issue. So we need to fix RTF_REJECT checks in ip_hresolv_output and also add them to nd6_output. One more point we have to care is returning an errno; we need to mimic looutput behavior. Originally RTF_REJECT check was done either in L2 output routines or in looutput. The latter is applied when a reject route directs to a loopback interface. However, now RTF_REJECT check is done before looutput so to keep the original behavior we need to return an errno which looutput chooses. Added rt_check_reject_route does such tweaks.
Diffstat (limited to 'sys/dev/microcode/ral/microcode.h')
0 files changed, 0 insertions, 0 deletions