android_kernel_xiaomi_sm8350/drivers/net
Max Krasnyansky f271b2cc78 tun: Fix/rewrite packet filtering logic
Please see the following thread to get some context on this
	http://marc.info/?l=linux-netdev&m=121564433018903&w=2

Basically the issue is that current multi-cast filtering stuff in
the TUN/TAP driver is seriously broken.
Original patch went in without proper review and ACK. It was broken and
confusing to start with and subsequent patches broke it completely.
To give you an idea of what's broken here are some of the issues:

- Very confusing comments throughout the code that imply that the
character device is a network interface in its own right, and that packets
are passed between the two nics. Which is completely wrong.

- Wrong set of ioctls is used for setting up filters. They look like
shortcuts for manipulating state of the tun/tap network interface but
in reality manipulate the state of the TX filter.

- ioctls that were originally used for setting address of the the TX filter
got "fixed" and now set the address of the network interface itself. Which
made filter totaly useless.

- Filtering is done too late. Instead of filtering early on, to avoid
unnecessary wakeups, filtering is done in the read() call.

The list goes on and on :)

So the patch cleans all that up. It introduces simple and clean interface for
setting up TX filters (TUNSETTXFILTER + tun_filter spec) and does filtering
before enqueuing the packets.

TX filtering is useful in the scenarios where TAP is part of a bridge, in
which case it gets all broadcast, multicast and potentially other packets when
the bridge is learning. So for example Ethernet tunnelling app may want to
setup TX filters to avoid tunnelling multicast traffic. QEMU and other
hypervisors can push RX filtering that is currently done in the guest into the
host context therefore saving wakeups and unnecessary data transfer.

