26 May, 2011
1 commit
-
Migrate is_vlan_dev() to if_vlan.h so that core networkig can use it
Signed-off-by: Neil Horman
CC: davem@davemloft.net
CC: bhutchings@solarflare.com
Signed-off-by: David S. Miller
13 May, 2011
1 commit
-
Fix VLAN features propagation for devices which change vlan_features.
For this to work, driver needs to make sure netdev_features_changed()
gets called after the change (it is e.g. after ndo_set_features()).Side effect is that a user might request features that will never
be enabled on a VLAN device.Signed-off-by: Michał Mirosław
Signed-off-by: David S. Miller
12 May, 2011
1 commit
-
Conflicts:
drivers/net/benet/be_main.c
11 May, 2011
1 commit
-
ip link add link eth2 eth2.103 type vlan id 103 gvrp on loose_binding on
ip link set eth2.103 up
rmmod tg3 # driver providing eth2BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [] garp_request_leave+0x3e/0xc0 [garp]
PGD 11d251067 PUD 11b9e0067 PMD 0
Oops: 0000 [#1] SMP
last sysfs file: /sys/devices/virtual/net/eth2.104/ifindex
CPU 0
Modules linked in: tg3(-) 8021q garp nfsd lockd auth_rpcgss sunrpc libphy sg [last unloaded: x_tables]Pid: 11494, comm: rmmod Tainted: G W 2.6.39-rc6-00261-gfd71257-dirty #580 HP ProLiant BL460c G6
RIP: 0010:[] [] garp_request_leave+0x3e/0xc0 [garp]
RSP: 0018:ffff88007a19bae8 EFLAGS: 00010286
RAX: 0000000000000000 RBX: ffff88011b5e2000 RCX: 0000000000000002
RDX: 0000000000000000 RSI: 0000000000000175 RDI: ffffffffa0030d5b
RBP: ffff88007a19bb18 R08: 0000000000000001 R09: ffff88011bd64a00
R10: ffff88011d34ec00 R11: 0000000000000000 R12: 0000000000000002
R13: ffff88007a19bc48 R14: ffff88007a19bb88 R15: 0000000000000001
FS: 0000000000000000(0000) GS:ffff88011fc00000(0063) knlGS:00000000f77d76c0
CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b
CR2: 0000000000000000 CR3: 000000011a675000 CR4: 00000000000006f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process rmmod (pid: 11494, threadinfo ffff88007a19a000, task ffff8800798595c0)
Stack:
ffff88007a19bb36 ffff88011c84b800 ffff88011b5e2000 ffff88007a19bc48
ffff88007a19bb88 0000000000000006 ffff88007a19bb38 ffffffffa003a5f6
ffff88007a19bb38 670088007a19bba8 ffff88007a19bb58 ffffffffa00397e7
Call Trace:
[] vlan_gvrp_request_leave+0x46/0x50 [8021q]
[] vlan_dev_stop+0xb7/0xc0 [8021q]
[] __dev_close_many+0x87/0xe0
[] dev_close_many+0x87/0x110
[] rollback_registered_many+0xa0/0x240
[] unregister_netdevice_many+0x19/0x60
[] vlan_device_event+0x53b/0x550 [8021q]
[] ? ip6mr_device_event+0xa8/0xd0
[] notifier_call_chain+0x53/0x80
[] __raw_notifier_call_chain+0x9/0x10
[] raw_notifier_call_chain+0x11/0x20
[] call_netdevice_notifiers+0x32/0x60
[] rollback_registered_many+0x10f/0x240
[] rollback_registered+0x2f/0x40
[] unregister_netdevice_queue+0x58/0x90
[] unregister_netdev+0x1b/0x30
[] tg3_remove_one+0x6f/0x10b [tg3]We should call vlan_gvrp_request_leave() from unregister_vlan_dev(),
not from vlan_dev_stop(), because vlan_gvrp_uninit_applicant()
is called right after unregister_netdevice_queue(). In batch mode,
unregister_netdevice_queue() doesn’t immediately call vlan_dev_stop().Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
10 May, 2011
1 commit
-
At VLAN dismantle phase, unregister_vlan_dev() makes one
synchronize_net() call after vlan_group_set_device(grp, vlan_id, NULL).This call can be safely removed because we are calling
unregister_netdevice_queue() to queue device for deletion, and this
process needs at least one rcu grace period to complete.Signed-off-by: Eric Dumazet
Cc: Ben Greear
Cc: Patrick McHardy
Cc: Paul E. McKenney
Cc: Jesse Gross
Cc: Michał Mirosław
Acked-by: Jesse Gross
Signed-off-by: David S. Miller
18 Apr, 2011
2 commits
-
It is undesirable for the bonding driver to be poking into higher
level protocols, and notifiers provide a way to avoid that. This does
mean removing the ability to configure reptitition of gratuitous ARPs
and unsolicited NAs.Signed-off-by: Ben Hutchings
Signed-off-by: David S. Miller -
The NETDEV_NOTIFY_PEERS notifier indicates that a device moved to a
different physical link; this also applies to any VLAN devices on top
of it.Signed-off-by: Ben Hutchings
Signed-off-by: David S. Miller
13 Apr, 2011
1 commit
-
Now there are 2 paths for rx vlan frames. When rx-vlan-hw-accel is
enabled, skb is untagged by NIC, vlan_tci is set and the skb gets into
vlan code in __netif_receive_skb - vlan_hwaccel_do_receive.For non-rx-vlan-hw-accel however, tagged skb goes thru whole
__netif_receive_skb, it's untagged in ptype_base hander and reinjectedThis incosistency is fixed by this patch. Vlan untagging happens early in
__netif_receive_skb so the rest of code (ptype_all handlers, rx_handlers)
see the skb like it was untagged by hw.Signed-off-by: Jiri Pirko
v1->v2:
remove "inline" from vlan_core.c functions
Signed-off-by: David S. Miller
12 Apr, 2011
1 commit
-
Conflicts:
drivers/net/smsc911x.c
03 Apr, 2011
1 commit
-
Note: get_flags was actually broken, because it should return the
flags capped with vlan_features. This is now done implicitly by
limiting netdev->hw_features.RX checksumming offload control is (and was) broken, as there was no way
before to say whether it's done for tagged packets.Signed-off-by: Michał Mirosław
Signed-off-by: David S. Miller
31 Mar, 2011
1 commit
-
Fixes generated by 'codespell' and manually reviewed.
Signed-off-by: Lucas De Marchi
19 Mar, 2011
1 commit
-
Commit c95b819ad7 (gre: Use needed_headroom)
made gre use needed_headroom instead of hard_header_lenThis uncover a bug in vlan code.
We should make sure vlan devices take into account their
real_dev->needed_headroom or we risk a crash in ipgre_header(), because
we dont have enough room to push IP header in skb.Reported-by: Diddi Oscarsson
Signed-off-by: Eric Dumazet
Cc: Patrick McHardy
Cc: Herbert Xu
Acked-by: Herbert Xu
Signed-off-by: David S. Miller
08 Mar, 2011
1 commit
-
Add the new target ddp offload support ndo_fcoe_ddp_target().
Signed-off-by: Yi Zou
Signed-off-by: Kiran Patil
Signed-off-by: Jeff Kirsher
25 Jan, 2011
1 commit
-
Quoting Ben Hutchings: we presumably won't be defining features that
can only be enabled on 64-bit architectures.Occurences found by `grep -r` on net/, drivers/net, include/
[ Move features and vlan_features next to each other in
struct netdev, as per Eric Dumazet's suggestion -DaveM ]Signed-off-by: Michał Mirosław
Signed-off-by: David S. Miller
29 Nov, 2010
1 commit
-
Now that the vlan device is lockless and single queue do not
transfer the real num queues. This is causing a BUG_ON to occur.kernel BUG at net/8021q/vlan.c:345!
Call Trace:
[] ? fib_rules_event+0x28/0x1b0
[] notifier_call_chain+0x55/0x80
[] raw_notifier_call_chain+0x16/0x20
[] call_netdevice_notifiers+0x37/0x70
[] netdev_features_change+0x16/0x20
[] ixgbe_fcoe_enable+0xae/0x100 [ixgbe]
[] vlan_dev_fcoe_enable+0x2a/0x30 [8021q]
[] fcoe_create+0x163/0x630 [fcoe]
[] ? mmap_region+0x255/0x5a0
[] param_attr_store+0x50/0x80
[] module_attr_store+0x26/0x30
[] sysfs_write_file+0xf2/0x180
[] vfs_write+0xc8/0x190
[] sys_write+0x51/0x90
[] system_call_fastpath+0x16/0x1bSigned-off-by: John Fastabend
Signed-off-by: David S. Miller
17 Nov, 2010
2 commits
-
Now vlan are lockless, we dont need special ndo_select_queue() logic.
dev_pick_tx() will do the multiqueue stuff on the real device transmit.Suggested-by: Jesse Gross
Signed-off-by: Eric Dumazet
Acked-by: Patrick McHardy
Signed-off-by: David S. Miller -
vlan is a stacked device, like tunnels. We should use the lockless
mechanism we are using in tunnels and loopback.This patch completely removes locking in TX path.
tx stat counters are added into existing percpu stat structure, renamed
from vlan_rx_stats to vlan_pcpu_stats.Note : this partially reverts commit 2e59af3dcbdf (vlan: multiqueue vlan
device)Signed-off-by: Eric Dumazet
Cc: Patrick McHardy
Signed-off-by: David S. Miller
16 Nov, 2010
4 commits
-
net/8021q/vlanproc.c: In function 'vlandev_seq_show':
net/8021q/vlanproc.c:283:20: warning: unused variable 'fmt'Signed-off-by: David S. Miller
-
Now that VLAN packets are tagged in dev_hard_start_xmit()
at the bottom of the stack we no longer need to tag them
in the 8021Q module (Except in the !VLAN_FLAG_REORDER_HDR
case).This allows the accel path and non accel paths to be consolidated.
Here the vlan_tci in the skb is always set and we allow the
stack to add the actual tag in dev_hard_start_xmit().Signed-off-by: John Fastabend
Acked-by: Jesse Gross
Signed-off-by: David S. Miller -
It is possible for the headroom to be smaller then the
hard_header_len for a short period of time after toggling
the vlan offload setting.This is not a hard error and skb_cow_head is called in
__vlan_put_tag() to resolve this.Signed-off-by: John Fastabend
Acked-by: Jesse Gross
Signed-off-by: David S. Miller -
Toggling the vlan tx|rx hw offloads needs to set the hard_header_len
as well otherwise we end up using LL_RESERVED_SPACE incorrectly.
This results in pskb_expand_head() being used unnecessarily.Signed-off-by: John Fastabend
Acked-by: Jesse Gross
Signed-off-by: David S. Miller
26 Oct, 2010
1 commit
-
(struct net_device)->vlgrp is rcu protected :
add __rcu annotation and proper rcu primitives.
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
21 Oct, 2010
3 commits
-
Currently each driver that is capable of vlan hardware acceleration
must be aware of the vlan groups that are configured and then pass
the stripped tag to a specialized receive function. This isdifferent from other types of hardware offload in that it places a
significant amount of knowledge in the driver itself rather keeping
it in the networking core.This makes vlan offloading function more similarly to other forms
of offloading (such as checksum offloading or TSO) by doing the
following:
* On receive, stripped vlans are passed directly to the network
core, without attempting to check for vlan groups or reconstructing
the header if no group
* vlans are made less special by folding the logic into the main
receive routines
* On transmit, the device layer will add the vlan header in software
if the hardware doesn't support it, instead of spreading that logic
out in upper layers, such as bonding.There are a number of advantages to this:
* Fixes all bugs with drivers incorrectly dropping vlan headers at once.
* Avoids having to disable VLAN acceleration when in promiscuous mode
(good for bridging since it always puts devices in promiscuous mode).
* Keeps VLAN tag separate until given to ultimate consumer, which
avoids needing to do header reconstruction as in tg3 unless absolutely
necessary.
* Consolidates common code in core networking.Signed-off-by: Jesse Gross
Signed-off-by: David S. Miller -
A struct net_device always maps to zero or one vlan groups and we
always know the device when we are looking up a group. We currently
do a hash table lookup on the device to find the group but it is
much simpler to just store a pointer.Signed-off-by: Jesse Gross
Signed-off-by: David S. Miller -
VLAN_GROUP_ARRAY_LEN is simply the number of possible vlan VIDs.
Since vlan groups will soon be more of an implementation detail
for vlan devices, rename the constant to be descriptive of its
actual purpose.Signed-off-by: Jesse Gross
Signed-off-by: David S. Miller
06 Oct, 2010
1 commit
-
In various situations, a device provides a packet to our stack and we
drop it before it enters protocol stack :
- softnet backlog full (accounted in /proc/net/softnet_stat)
- bad vlan tag (not accounted)
- unknown/unregistered protocol (not accounted)We can handle a per-device counter of such dropped frames at core level,
and automatically adds it to the device provided stats (rx_dropped), so
that standard tools can be used (ifconfig, ip link, cat /proc/net/dev)This is a generalization of commit 8990f468a (net: rx_dropped
accounting), thus reverting it.Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
05 Oct, 2010
1 commit
-
Conflicts:
net/ipv4/Kconfig
net/ipv4/tcp_timer.c
01 Oct, 2010
1 commit
-
Roger Luethi noticed packets for unknown VLANs getting silently dropped
even in promiscuous mode.Check for promiscuous mode in __vlan_hwaccel_rx() and vlan_gro_common()
before drops.As suggested by Patrick, mark such packets to have skb->pkt_type set to
PACKET_OTHERHOST to make sure they are dropped by IP stack.Reported-by: Roger Luethi
Signed-off-by: Eric Dumazet
CC: Patrick McHardy
Signed-off-by: David S. Miller
28 Sep, 2010
2 commits
-
This covers RX if necessary, as well as TX.
Signed-off-by: Ben Hutchings
Signed-off-by: David S. Miller -
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
24 Sep, 2010
1 commit
-
Change "return (EXPR);" to "return EXPR;"
return is not a function, parentheses are not required.
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
21 Sep, 2010
1 commit
-
Under load, netif_rx() can drop incoming packets but administrators dont
have a chance to spot which device needs some tuning (RPS activation for
example)This patch adds rx_dropped accounting in vlans and tunnels.
Signed-off-by: Eric Dumazet
Signed-off-by: David S. Miller
18 Sep, 2010
1 commit
-
previously, if a vlan master device was moved from one network namespace
to another, all 802.1q and macvlan slaves were deleted.we can use dev->reg_state to figure out whether dev_change_net_namespace
is happening, since that won't set dev->reg_state NETREG_UNREGISTERING.
so, this changes 8021q and macvlan to ignore NETDEV_UNREGISTER when
reg_state is not NETREG_UNREGISTERING.Signed-off-by: David Lamparter
Reviewed-by: "Eric W. Biederman"
Acked-by: Daniel Lezcano
Acked-by: Patrick McHardy
Signed-off-by: David S. Miller
01 Sep, 2010
1 commit
-
[patch net-next-2.6] vlan: Use vlan_dev_real_dev in vlan_hwaccel_do_receive
Use helper as in other places.
Signed-off-by: Jiri Pirko
Signed-off-by: David S. Miller
27 Aug, 2010
1 commit
-
compare_ether_header() can have a special implementation on 64 bit
arches if CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is defined.__napi_gro_receive() and vlan_gro_common() can avoid a conditional
branch to perform device match.On x86_64, __napi_gro_receive() has now 38 instructions instead of 53
As gcc-4.4.3 still choose to not inline it, add inline keyword to this
performance critical function.Signed-off-by: Eric Dumazet
CC: Herbert Xu
Signed-off-by: David S. Miller
23 Aug, 2010
1 commit
-
vlan_hwaccel_do_receive() always returns 0, so make it return void.
Signed-off-by: Changli Gao
Signed-off-by: David S. Miller
19 Aug, 2010
1 commit
-
When adding a new vlan, if the underlying interface has no carrier,
then the newly added vlan interface should also have no carrier.
At present, this is not true - the newly added vlan is added with
carrier up. Fix by checking state of real device.Signed-off-by: Phil Oester
Signed-off-by: David S. Miller
19 Jul, 2010
1 commit
-
- Without the 8021q module loaded in the kernel, all 802.1p packets
(VLAN 0 but QoS tagging) are silently discarded (as expected, as
the protocol is not loaded).- Without this patch in 8021q module, these packets are forwarded to
the module, but they are discarded also if VLAN 0 is not configured,
which should not be the default behaviour, as VLAN 0 is not really
a VLANed packet but a 802.1p packet. Defining VLAN 0 makes it almost
impossible to communicate with mixed 802.1p and non 802.1p devices on
the same network due to arp table issues.- Changed logic to skip vlan specific code in vlan_skb_recv if VLAN
is 0 and we have not defined a VLAN with ID 0, but we accept the
packet with the encapsulated proto and pass it later to netif_rx.- In the vlan device event handler, added some logic to add VLAN 0
to HW filter in devices that support it (this prevented any traffic
in VLAN 0 to reach the stack in e1000e with HW filter under 2.6.35,
and probably also with other HW filtered cards, so we fix it here).- In the vlan unregister logic, prevent the elimination of VLAN 0
in devices with HW filter.- The default behaviour is to ignore the VLAN 0 tagging and accept
the packet as if it was not tagged, but we can still define a
VLAN 0 if desired (so it is backwards compatible).Signed-off-by: Pedro Garcia
Signed-off-by: David S. Miller
10 Jul, 2010
1 commit
-
In commit be1f3c2c027cc5ad735df6a45a542ed1db7ec48b "net: Enable 64-bit
net device statistics on 32-bit architectures" I redefined struct
net_device_stats so that it could be used in a union with struct
rtnl_link_stats64, avoiding the need for explicit copying or
conversion between the two. However, this is unsafe because there is
no locking required and no lock consistently held around calls to
dev_get_stats() and use of the statistics structure it returns.In commit 28172739f0a276eb8d6ca917b3974c2edb036da3 "net: fix 64 bit
counters on 32 bit arches" Eric Dumazet dealt with that problem by
requiring callers of dev_get_stats() to provide storage for the
result. This means that the net_device::stats64 field and the padding
in struct net_device_stats are now redundant, so remove them.Update the comment on net_device_ops::ndo_get_stats64 to reflect its
new usage.Change dev_txq_stats_fold() to use struct rtnl_link_stats64, since
that is what all its callers are really using and it is no longer
going to be compatible with struct net_device_stats.Eric Dumazet suggested the separate function for the structure
conversion.Signed-off-by: Ben Hutchings
Acked-by: Eric Dumazet
Signed-off-by: David S. Miller
09 Jul, 2010
1 commit
-
When we need to shape traffic using low speeds, we need to
disable tso on network interface :ethtool -K eth0.2240 tso off
It seems vlan interfaces miss the set_tso() ethtool method.
Before enabling TSO, we must check real device supports
TSO for VLAN-tagged packets and enables TSO.Note that a TSO change on real device propagates TSO setting
on all vlans, even if admin selected a different TSO setting.Signed-off-by: Eric Dumazet
Signed-off-by: Ben Hutchings
Signed-off-by: David S. Miller