NetBSD/sys/netinet/files.netinet
dyoung c308b1c661 Here are various changes designed to protect against bad IPv4
routing caused by stale route caches (struct route).  Route caches
are sprinkled throughout PCBs, the IP fast-forwarding table, and
IP tunnel interfaces (gre, gif, stf).

Stale IPv6 and ISO route caches will be treated by separate patches.

Thank you to Christoph Badura for suggesting the general approach
to invalidating route caches that I take here.

Here are the details:

Add hooks to struct domain for tracking and for invalidating each
domain's route caches: dom_rtcache, dom_rtflush, and dom_rtflushall.

Introduce helper subroutines, rtflush(ro) for invalidating a route
cache, rtflushall(family) for invalidating all route caches in a
routing domain, and rtcache(ro) for notifying the domain of a new
cached route.

Chain together all IPv4 route caches where ro_rt != NULL.  Provide
in_rtcache() for adding a route to the chain.  Provide in_rtflush()
and in_rtflushall() for invalidating IPv4 route caches.  In
in_rtflush(), set ro_rt to NULL, and remove the route from the
chain.  In in_rtflushall(), walk the chain and remove every route
cache.

In rtrequest1(), call rtflushall() to invalidate route caches when
a route is added.

In gif(4), discard the workaround for stale caches that involves
expiring them every so often.

Replace the pattern 'RTFREE(ro->ro_rt); ro->ro_rt = NULL;' with a
call to rtflush(ro).

Update ipflow_fastforward() and all other users of route caches so
that they expect a cached route, ro->ro_rt, to turn to NULL.

Take care when moving a 'struct route' to rtflush() the source and
to rtcache() the destination.

In domain initializers, use .dom_xxx tags.

KNF here and there.
2006-12-09 05:33:04 +00:00

46 lines
1.4 KiB
Plaintext

# $NetBSD: files.netinet,v 1.17 2006/12/09 05:33:04 dyoung Exp $
defflag opt_tcp_debug.h TCP_DEBUG
defflag opt_in_route.h IN_RTFLUSH_DEBUG
defparam opt_tcp_debug.h TCP_NDEBUG
defflag opt_inet.h INET INET6 INET6_MD_CKSUM TCP_SIGNATURE
TCP_OUTPUT_COUNTERS TCP_REASS_COUNTERS IPSELSRC
defparam opt_inet_conf.h SUBNETSARELOCAL HOSTZEROBROADCAST
defflag MROUTING
defflag PIM
defflag TCP_COMPAT_42
defparam opt_tcp_space.h TCP_RECVSPACE TCP_SENDSPACE
defflag opt_inet_csum.h INET_CSUM_COUNTERS TCP_CSUM_COUNTERS
UDP_CSUM_COUNTERS
defparam opt_tcp_congctl.h TCP_CONGCTL_DEFAULT
file netinet/igmp.c inet
file netinet/in.c inet
file netinet/in_offload.c inet
file netinet/in_pcb.c inet
file netinet/in_proto.c inet
file netinet/in_route.c inet
file netinet/in_selsrc.c inet & ipselsrc
file netinet/ip_flow.c inet & gateway
file netinet/ip_icmp.c inet
file netinet/ip_id.c inet
file netinet/ip_input.c inet
file netinet/ip_mroute.c inet & mrouting
file netinet/ip_output.c inet
file netinet/raw_ip.c inet
file netinet/tcp_debug.c (inet | inet6) & tcp_debug
file netinet/tcp_input.c inet | inet6
file netinet/tcp_output.c inet | inet6
file netinet/tcp_sack.c inet | inet6
file netinet/tcp_subr.c inet | inet6
file netinet/tcp_timer.c inet | inet6
file netinet/tcp_usrreq.c inet | inet6
file netinet/tcp_congctl.c inet | inet6
file netinet/udp_usrreq.c inet | inet6