Signed-off-by: Max Krasnyansky <maxk@qualcomm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2008-07-14 22:18:19 -07:00
..
appletalk
arcnet
arm ARM: IXP4xx Ethernet NAPI fix 2008-07-11 10:01:12 -04:00
atlx Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-19 16:00:04 -07:00
bonding bonding: Check return of dev_set_promiscuity/allmulti 2008-07-14 20:51:36 -07:00
can
chelsio
cris
cxgb3 vlan: move struct vlan_dev_info to private header 2008-07-08 03:23:57 -07:00
e1000 netdrv: don't truncate VLAN TCI with VLAN stripping 2008-07-06 20:48:41 -07:00
e1000e netdrv: don't truncate VLAN TCI with VLAN stripping 2008-07-06 20:48:41 -07:00
ehea ehea: Access iph->tot_len with correct endianness 2008-07-04 08:15:28 -04:00
fec_8xx
fs_enet Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-07-05 23:08:07 -07:00
hamradio netdev: Move _xmit_lock and xmit_lock_owner into netdev_queue. 2008-07-08 23:13:53 -07:00
ibm_newemac ibm_newemac: Fixes entry of short packets 2008-07-04 08:17:20 -04:00
igb netdrv: don't truncate VLAN TCI with VLAN stripping 2008-07-06 20:48:41 -07:00
irda Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-07-08 16:30:17 -07:00
ixgb netdrv: don't truncate VLAN TCI with VLAN stripping 2008-07-06 20:48:41 -07:00
ixgbe net: Delete NETDEVICES_MULTIQUEUE kconfig option. 2008-07-08 23:14:24 -07:00
ixp2000
mlx4
myri10ge Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-10 02:22:26 -07:00
netxen [netdrvr] netxen: fix netxen_pci_tbl[] breakage 2008-06-27 01:30:46 -04:00
pcmcia Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-28 01:19:40 -07:00
phy
sfc Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-13 20:52:39 -07:00
skfp
tokenring
tulip tulip: remove wrapper around get_unaligned 2008-06-28 10:23:37 -04:00
usb rndis_host: pass buffer length to rndis_command 2008-06-28 10:23:34 -04:00
wan Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-07-05 23:08:07 -07:00
wireless Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 2008-07-14 20:40:34 -07:00
3c59x.c [netdrvr] 3c59x: remove irqs_disabled warning from local_bh_enable 2008-06-27 01:30:33 -04:00
3c501.c
3c501.h
3c503.c 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
3c503.h
3c505.c
3c505.h
3c507.c
3c509.c
3c515.c
3c523.c
3c523.h
3c527.c
3c527.h
7990.c add missing lance_* exports 2008-06-10 18:20:17 -04:00
7990.h
8139cp.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
8139too.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
8390.c
8390.h 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
8390p.c 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
82596.c
a2065.c drivers/net/: remove write-only "last_dev" 2008-06-11 21:58:34 -04:00
a2065.h
ac3200.c
acenic_firmware.h
acenic.c
acenic.h
amd8111e.c amd8111e: delete non NAPI code from the driver. 2008-07-07 22:40:58 -07:00
amd8111e.h
apne.c
ariadne.c
ariadne.h
at1700.c
atarilance.c make drivers/net/atarilance.c:lance_addr_list[] static 2008-06-11 21:58:32 -04:00
atp.c
atp.h
au1000_eth.c
au1000_eth.h
ax88796.c
b44.c ssb, b43, b43legacy, b44: Rewrite SSB DMA API 2008-06-27 09:09:15 -04:00
b44.h
bfin_mac.c
bfin_mac.h
bmac.c
bmac.h
bnx2_fw2.h bnx2: Update firmware to support multi rx rings. 2008-06-19 16:42:39 -07:00
bnx2_fw.h
bnx2.c bnx2: Update driver version to 1.7.7. 2008-06-19 16:44:44 -07:00
bnx2.h bnx2: Turn on multi rx rings. 2008-06-19 16:43:17 -07:00
bnx2x_fw_defs.h bnx2x: Add support for BCM57711 HW 2008-06-23 20:33:01 -07:00
bnx2x_hsi.h bnx2x: New statistics code 2008-06-23 20:33:36 -07:00
bnx2x_init_values.h bnx2x: New microcode part 3/3 2008-06-23 20:32:28 -07:00
bnx2x_init.h bnx2x: Add support for BCM57711 HW 2008-06-23 20:33:01 -07:00
bnx2x_link.c bnx2x: Add support for BCM57711 HW 2008-06-23 20:33:01 -07:00
bnx2x_link.h bnx2x: Adding bnx2x_link 2008-06-23 20:27:26 -07:00
bnx2x_main.c bnx2x: Update version 2008-06-23 20:36:51 -07:00
bnx2x_reg.h bnx2x: Add support for BCM57711 HW 2008-06-23 20:33:01 -07:00
bnx2x.h bnx2x: Add TPA, Broadcoms HW LRO 2008-06-23 20:34:36 -07:00
bsd_comp.c
cassini.c
cassini.h
cpmac.c net: Delete NETDEVICES_MULTIQUEUE kconfig option. 2008-07-08 23:14:24 -07:00
cs89x0.c
cs89x0.h
de600.c
de600.h
de620.c
de620.h
declance.c drivers/net/: remove write-only "last_dev" 2008-06-11 21:58:34 -04:00
defxx.c
defxx.h
depca.c
depca.h
dl2k.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
dl2k.h
dm9000.c DM9000: Remove DEFAULT_TRIGGER for request_irq() flags. 2008-06-24 22:58:36 -04:00
dm9000.h DM9000: Add support for DM9000A and DM9000B chips 2008-06-24 22:57:16 -04:00
dummy.c
e100.c e100: Do pci_dma_sync after skb_alloc for proper operation on ixp4xx 2008-06-27 01:30:59 -04:00
e2100.c
eepro100.c
eepro.c
eexpress.c
eexpress.h
enc28j60_hw.h
enc28j60.c net/enc28j60: low power mode 2008-06-17 23:07:29 -04:00
epic100.c
eql.c
es3210.c
eth16i.c
ewrk3.c
ewrk3.h
fealnx.c [netdrvr] fealnx: clean up nasty mess of arch ifdefs 2008-06-28 10:23:37 -04:00
fec_mpc52xx_phy.c
fec_mpc52xx.c fec_mpc52xx: MPC52xx_MESSAGES_DEFAULT: 2nd NETIF_MSG_IFDOWN => IFUP 2008-06-11 22:24:42 -04:00
fec_mpc52xx.h
fec.c
fec.h
forcedeth.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-07-05 23:08:07 -07:00
gianfar_ethtool.c
gianfar_mii.c
gianfar_mii.h
gianfar_sysfs.c
gianfar.c
gianfar.h
hamachi.c
hp100.c
hp100.h
hp-plus.c
hp.c 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
hplance.c make hplance_{init,cleanup}_module() static 2008-06-11 21:58:32 -04:00
hplance.h
hydra.c
ibmlana.c
ibmlana.h
ibmveth.c
ibmveth.h
ifb.c netdev: The ingress_lock member is no longer needed. 2008-07-08 17:33:13 -07:00
ioc3-eth.c
ipg.c ipg: run-time configurable jumbo frame support 2008-07-04 08:46:54 -04:00
ipg.h ipg: run-time configurable jumbo frame support 2008-07-04 08:46:54 -04:00
isa-skeleton.c
iseries_veth.c
jazzsonic.c
Kconfig net: Delete NETDEVICES_MULTIQUEUE kconfig option. 2008-07-08 23:14:24 -07:00
korina.c
lance.c
lasi_82596.c
lib8390.c [netdrvr] Fix 8390 build breakage 2008-06-11 22:06:31 -04:00
lib82596.c
LICENSE.SRC
lne390.c
loopback.c
lp486e.c
mac89x0.c
mac8390.c drivers/net/mac8390.c: make functions static 2008-06-11 21:58:33 -04:00
macb.c macb: use random mac if stored address in EEPROM is invalid 2008-06-11 21:58:28 -04:00
macb.h
mace.c
mace.h
macmace.c
macsonic.c drivers/net/macsonic.c: make functions static 2008-06-11 21:58:37 -04:00
macvlan.c macvlan: Check return of dev_set_allmulti 2008-07-14 20:57:07 -07:00
Makefile 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
meth.c
meth.h
mii.c
mipsnet.c
mv643xx_eth.c mv643xx_eth: update driver version and author fields 2008-06-12 08:40:39 +02:00
mvme147.c
myri_code.h
myri_sbus.c
myri_sbus.h
natsemi.c
ne2.c 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
ne2k-pci.c
ne3210.c
ne-h8300.c
ne.c 8390: Split 8390 support into a pausing and a non pausing driver core 2008-07-04 08:47:51 -04:00
netconsole.c
netx-eth.c
ni52.c
ni52.h
ni65.c
ni65.h
ni5010.c
ni5010.h
niu.c niu: Add support for rx flow hash configuration. 2008-07-02 03:49:11 -07:00
niu.h
ns83820.c
pasemi_mac_ethtool.c
pasemi_mac.c pasemi_mac: Access iph->tot_len with correct endianness 2008-07-04 08:15:31 -04:00
pasemi_mac.h
pci-skeleton.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
pcnet32.c
plip.c
ppp_async.c
ppp_deflate.c
ppp_generic.c
ppp_mppe.c
ppp_mppe.h
ppp_synctty.c
pppoe.c pppoe: warning fix 2008-06-20 21:58:02 -07:00
pppol2tp.c l2tp: Fix potential memory corruption in pppol2tp_recvmsg() 2008-06-10 12:35:00 -07:00
pppox.c
ps3_gelic_net.c
ps3_gelic_net.h
ps3_gelic_wireless.c wext: Emit event stream entries correctly when compat. 2008-06-16 18:50:49 -07:00
ps3_gelic_wireless.h PS3: gelic: Kill the static bounce buffer 2008-06-03 15:00:27 -04:00
qla3xxx.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-28 01:19:40 -07:00
qla3xxx.h
r6040.c drivers/net/r6040.c: Eliminate double sizeof 2008-06-27 01:28:25 -04:00
r8169.c r8169: remove non-napi code 2008-06-29 15:08:28 +02:00
rionet.c
rrunner.c
rrunner.h
s2io-regs.h
s2io.c net: Delete NETDEVICES_MULTIQUEUE kconfig option. 2008-07-08 23:14:24 -07:00
s2io.h Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-28 01:19:40 -07:00
saa9730.c
saa9730.h
sb1000.c
sb1250-mac.c
sc92031.c
seeq8005.c
seeq8005.h
sgiseeq.c
sgiseeq.h
sh_eth.c net: sh_eth: Fix compile error sh_eth 2008-06-28 10:23:33 -04:00
sh_eth.h net: sh_eth: Fix compile error sh_eth 2008-06-28 10:23:33 -04:00
sis190.c
sis900.c
sis900.h
skge.c
skge.h
sky2.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-19 16:00:04 -07:00
sky2.h sky2: 88E8057 chip support 2008-06-17 23:59:39 -04:00
slhc.c
slip.c
slip.h
smc91x.c net: Eliminate flush_scheduled_work() calls while RTNL is held. 2008-06-12 02:22:02 -07:00
smc91x.h smc91x: fix build error from the SMC_GET_MAC_ADDR API change 2008-06-11 08:38:18 -07:00
smc911x.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-13 20:52:39 -07:00
smc911x.h Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-13 20:52:39 -07:00
smc9194.c
smc9194.h
smc-mca.c
smc-ultra32.c
smc-ultra.c
sni_82596.c
sonic.c
sonic.h
Space.c
spider_net_ethtool.c
spider_net.c
spider_net.h
starfire_firmware.h
starfire_firmware.pl
starfire.c starfire: delete non NAPI code from the driver. 2008-07-07 22:40:42 -07:00
stnic.c
sun3_82586.c
sun3_82586.h
sun3lance.c
sunbmac.c
sunbmac.h
sundance.c
sungem_phy.c
sungem_phy.h
sungem.c
sungem.h
sunhme.c sunhme: Cleanup use of deprecated calls to save_and_cli and restore_flags. 2008-06-04 12:06:28 -07:00
sunhme.h
sunlance.c drivers/net/: remove write-only "last_dev" 2008-06-11 21:58:34 -04:00
sunqe.c
sunqe.h
sunvnet.c
sunvnet.h
tc35815.c tc35815: Fix receiver hangup on Rx FIFO overflow 2008-06-27 01:27:43 -04:00
tehuti_fw.h
tehuti.c netdrv: don't truncate VLAN TCI with VLAN stripping 2008-07-06 20:48:41 -07:00
tehuti.h netdrv: don't truncate VLAN TCI with VLAN stripping 2008-07-06 20:48:41 -07:00
tg3.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-10 02:22:26 -07:00
tg3.h
tlan.c
tlan.h
tsi108_eth.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
tsi108_eth.h
tun.c tun: Fix/rewrite packet filtering logic 2008-07-14 22:18:19 -07:00
typhoon-firmware.h
typhoon.c [netdrvr] kill sync_irq-before-freq_irq pattern 2008-06-28 10:23:38 -04:00
typhoon.h
ucc_geth_ethtool.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2008-06-10 02:22:26 -07:00
ucc_geth_mii.c
ucc_geth_mii.h
ucc_geth.c
ucc_geth.h
veth.c
via-rhine.c
via-velocity.c
via-velocity.h
virtio_net.c virtio: use callback on empty in virtio_net 2008-06-10 18:20:32 -04:00
wd.c
xen-netfront.c
yellowfin.c
znet.c
zorro8390.c