IOS resolves a route’s next hop in different ways, depending on how this route has been learned and how the control plane has been set up.
As a good etiquette, from now on, I will try to use only IPv6 in my writings.
Let’s start with a directly connected route and neighbor:
R1#<strong>show ipv6 cef 2001::/64</strong>
attached to Ethernet2/0
Any packet destined to this subnet will be sent out interface Eth 2/0.
If the address is already present in the ND table, then its layer2 address will be prepended, otherwise a Neighbor Solicitation message is sent to request the L3 to L2 translation.
With a static route next hop can be a global or a link local address: in case of next hop link local, then an exit interface must be specified.
This is because link local address are not kept inside the RIB but into the FIB, which is dynamically updated and may not have updated information.
In case no LL address is present, than the node must perform another Neighbor Solicitation only outside the interface defined inside the static route, and then map the L2/L3 tuple.
R1# <strong>show ipv6 cef AFFA::1</strong>
nexthop FE80::A8BB:CCFF:FE00:302 Ethernet2/0
R1#show ipv6 cef 2000::2/128
nexthop FE80::A8BB:CCFF:FE00:200 Ethernet0/0
RIPng uses as a next hop the Link Local address of the sender.
*Jul 8 00:32:48.626: RIPng: response received from <strong>FE80::A8BB:CCFF:FE00:200</strong> on <strong>Ethernet0</strong>/0 for lab
*Jul 8 00:32:48.626: src=FE80::A8BB:CCFF:FE00:200 (Ethernet0/0)
*Jul 8 00:32:48.626: dst=FF02::9
*Jul 8 00:32:48.626: sport=521, dport=521, length=52
*Jul 8 00:32:48.626: command=2, version=1, mbz=0, #rte=2
*Jul 8 00:32:48.626: tag=0, metric=1, prefix=2000::2/128
*Jul 8 00:32:48.626: tag=0, metric=1, prefix=2001:1::/64