freebsd-skq/sys/netinet6
glebius 418a04b467 When ip_output()/ip6_output() is supplied a struct route *ro argument,
it skips FLOWTABLE lookup. However, the non-NULL ro has dual meaning
here: it may be supplied to provide route, and it may be supplied to
store and return to caller the route that ip_output()/ip6_output()
finds. In the latter case skipping FLOWTABLE lookup is pessimisation.

The difference between struct route filled by FLOWTABLE and filled
by rtalloc() family is that the former doesn't hold a reference on
its rtentry. Reference is hold by flow entry, and it is about to
be released in future. Thus, route filled by FLOWTABLE shouldn't
be passed to RTFREE() macro.

- Introduce new flag for struct route/route_in6, that marks route
  not holding a reference on rtentry.
- Introduce new macro RO_RTFREE() that cleans up a struct route
  depending on its kind.
- All callers to ip_output()/ip6_output() that do supply non-NULL
  but empty route should use RO_RTFREE() to free results of
  lookup.
- ip_output()/ip6_output() now do FLOWTABLE lookup always when
  ro->ro_rt == NULL.

Tested by:	tuexen (SCTP part)
2012-07-04 07:37:53 +00:00
..
dest6.c
frag6.c After some off-list discussion, revert a number of changes to the 2010-11-22 19:32:54 +00:00
icmp6.c MFp4 bz_ipv6_fast: 2012-05-25 01:42:48 +00:00
icmp6.h
in6_cksum.c MFp4 bz_ipv6_fast: 2012-05-24 18:25:09 +00:00
in6_gif.c Merge multi-FIB IPv6 support from projects/multi-fibv6/head/: 2012-02-17 02:39:58 +00:00
in6_gif.h
in6_ifattach.c Merge multi-FIB IPv6 support from projects/multi-fibv6/head/: 2012-02-17 02:39:58 +00:00
in6_ifattach.h
in6_mcast.c Merge multi-FIB IPv6 support from projects/multi-fibv6/head/: 2012-02-17 02:39:58 +00:00
in6_pcb.c in6_pcblookup_local() still can return a pcb with NULL 2012-03-21 08:43:38 +00:00
in6_pcb.h Implement a CPU-affine TCP and UDP connection lookup data structure, 2011-06-06 12:55:02 +00:00
in6_pcbgroup.c Implement a CPU-affine TCP and UDP connection lookup data structure, 2011-06-06 12:55:02 +00:00
in6_proto.c o Convert IPv6 read-only stats sysctls to the read-write ones. 2011-12-19 05:50:34 +00:00
in6_rmx.c Merge multi-FIB IPv6 support from projects/multi-fibv6/head/: 2012-02-17 02:39:58 +00:00
in6_src.c Just add a comment to further investigate when being closer to that code 2012-06-22 21:26:35 +00:00
in6_var.h Merge multi-FIB IPv6 support from projects/multi-fibv6/head/: 2012-02-17 02:39:58 +00:00
in6.c Fix a LOR acquiring the if_afdata lock while holding an rtentry lock. 2012-06-25 20:56:32 +00:00
in6.h MFp4 bz_ipv6_fast: 2012-05-24 18:25:09 +00:00
ip6_ecn.h
ip6_forward.c Seperate SCTP checksum offloading for IPv4 and IPv6. 2012-05-30 20:56:07 +00:00
ip6_id.c
ip6_input.c Deliver IPV6_TCLASS, IPV6_HOPLIMIT and IPV6_PKTINFO cmsgs (if 2012-06-12 13:57:56 +00:00
ip6_ipsec.c It turns out that too many drivers are not only parsing the L2/3/4 2012-05-28 09:30:13 +00:00
ip6_ipsec.h
ip6_mroute.c Remove route caching from IP multicast routing code. There is no 2012-07-02 19:44:18 +00:00
ip6_mroute.h Remove route caching from IP multicast routing code. There is no 2012-07-02 19:44:18 +00:00
ip6_output.c When ip_output()/ip6_output() is supplied a struct route *ro argument, 2012-07-04 07:37:53 +00:00
ip6_var.h MFp4 bz_ipv6_fast: 2012-05-25 01:48:15 +00:00
ip6.h
ip6protosw.h
mld6_var.h
mld6.c Kick the current-state report timer when a V1 group report would 2012-06-28 23:48:40 +00:00
mld6.h
nd6_nbr.c When ip_output()/ip6_output() is supplied a struct route *ro argument, 2012-07-04 07:37:53 +00:00
nd6_rtr.c Merge multi-FIB IPv6 support from projects/multi-fibv6/head/: 2012-02-17 02:39:58 +00:00
nd6.c MFp4 bz_ipv6_fast: 2012-05-25 09:27:16 +00:00
nd6.h Mark a couple of file local functions static and stop exporting them. 2012-01-05 01:14:35 +00:00
pim6_var.h
pim6.h
raw_ip6.c Merge multi-FIB IPv6 support from projects/multi-fibv6/head/: 2012-02-17 02:39:58 +00:00
raw_ip6.h
route6.c MFp4 bz_ipv6_fast: 2012-05-25 01:43:52 +00:00
scope6_var.h MFp4 bz_ipv6_fast: 2012-05-24 16:30:13 +00:00
scope6.c MFp4 bz_ipv6_fast: 2012-05-24 16:30:13 +00:00
sctp6_usrreq.c Move common code parts to sctp_common_input_processing(). 2012-07-02 16:44:09 +00:00
sctp6_var.h Use consistent text at the begining of the files. 2012-05-23 11:26:28 +00:00
send.c Mark MALLOC_DEFINEs static that have no corresponding MALLOC_DECLAREs. 2011-11-07 06:44:47 +00:00
send.h Use uint8_t for sockaddr sa_len. 2011-06-05 11:40:30 +00:00
tcp6_var.h
udp6_usrreq.c It turns out that too many drivers are not only parsing the L2/3/4 2012-05-28 09:30:13 +00:00
udp6_var.h