linux/net/bridge
Patrick McHardy 2948d2ebbb [NETFILTER]: bridge: fix double POST_ROUTING invocation
The bridge code incorrectly causes two POST_ROUTING hook invocations
for DNATed packets that end up on the same bridge device. This
happens because packets with a changed destination address are passed
to dst_output() to make them go through the neighbour output function
again to build a new destination MAC address, before they will continue
through the IP hooks simulated by bridge netfilter.

The resulting hook order is:
 PREROUTING	(bridge netfilter)
 POSTROUTING	(dst_output -> ip_output)
 FORWARD	(bridge netfilter)
 POSTROUTING	(bridge netfilter)

The deferred hooks used to abort the first POST_ROUTING invocation,
but since the only thing bridge netfilter actually really wants is
a new MAC address, we can avoid going through the IP stack completely
by simply calling the neighbour output function directly.

Tested, reported and lots of data provided by: Damien Thebault <damien.thebault@gmail.com>

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
2008-01-11 18:02:18 -08:00
..
netfilter [BRIDGE]: Properly dereference the br_should_route_hook 2007-11-29 23:58:58 +11:00
br.c [BRIDGE]: Lost call to br_fdb_fini() in br_init() error path 2007-11-29 23:41:43 +11:00
br_device.c [BRIDGE]: Assign random address. 2007-12-16 13:35:51 -08:00
br_fdb.c [BRIDGE]: Section fix. 2007-12-07 01:05:53 -08:00
br_forward.c [BRIDGE]: Kill clone argument to br_flood_* 2007-09-16 16:20:48 -07:00
br_if.c [NET]: Make the device list and device lookups per namespace. 2007-10-10 16:49:10 -07:00
br_input.c [BRIDGE]: Properly dereference the br_should_route_hook 2007-11-29 23:58:58 +11:00
br_ioctl.c [NET]: Make the device list and device lookups per namespace. 2007-10-10 16:49:10 -07:00
br_netfilter.c [NETFILTER]: bridge: fix double POST_ROUTING invocation 2008-01-11 18:02:18 -08:00
br_netlink.c [NET]: Make the device list and device lookups per namespace. 2007-10-10 16:49:10 -07:00
br_notify.c [NET]: Make device event notification network namespace safe 2007-10-10 16:49:09 -07:00
br_private.h [NET]: Make the device list and device lookups per namespace. 2007-10-10 16:49:10 -07:00
br_private_stp.h
br_stp.c [BRIDGE]: Round off STP perodic timers. 2007-05-31 01:23:39 -07:00
br_stp_bpdu.c [NET]: Make packet reception network namespace safe 2007-10-10 16:49:08 -07:00
br_stp_if.c [BRIDGE]: Fix typo in net/bridge/br_stp_if.c 2007-08-14 13:22:58 -07:00
br_stp_timer.c [BRIDGE]: Round off STP perodic timers. 2007-05-31 01:23:39 -07:00
br_sysfs_br.c kobjects: fix up improper use of the kobject name field 2007-10-12 14:51:02 -07:00
br_sysfs_if.c sysfs: kill unnecessary attribute->owner 2007-07-11 16:09:06 -07:00
Kconfig [BRIDGE]: use llc for receiving STP packets 2006-03-20 22:59:06 -08:00
Makefile [BRIDGE]: netlink interface for link management 2006-06-17 21:26:14 -07:00