Split in6_selectsrc() into in6_selectsrc_addr() and in6_selectsrc_socket().
authormelifaro <melifaro@FreeBSD.org>
Sun, 10 Jan 2016 13:40:29 +0000 (13:40 +0000)
committermelifaro <melifaro@FreeBSD.org>
Sun, 10 Jan 2016 13:40:29 +0000 (13:40 +0000)
commit21632a9bd96fd68b505602bfdd4850ab1e18574a
tree97b6bca373452e47001d3052c19a801b844cc5c5
parent62e557108e3812d8e8b16b2a263c2b82ea2538e5
Split in6_selectsrc() into in6_selectsrc_addr() and in6_selectsrc_socket().

in6_selectsrc() has 2 class of users: socket-based one (raw/udp/pcb/etc) and
  socket-less (ND code). The main reason for that change is inability to
  specify non-default FIB for callers w/o socket since (internally) inpcb
  is used to determine fib.

As as result, add 2 wrappers for in6_selectsrc() (making in6_selectsrc()
  static):
1) in6_selectsrc_socket() for the former class. Embed scope_ambiguous check
  along with returning hop limit when needed.
2) in6_selectsrc_addr() for the latter case. Add 'fibnum' argument and
  pass IPv6 address  w/ explicitly specified scope as separate argument.

Reviewed by: ae (previous version)
sys/netinet6/icmp6.c
sys/netinet6/in6_pcb.c
sys/netinet6/in6_src.c
sys/netinet6/ip6_var.h
sys/netinet6/nd6_nbr.c
sys/netinet6/raw_ip6.c
sys/netinet6/udp6_usrreq.c