summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2012-07-04 07:37:53 +0000
committerglebius <glebius@FreeBSD.org>2012-07-04 07:37:53 +0000
commit418a04b4676ef1730c653057e7bea6e0d8ff06aa (patch)
tree5a6dfb251b44f09882eafc14a986f989520add8e /etc
parent31a966157854178ad501d2f8901feb3c53aba299 (diff)
downloadFreeBSD-src-418a04b4676ef1730c653057e7bea6e0d8ff06aa.zip
FreeBSD-src-418a04b4676ef1730c653057e7bea6e0d8ff06aa.tar.gz
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)
Diffstat (limited to 'etc')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud