* RE: [patch -next] bna: off by one in bfa_msgq_rspq_pi_update()
From: Rasesh Mody @ 2011-08-24 17:33 UTC (permalink / raw)
To: Dan Carpenter
Cc: Debashis Dutt, open list:BROCADE BNA 10 GI...,
kernel-janitors@vger.kernel.org, Jing Huang
In-Reply-To: <20110824113028.GD5975@shale.localdomain>
>From: Dan Carpenter [mailto:error27@gmail.com]
>Sent: Wednesday, August 24, 2011 4:30 AM
>
>The rspq->rsphdlr[] array has BFI_MC_MAX elements, so this test was
>off by one.
>
>Signed-off-by: Dan Carpenter <error27@gmail.com>
>
>diff --git a/drivers/net/ethernet/brocade/bna/bfa_msgq.c
>b/drivers/net/ethernet/brocade/bna/bfa_msgq.c
>index ed52187..dd36427 100644
>--- a/drivers/net/ethernet/brocade/bna/bfa_msgq.c
>+++ b/drivers/net/ethernet/brocade/bna/bfa_msgq.c
>@@ -483,7 +483,7 @@ bfa_msgq_rspq_pi_update(struct bfa_msgq_rspq *rspq,
>struct bfi_mbmsg *mb)
> mc = msghdr->msg_class;
> num_entries = ntohs(msghdr->num_entries);
>
>- if ((mc > BFI_MC_MAX) || (rspq->rsphdlr[mc].cbfn == NULL))
>+ if ((mc >= BFI_MC_MAX) || (rspq->rsphdlr[mc].cbfn == NULL))
> break;
>
> (rspq->rsphdlr[mc].cbfn)(rspq->rsphdlr[mc].cbarg, msghdr);
Acked-by: Rasesh Mody <rmody@brocade.com>
Thanks,
Rasesh
^ permalink raw reply
* Re: [net-next 00/10][pull request] Complete drivers/net/ move
From: David Miller @ 2011-08-24 17:31 UTC (permalink / raw)
To: jeffrey.t.kirsher; +Cc: netdev, gospo
In-Reply-To: <1314176570-20298-1-git-send-email-jeffrey.t.kirsher@intel.com>
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Wed, 24 Aug 2011 02:02:40 -0700
> The following are changes since commit 131ea6675c761f655d43b808dd0fe83d15d5cdd3:
> net: add APIs for manipulating skb page fragments.
> and are available in the git repository at:
> master.kernel.org:/pub/scm/linux/kernel/git/jkirsher/next-organize master
Try again:
ERROR: "pppox_ioctl" [net/l2tp/l2tp_ppp.ko] undefined!
ERROR: "unregister_pppox_proto" [net/l2tp/l2tp_ppp.ko] undefined!
ERROR: "register_pppox_proto" [net/l2tp/l2tp_ppp.ko] undefined!
ERROR: "ppp_input" [net/l2tp/l2tp_ppp.ko] undefined!
ERROR: "pppox_unbind_sock" [net/l2tp/l2tp_ppp.ko] undefined!
ERROR: "ppp_register_net_channel" [net/l2tp/l2tp_ppp.ko] undefined!
ERROR: "ppp_dev_name" [net/l2tp/l2tp_ppp.ko] undefined!
ERROR: "ppp_unit_number" [net/irda/irnet/irnet.ko] undefined!
ERROR: "ppp_unregister_channel" [net/irda/irnet/irnet.ko] undefined!
ERROR: "ppp_output_wakeup" [net/irda/irnet/irnet.ko] undefined!
ERROR: "ppp_input_error" [net/irda/irnet/irnet.ko] undefined!
ERROR: "ppp_input" [net/irda/irnet/irnet.ko] undefined!
ERROR: "ppp_register_channel" [net/irda/irnet/irnet.ko] undefined!
ERROR: "ppp_channel_index" [net/irda/irnet/irnet.ko] undefined!
ERROR: "ppp_input_error" [net/atm/pppoatm.ko] undefined!
ERROR: "ppp_input" [net/atm/pppoatm.ko] undefined!
ERROR: "ppp_unregister_channel" [net/atm/pppoatm.ko] undefined!
ERROR: "ppp_output_wakeup" [net/atm/pppoatm.ko] undefined!
ERROR: "ppp_unit_number" [net/atm/pppoatm.ko] undefined!
ERROR: "ppp_channel_index" [net/atm/pppoatm.ko] undefined!
ERROR: "ppp_register_channel" [net/atm/pppoatm.ko] undefined!
ERROR: "ppp_unit_number" [drivers/tty/ipwireless/ipwireless.ko] undefined!
ERROR: "ppp_unregister_channel" [drivers/tty/ipwireless/ipwireless.ko] undefined!
ERROR: "ppp_output_wakeup" [drivers/tty/ipwireless/ipwireless.ko] undefined!
ERROR: "ppp_input" [drivers/tty/ipwireless/ipwireless.ko] undefined!
ERROR: "ppp_register_channel" [drivers/tty/ipwireless/ipwireless.ko] undefined!
ERROR: "ppp_channel_index" [drivers/tty/ipwireless/ipwireless.ko] undefined!
ERROR: "slhc_init" [drivers/isdn/i4l/isdn.ko] undefined!
ERROR: "slhc_remember" [drivers/isdn/i4l/isdn.ko] undefined!
ERROR: "slhc_uncompress" [drivers/isdn/i4l/isdn.ko] undefined!
ERROR: "slhc_free" [drivers/isdn/i4l/isdn.ko] undefined!
ERROR: "slhc_compress" [drivers/isdn/i4l/isdn.ko] undefined!
^ permalink raw reply
* RE: [patch -next] bna: unlock on error path in pnad_pci_probe()
From: Rasesh Mody @ 2011-08-24 17:25 UTC (permalink / raw)
To: Dan Carpenter
Cc: Debashis Dutt, open list:BROCADE BNA 10 GI...,
kernel-janitors@vger.kernel.org, Jing Huang
In-Reply-To: <20110824112922.GC5975@shale.localdomain>
>From: Dan Carpenter [mailto:error27@gmail.com]
>Sent: Wednesday, August 24, 2011 4:29 AM
>
>We introduced a new lock here, so there was error path which needs
>an unlock now.
>
>Signed-off-by: Dan Carpenter <error27@gmail.com>
>
>diff --git a/drivers/net/ethernet/brocade/bna/bnad.c
>b/drivers/net/ethernet/brocade/bna/bnad.c
>index bdfda07..6ad4b47 100644
>--- a/drivers/net/ethernet/brocade/bna/bnad.c
>+++ b/drivers/net/ethernet/brocade/bna/bnad.c
>@@ -3167,7 +3167,7 @@ bnad_pci_probe(struct pci_dev *pdev,
> */
> err = bnad_pci_init(bnad, pdev, &using_dac);
> if (err)
>- goto free_netdev;
>+ goto unlock_mutex;
>
> /*
> * Initialize bnad structure
>@@ -3296,9 +3296,9 @@ drv_uninit:
> bnad_uninit(bnad);
> pci_uninit:
> bnad_pci_uninit(pdev);
>+unlock_mutex:
> mutex_unlock(&bnad->conf_mutex);
> bnad_lock_uninit(bnad);
>-free_netdev:
> free_netdev(netdev);
> return err;
> }
Acked-by: Rasesh Mody <rmody@brocade.com>
Thanks,
Rasesh
^ permalink raw reply
* [BUG] tcp : how many times a frame can possibly be retransmitted ?
From: Eric Dumazet @ 2011-08-24 16:21 UTC (permalink / raw)
To: netdev, Jerry Chu, Damian Lukowski
On one dev machine running net-next, I just found strange tcp sessions
that retransmit a frame forever (The other peer disappeared)
# ss -emoi dst 10.2.1.1
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 816 10.2.1.2:37930 10.2.1.1:ssh timer:(on,630ms,246) ino:60786 sk:ffff8801189aa400
mem:(r0,w3776,f320,t0) ts sack ecn cubic wscale:8,6 rto:1680 rtt:16.25/7.5 ato:40 ssthresh:7 send 1.4Mbps rcv_rtt:10 rcv_space:16632
You can see the retransmit count : 246
What possibly can be going on ?
What happened to backoff ?
# grep . /proc/sys/net/ipv4/tcp_retries*
/proc/sys/net/ipv4/tcp_retries1:3
/proc/sys/net/ipv4/tcp_retries2:15
extract of tcpdump :
12:01:02.074244 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16128024 59389>
12:01:03.754243 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16128192 59389>
12:01:05.434245 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16128360 59389>
12:01:07.114243 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16128528 59389>
12:01:08.794248 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16128696 59389>
12:01:10.474242 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16128864 59389>
12:01:12.154243 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16129032 59389>
12:01:13.834241 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16129200 59389>
12:01:15.514246 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16129368 59389>
12:01:17.194244 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16129536 59389>
12:01:18.874248 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16129704 59389>
12:01:20.554243 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16129872 59389>
12:01:22.234244 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16130040 59389>
12:01:23.914244 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16130208 59389>
12:01:25.594247 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16130376 59389>
12:01:27.274242 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16130544 59389>
12:01:28.954242 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16130712 59389>
12:01:30.634248 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16130880 59389>
12:01:32.314245 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16131048 59389>
12:01:33.994243 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16131216 59389>
12:01:35.674250 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16131384 59389>
12:01:37.354244 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16131552 59389>
12:01:39.034245 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16131720 59389>
12:01:40.714245 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16131888 59389>
12:01:42.394245 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16132056 59389>
12:01:44.074242 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16132224 59389>
12:01:45.754249 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16132392 59389>
12:01:47.434242 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16132560 59389>
12:01:49.114247 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16132728 59389>
12:01:50.794250 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16132896 59389>
12:01:52.474247 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16133064 59389>
12:01:54.154242 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16133232 59389>
12:01:55.834246 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16133400 59389>
12:01:57.514243 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16133568 59389>
12:01:59.194247 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16133736 59389>
12:02:00.874250 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16133904 59389>
12:02:02.554242 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16134072 59389>
12:02:04.234243 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16134240 59389>
12:02:05.914245 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16134408 59389>
12:02:07.594244 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16134576 59389>
12:02:09.274249 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16134744 59389>
12:02:10.954241 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16134912 59389>
12:02:12.634249 IP 10.2.1.2.37930 > 10.2.1.1.ssh: P 0:144(144) ack 1 win 1002 <nop,nop,timestamp 16135080 59389>
tcp_retransmit_timer() does the exponential backoff, but something
resets icsk_rto to a low value ?
Ah, it seems to be because of commit f1ecd5d9e7366609
(Revert Backoff [v3]: Revert RTO on ICMP destination unreachable)
Since arp resolution (or routing, I dont know yet) fails, an
internal/loopback ICMP host/network unreachable message is
generated and handled in tcp_v4_err() :
icsk_backoff-- and icsk_rto is reset.
I am afraid this can generate a storm (cpu time at very least),
in case we have many tcp sessions in this state.
I guess its time for me to read RFC 6069
^ permalink raw reply
* Re: Interface without IP address can route??
From: Ben Greear @ 2011-08-24 16:20 UTC (permalink / raw)
To: David Lamparter; +Cc: jhs, jamal, netdev
In-Reply-To: <20110824161557.GC611458@jupiter.n2.diac24.net>
On 08/24/2011 09:15 AM, David Lamparter wrote:
> On Wed, Aug 24, 2011 at 06:24:54AM -0700, Ben Greear wrote:
>> On 08/24/2011 06:01 AM, jamal wrote:
>>> It makes sense to behave this way.
>>> IPv4 addresses are owned by the system not interfaces.
>>> If you want to control the forwarding behavior, control ARP so it doesnt
>>> respond on the interfaces with no IP.
>
> I agree.
>
>> I understand your argument about IPs being owned by system instead of
>> interface, but I think it's the wrong behaviour in this case. Can
>> you think of any case where this behaviour actually helps?
>
> It's used for oddball /32 setups at server hosting farms that look like:
> /--- eth0, no ip ---- server 0.1.4.5/32, default via 0.1.2.3
> router --- eth1, no ip ---- server 0.1.6.7/32, default via 0.1.2.3
> \--- eth2, no ip ---- server 0.1.8.9/32, default via 0.1.2.3
> \- eth3: 0.1.2.3/28 - to rest of internet
>
> The general idea is to a) conserve IPs and b) not renumber servers even
> when they move, so you end up with random scattered /32s on the servers
> and the router has no sensible IP.
>
>> Either way, it appears I can work around this by explicitly disabling
>> forwarding for this particular interface.
>
> I was about to suggest exactly this :)
Ok..glad to know there are folks with even crazier setups than mine :)
Thanks,
Ben
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
^ permalink raw reply
* Re: Interface without IP address can route??
From: David Lamparter @ 2011-08-24 16:15 UTC (permalink / raw)
To: Ben Greear; +Cc: jhs, jamal, netdev
In-Reply-To: <4E54FBA6.6090905@candelatech.com>
On Wed, Aug 24, 2011 at 06:24:54AM -0700, Ben Greear wrote:
> On 08/24/2011 06:01 AM, jamal wrote:
> > It makes sense to behave this way.
> > IPv4 addresses are owned by the system not interfaces.
> > If you want to control the forwarding behavior, control ARP so it doesnt
> > respond on the interfaces with no IP.
I agree.
> I understand your argument about IPs being owned by system instead of
> interface, but I think it's the wrong behaviour in this case. Can
> you think of any case where this behaviour actually helps?
It's used for oddball /32 setups at server hosting farms that look like:
/--- eth0, no ip ---- server 0.1.4.5/32, default via 0.1.2.3
router --- eth1, no ip ---- server 0.1.6.7/32, default via 0.1.2.3
\--- eth2, no ip ---- server 0.1.8.9/32, default via 0.1.2.3
\- eth3: 0.1.2.3/28 - to rest of internet
The general idea is to a) conserve IPs and b) not renumber servers even
when they move, so you end up with random scattered /32s on the servers
and the router has no sensible IP.
> Either way, it appears I can work around this by explicitly disabling
> forwarding for this particular interface.
I was about to suggest exactly this :)
David
^ permalink raw reply
* Re: Interface without IP address can route??
From: Ben Greear @ 2011-08-24 13:24 UTC (permalink / raw)
To: jhs; +Cc: jamal, netdev
In-Reply-To: <1314190890.25967.114.camel@mojatatu>
On 08/24/2011 06:01 AM, jamal wrote:
>
> It makes sense to behave this way.
> IPv4 addresses are owned by the system not interfaces.
> If you want to control the forwarding behavior, control ARP so it doesnt
> respond on the interfaces with no IP.
ARP is already controlled, but interface was effectively promisc,
so it received packets anyway. This allows me to bridge packets
in user-space using packet sockets.
I understand your argument about IPs being owned by system instead of
interface, but I think it's the wrong behaviour in this case. Can
you think of any case where this behaviour actually helps?
Either way, it appears I can work around this by explicitly disabling
forwarding for this particular interface.
Thanks,
Ben
>
> cheers,
> jamal
> On Tue, 2011-08-23 at 17:20 -0700, Ben Greear wrote:
>> I just noticed on a 3.0.1 kernel that the system is routing packets
>> received on an interface without an IP address. (I was trying to use the
>> interface in a user-space wifi_station-to-wired bridge application).
>>
>> [root@lf0301-demo1 lanforge]# cat /proc/sys/net/ipv4/conf/sta1/forwarding
>> 1
>> [root@lf0301-demo1 lanforge]# ifconfig sta1
>> sta1 Link encap:Ethernet HWaddr 00:03:2D:12:16:0D
>> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
>> RX packets:85248 errors:0 dropped:0 overruns:0 frame:0
>> TX packets:1419 errors:0 dropped:0 overruns:0 carrier:0
>> collisions:0 txqueuelen:1000
>> RX bytes:67423391 (64.2 MiB) TX bytes:1087581 (1.0 MiB)
>>
>>
>> Seems that older stock kernels have forwarding set for interfaces without
>> IP addresses too, so maybe it's always been this way...
>>
>> Anyway, I can add some logic to my config to explicitly disable
>> routing for interfaces w/out IP address, but it seems to me that
>> it should automatically not route packets received on an interface
>> that had no IP address on it..
>>
>> Thanks,
>> Ben
>>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
^ permalink raw reply
* Re: Interface without IP address can route??
From: jamal @ 2011-08-24 13:01 UTC (permalink / raw)
To: Ben Greear; +Cc: netdev
In-Reply-To: <4E5443CD.60502@candelatech.com>
It makes sense to behave this way.
IPv4 addresses are owned by the system not interfaces.
If you want to control the forwarding behavior, control ARP so it doesnt
respond on the interfaces with no IP.
cheers,
jamal
On Tue, 2011-08-23 at 17:20 -0700, Ben Greear wrote:
> I just noticed on a 3.0.1 kernel that the system is routing packets
> received on an interface without an IP address. (I was trying to use the
> interface in a user-space wifi_station-to-wired bridge application).
>
> [root@lf0301-demo1 lanforge]# cat /proc/sys/net/ipv4/conf/sta1/forwarding
> 1
> [root@lf0301-demo1 lanforge]# ifconfig sta1
> sta1 Link encap:Ethernet HWaddr 00:03:2D:12:16:0D
> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
> RX packets:85248 errors:0 dropped:0 overruns:0 frame:0
> TX packets:1419 errors:0 dropped:0 overruns:0 carrier:0
> collisions:0 txqueuelen:1000
> RX bytes:67423391 (64.2 MiB) TX bytes:1087581 (1.0 MiB)
>
>
> Seems that older stock kernels have forwarding set for interfaces without
> IP addresses too, so maybe it's always been this way...
>
> Anyway, I can add some logic to my config to explicitly disable
> routing for interfaces w/out IP address, but it seems to me that
> it should automatically not route packets received on an interface
> that had no IP address on it..
>
> Thanks,
> Ben
>
^ permalink raw reply
* [PATCH 8/8] batman-adv: merge update_transtable() into tt related code
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Marek Lindner
In-Reply-To: <1314190838-2273-1-git-send-email-lindner_marek@yahoo.de>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
---
net/batman-adv/routing.c | 66 ++--------------------------------
net/batman-adv/translation-table.c | 69 +++++++++++++++++++++++++++++++++---
net/batman-adv/translation-table.h | 9 ++---
3 files changed, 70 insertions(+), 74 deletions(-)
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 91a7860..1949928 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -64,65 +64,6 @@ void slide_own_bcast_window(struct hard_iface *hard_iface)
}
}
-static void update_transtable(struct bat_priv *bat_priv,
- struct orig_node *orig_node,
- const unsigned char *tt_buff,
- uint8_t tt_num_changes, uint8_t ttvn,
- uint16_t tt_crc)
-{
- uint8_t orig_ttvn = (uint8_t)atomic_read(&orig_node->last_ttvn);
- bool full_table = true;
-
- /* the ttvn increased by one -> we can apply the attached changes */
- if (ttvn - orig_ttvn == 1) {
- /* the OGM could not contain the changes due to their size or
- * because they have already been sent TT_OGM_APPEND_MAX times.
- * In this case send a tt request */
- if (!tt_num_changes) {
- full_table = false;
- goto request_table;
- }
-
- tt_update_changes(bat_priv, orig_node, tt_num_changes, ttvn,
- (struct tt_change *)tt_buff);
-
- /* Even if we received the precomputed crc with the OGM, we
- * prefer to recompute it to spot any possible inconsistency
- * in the global table */
- orig_node->tt_crc = tt_global_crc(bat_priv, orig_node);
-
- /* The ttvn alone is not enough to guarantee consistency
- * because a single value could represent different states
- * (due to the wrap around). Thus a node has to check whether
- * the resulting table (after applying the changes) is still
- * consistent or not. E.g. a node could disconnect while its
- * ttvn is X and reconnect on ttvn = X + TTVN_MAX: in this case
- * checking the CRC value is mandatory to detect the
- * inconsistency */
- if (orig_node->tt_crc != tt_crc)
- goto request_table;
-
- /* Roaming phase is over: tables are in sync again. I can
- * unset the flag */
- orig_node->tt_poss_change = false;
- } else {
- /* if we missed more than one change or our tables are not
- * in sync anymore -> request fresh tt data */
- if (ttvn != orig_ttvn || orig_node->tt_crc != tt_crc) {
-request_table:
- bat_dbg(DBG_TT, bat_priv, "TT inconsistency for %pM. "
- "Need to retrieve the correct information "
- "(ttvn: %u last_ttvn: %u crc: %u last_crc: "
- "%u num_changes: %u)\n", orig_node->orig, ttvn,
- orig_ttvn, tt_crc, orig_node->tt_crc,
- tt_num_changes);
- send_tt_request(bat_priv, orig_node, ttvn, tt_crc,
- full_table);
- return;
- }
- }
-}
-
static void update_route(struct bat_priv *bat_priv,
struct orig_node *orig_node,
struct neigh_node *neigh_node)
@@ -499,10 +440,9 @@ update_tt:
if (((batman_packet->orig != ethhdr->h_source) &&
(batman_packet->ttl > 2)) ||
(batman_packet->flags & PRIMARIES_FIRST_HOP))
- update_transtable(bat_priv, orig_node, tt_buff,
- batman_packet->tt_num_changes,
- batman_packet->ttvn,
- batman_packet->tt_crc);
+ tt_update_orig(bat_priv, orig_node, tt_buff,
+ batman_packet->tt_num_changes,
+ batman_packet->ttvn, batman_packet->tt_crc);
if (orig_node->gw_flags != batman_packet->gw_flags)
gw_node_update(bat_priv, orig_node, batman_packet->gw_flags);
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index e8f849f..cc53f78 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -1079,8 +1079,9 @@ out:
return skb;
}
-int send_tt_request(struct bat_priv *bat_priv, struct orig_node *dst_orig_node,
- uint8_t ttvn, uint16_t tt_crc, bool full_table)
+static int send_tt_request(struct bat_priv *bat_priv,
+ struct orig_node *dst_orig_node,
+ uint8_t ttvn, uint16_t tt_crc, bool full_table)
{
struct sk_buff *skb = NULL;
struct tt_query_packet *tt_request;
@@ -1455,9 +1456,10 @@ out:
orig_node_free_ref(orig_node);
}
-void tt_update_changes(struct bat_priv *bat_priv, struct orig_node *orig_node,
- uint16_t tt_num_changes, uint8_t ttvn,
- struct tt_change *tt_change)
+static void tt_update_changes(struct bat_priv *bat_priv,
+ struct orig_node *orig_node,
+ uint16_t tt_num_changes, uint8_t ttvn,
+ struct tt_change *tt_change)
{
_tt_update_changes(bat_priv, orig_node, tt_change, tt_num_changes,
ttvn);
@@ -1802,3 +1804,60 @@ out:
tt_local_entry_free_ref(tt_local_entry);
return ret;
}
+
+void tt_update_orig(struct bat_priv *bat_priv, struct orig_node *orig_node,
+ const unsigned char *tt_buff, uint8_t tt_num_changes,
+ uint8_t ttvn, uint16_t tt_crc)
+{
+ uint8_t orig_ttvn = (uint8_t)atomic_read(&orig_node->last_ttvn);
+ bool full_table = true;
+
+ /* the ttvn increased by one -> we can apply the attached changes */
+ if (ttvn - orig_ttvn == 1) {
+ /* the OGM could not contain the changes due to their size or
+ * because they have already been sent TT_OGM_APPEND_MAX times.
+ * In this case send a tt request */
+ if (!tt_num_changes) {
+ full_table = false;
+ goto request_table;
+ }
+
+ tt_update_changes(bat_priv, orig_node, tt_num_changes, ttvn,
+ (struct tt_change *)tt_buff);
+
+ /* Even if we received the precomputed crc with the OGM, we
+ * prefer to recompute it to spot any possible inconsistency
+ * in the global table */
+ orig_node->tt_crc = tt_global_crc(bat_priv, orig_node);
+
+ /* The ttvn alone is not enough to guarantee consistency
+ * because a single value could represent different states
+ * (due to the wrap around). Thus a node has to check whether
+ * the resulting table (after applying the changes) is still
+ * consistent or not. E.g. a node could disconnect while its
+ * ttvn is X and reconnect on ttvn = X + TTVN_MAX: in this case
+ * checking the CRC value is mandatory to detect the
+ * inconsistency */
+ if (orig_node->tt_crc != tt_crc)
+ goto request_table;
+
+ /* Roaming phase is over: tables are in sync again. I can
+ * unset the flag */
+ orig_node->tt_poss_change = false;
+ } else {
+ /* if we missed more than one change or our tables are not
+ * in sync anymore -> request fresh tt data */
+ if (ttvn != orig_ttvn || orig_node->tt_crc != tt_crc) {
+request_table:
+ bat_dbg(DBG_TT, bat_priv, "TT inconsistency for %pM. "
+ "Need to retrieve the correct information "
+ "(ttvn: %u last_ttvn: %u crc: %u last_crc: "
+ "%u num_changes: %u)\n", orig_node->orig, ttvn,
+ orig_ttvn, tt_crc, orig_node->tt_crc,
+ tt_num_changes);
+ send_tt_request(bat_priv, orig_node, ttvn, tt_crc,
+ full_table);
+ return;
+ }
+ }
+}
diff --git a/net/batman-adv/translation-table.h b/net/batman-adv/translation-table.h
index b47e876..30efd49 100644
--- a/net/batman-adv/translation-table.h
+++ b/net/batman-adv/translation-table.h
@@ -49,14 +49,8 @@ void tt_save_orig_buffer(struct bat_priv *bat_priv, struct orig_node *orig_node,
uint16_t tt_local_crc(struct bat_priv *bat_priv);
uint16_t tt_global_crc(struct bat_priv *bat_priv, struct orig_node *orig_node);
void tt_free(struct bat_priv *bat_priv);
-int send_tt_request(struct bat_priv *bat_priv,
- struct orig_node *dst_orig_node, uint8_t ttvn,
- uint16_t tt_crc, bool full_table);
bool send_tt_response(struct bat_priv *bat_priv,
struct tt_query_packet *tt_request);
-void tt_update_changes(struct bat_priv *bat_priv, struct orig_node *orig_node,
- uint16_t tt_num_changes, uint8_t ttvn,
- struct tt_change *tt_change);
bool is_my_client(struct bat_priv *bat_priv, const uint8_t *addr);
void handle_tt_response(struct bat_priv *bat_priv,
struct tt_query_packet *tt_response);
@@ -64,5 +58,8 @@ void send_roam_adv(struct bat_priv *bat_priv, uint8_t *client,
struct orig_node *orig_node);
void tt_commit_changes(struct bat_priv *bat_priv);
bool is_ap_isolated(struct bat_priv *bat_priv, uint8_t *src, uint8_t *dst);
+void tt_update_orig(struct bat_priv *bat_priv, struct orig_node *orig_node,
+ const unsigned char *tt_buff, uint8_t tt_num_changes,
+ uint8_t ttvn, uint16_t tt_crc);
#endif /* _NET_BATMAN_ADV_TRANSLATION_TABLE_H_ */
--
1.7.5.3
^ permalink raw reply related
* [PATCH 7/8] batman-adv: reuse tt_len() to calculate tt buffer length
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Marek Lindner
In-Reply-To: <1314190838-2273-1-git-send-email-lindner_marek@yahoo.de>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Acked-by: Antonio Quartulli <ordex@autistici.org>
---
net/batman-adv/aggregation.h | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/net/batman-adv/aggregation.h b/net/batman-adv/aggregation.h
index 216337b..df4a5a9 100644
--- a/net/batman-adv/aggregation.h
+++ b/net/batman-adv/aggregation.h
@@ -28,8 +28,7 @@
static inline int aggregated_packet(int buff_pos, int packet_len,
int tt_num_changes)
{
- int next_buff_pos = buff_pos + BAT_PACKET_LEN + (tt_num_changes *
- sizeof(struct tt_change));
+ int next_buff_pos = buff_pos + BAT_PACKET_LEN + tt_len(tt_num_changes);
return (next_buff_pos <= packet_len) &&
(next_buff_pos <= MAX_AGGREGATION_BYTES);
--
1.7.5.3
^ permalink raw reply related
* [PATCH 6/8] batman-adv: print client flags in the local/global transtables output
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Antonio Quartulli, Marek Lindner
In-Reply-To: <1314190838-2273-1-git-send-email-lindner_marek@yahoo.de>
From: Antonio Quartulli <ordex@autistici.org>
Since clients can have several flags on or off, this patches make them
appear in the local/global transtable output so that they can be checked
for debugging purposes.
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
---
net/batman-adv/translation-table.c | 37 ++++++++++++++++++++++++++---------
1 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index 1f128e1..e8f849f 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -332,7 +332,7 @@ int tt_local_seq_print_text(struct seq_file *seq, void *offset)
rcu_read_lock();
__hlist_for_each_rcu(node, head)
- buf_size += 21;
+ buf_size += 29;
rcu_read_unlock();
}
@@ -351,8 +351,19 @@ int tt_local_seq_print_text(struct seq_file *seq, void *offset)
rcu_read_lock();
hlist_for_each_entry_rcu(tt_local_entry, node,
head, hash_entry) {
- pos += snprintf(buff + pos, 22, " * %pM\n",
- tt_local_entry->addr);
+ pos += snprintf(buff + pos, 30, " * %pM "
+ "[%c%c%c%c%c]\n",
+ tt_local_entry->addr,
+ (tt_local_entry->flags &
+ TT_CLIENT_ROAM ? 'R' : '.'),
+ (tt_local_entry->flags &
+ TT_CLIENT_NOPURGE ? 'P' : '.'),
+ (tt_local_entry->flags &
+ TT_CLIENT_NEW ? 'N' : '.'),
+ (tt_local_entry->flags &
+ TT_CLIENT_PENDING ? 'X' : '.'),
+ (tt_local_entry->flags &
+ TT_CLIENT_WIFI ? 'W' : '.'));
}
rcu_read_unlock();
}
@@ -589,8 +600,8 @@ int tt_global_seq_print_text(struct seq_file *seq, void *offset)
seq_printf(seq,
"Globally announced TT entries received via the mesh %s\n",
net_dev->name);
- seq_printf(seq, " %-13s %s %-15s %s\n",
- "Client", "(TTVN)", "Originator", "(Curr TTVN)");
+ seq_printf(seq, " %-13s %s %-15s %s %s\n",
+ "Client", "(TTVN)", "Originator", "(Curr TTVN)", "Flags");
buf_size = 1;
/* Estimate length for: " * xx:xx:xx:xx:xx:xx (ttvn) via
@@ -600,7 +611,7 @@ int tt_global_seq_print_text(struct seq_file *seq, void *offset)
rcu_read_lock();
__hlist_for_each_rcu(node, head)
- buf_size += 59;
+ buf_size += 67;
rcu_read_unlock();
}
@@ -619,14 +630,20 @@ int tt_global_seq_print_text(struct seq_file *seq, void *offset)
rcu_read_lock();
hlist_for_each_entry_rcu(tt_global_entry, node,
head, hash_entry) {
- pos += snprintf(buff + pos, 61,
- " * %pM (%3u) via %pM (%3u)\n",
- tt_global_entry->addr,
+ pos += snprintf(buff + pos, 69,
+ " * %pM (%3u) via %pM (%3u) "
+ "[%c%c%c]\n", tt_global_entry->addr,
tt_global_entry->ttvn,
tt_global_entry->orig_node->orig,
(uint8_t) atomic_read(
&tt_global_entry->orig_node->
- last_ttvn));
+ last_ttvn),
+ (tt_global_entry->flags &
+ TT_CLIENT_ROAM ? 'R' : '.'),
+ (tt_global_entry->flags &
+ TT_CLIENT_PENDING ? 'X' : '.'),
+ (tt_global_entry->flags &
+ TT_CLIENT_WIFI ? 'W' : '.'));
}
rcu_read_unlock();
}
--
1.7.5.3
^ permalink raw reply related
* [PATCH 5/8] batman-adv: implement AP-isolation on the sender side
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Antonio Quartulli, Marek Lindner
In-Reply-To: <1314190838-2273-1-git-send-email-lindner_marek@yahoo.de>
From: Antonio Quartulli <ordex@autistici.org>
If a node has to send a packet issued by a WIFI client to another WIFI client,
the packet is dropped.
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
---
net/batman-adv/routing.c | 2 +-
net/batman-adv/soft-interface.c | 3 ++-
net/batman-adv/translation-table.c | 28 +++++++++++++++++++++-------
net/batman-adv/translation-table.h | 2 +-
net/batman-adv/unicast.c | 6 ++++--
5 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 13444e9..91a7860 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -1535,7 +1535,7 @@ static int check_unicast_ttvn(struct bat_priv *bat_priv,
ethhdr = (struct ethhdr *)(skb->data +
sizeof(struct unicast_packet));
- orig_node = transtable_search(bat_priv, ethhdr->h_dest);
+ orig_node = transtable_search(bat_priv, NULL, ethhdr->h_dest);
if (!orig_node) {
if (!is_my_client(bat_priv, ethhdr->h_dest))
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 9addbab..402fd96 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -597,7 +597,8 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
/* Register the client MAC in the transtable */
tt_local_add(soft_iface, ethhdr->h_source, skb->skb_iif);
- orig_node = transtable_search(bat_priv, ethhdr->h_dest);
+ orig_node = transtable_search(bat_priv, ethhdr->h_source,
+ ethhdr->h_dest);
if (is_multicast_ether_addr(ethhdr->h_dest) ||
(orig_node && orig_node->gw_flags)) {
ret = gw_is_target(bat_priv, skb, orig_node);
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index d0ed931..1f128e1 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -794,29 +794,43 @@ static bool _is_ap_isolated(struct tt_local_entry *tt_local_entry,
}
struct orig_node *transtable_search(struct bat_priv *bat_priv,
- const uint8_t *addr)
+ const uint8_t *src, const uint8_t *addr)
{
- struct tt_global_entry *tt_global_entry;
+ struct tt_local_entry *tt_local_entry = NULL;
+ struct tt_global_entry *tt_global_entry = NULL;
struct orig_node *orig_node = NULL;
+ if (src && atomic_read(&bat_priv->ap_isolation)) {
+ tt_local_entry = tt_local_hash_find(bat_priv, src);
+ if (!tt_local_entry)
+ goto out;
+ }
+
tt_global_entry = tt_global_hash_find(bat_priv, addr);
-
if (!tt_global_entry)
goto out;
+ /* check whether the clients should not communicate due to AP
+ * isolation */
+ if (tt_local_entry && _is_ap_isolated(tt_local_entry, tt_global_entry))
+ goto out;
+
if (!atomic_inc_not_zero(&tt_global_entry->orig_node->refcount))
- goto free_tt;
+ goto out;
/* A global client marked as PENDING has already moved from that
* originator */
if (tt_global_entry->flags & TT_CLIENT_PENDING)
- goto free_tt;
+ goto out;
orig_node = tt_global_entry->orig_node;
-free_tt:
- tt_global_entry_free_ref(tt_global_entry);
out:
+ if (tt_global_entry)
+ tt_global_entry_free_ref(tt_global_entry);
+ if (tt_local_entry)
+ tt_local_entry_free_ref(tt_local_entry);
+
return orig_node;
}
diff --git a/net/batman-adv/translation-table.h b/net/batman-adv/translation-table.h
index f1d148e..b47e876 100644
--- a/net/batman-adv/translation-table.h
+++ b/net/batman-adv/translation-table.h
@@ -43,7 +43,7 @@ void tt_global_del(struct bat_priv *bat_priv,
struct orig_node *orig_node, const unsigned char *addr,
const char *message, bool roaming);
struct orig_node *transtable_search(struct bat_priv *bat_priv,
- const uint8_t *addr);
+ const uint8_t *src, const uint8_t *addr);
void tt_save_orig_buffer(struct bat_priv *bat_priv, struct orig_node *orig_node,
const unsigned char *tt_buff, uint8_t tt_num_changes);
uint16_t tt_local_crc(struct bat_priv *bat_priv);
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c
index 32b125f..07d1c1d 100644
--- a/net/batman-adv/unicast.c
+++ b/net/batman-adv/unicast.c
@@ -299,8 +299,10 @@ int unicast_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv)
goto find_router;
}
- /* check for tt host - increases orig_node refcount */
- orig_node = transtable_search(bat_priv, ethhdr->h_dest);
+ /* check for tt host - increases orig_node refcount.
+ * returns NULL in case of AP isolation */
+ orig_node = transtable_search(bat_priv, ethhdr->h_source,
+ ethhdr->h_dest);
find_router:
/**
--
1.7.5.3
^ permalink raw reply related
* [PATCH 4/8] batman-adv: implement AP-isolation on the receiver side
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Antonio Quartulli, Marek Lindner
In-Reply-To: <1314190838-2273-1-git-send-email-lindner_marek@yahoo.de>
From: Antonio Quartulli <ordex@autistici.org>
When a node receives a unicast packet it checks if the source and the
destination client can communicate or not due to the AP isolation
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
---
Documentation/ABI/testing/sysfs-class-net-mesh | 8 ++++
net/batman-adv/bat_sysfs.c | 2 +
net/batman-adv/soft-interface.c | 4 ++
net/batman-adv/translation-table.c | 42 ++++++++++++++++++++++++
net/batman-adv/translation-table.h | 1 +
net/batman-adv/types.h | 1 +
6 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-class-net-mesh b/Documentation/ABI/testing/sysfs-class-net-mesh
index 748fe17..b020014 100644
--- a/Documentation/ABI/testing/sysfs-class-net-mesh
+++ b/Documentation/ABI/testing/sysfs-class-net-mesh
@@ -22,6 +22,14 @@ Description:
mesh will be fragmented or silently discarded if the
packet size exceeds the outgoing interface MTU.
+What: /sys/class/net/<mesh_iface>/mesh/ap_isolation
+Date: May 2011
+Contact: Antonio Quartulli <ordex@autistici.org>
+Description:
+ Indicates whether the data traffic going from a
+ wireless client to another wireless client will be
+ silently dropped.
+
What: /sys/class/net/<mesh_iface>/mesh/gw_bandwidth
Date: October 2010
Contact: Marek Lindner <lindner_marek@yahoo.de>
diff --git a/net/batman-adv/bat_sysfs.c b/net/batman-adv/bat_sysfs.c
index cd15deb..b8a7414 100644
--- a/net/batman-adv/bat_sysfs.c
+++ b/net/batman-adv/bat_sysfs.c
@@ -380,6 +380,7 @@ static ssize_t store_gw_bwidth(struct kobject *kobj, struct attribute *attr,
BAT_ATTR_BOOL(aggregated_ogms, S_IRUGO | S_IWUSR, NULL);
BAT_ATTR_BOOL(bonding, S_IRUGO | S_IWUSR, NULL);
BAT_ATTR_BOOL(fragmentation, S_IRUGO | S_IWUSR, update_min_mtu);
+BAT_ATTR_BOOL(ap_isolation, S_IRUGO | S_IWUSR, NULL);
static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode);
static BAT_ATTR(gw_mode, S_IRUGO | S_IWUSR, show_gw_mode, store_gw_mode);
BAT_ATTR_UINT(orig_interval, S_IRUGO | S_IWUSR, 2 * JITTER, INT_MAX, NULL);
@@ -396,6 +397,7 @@ static struct bat_attribute *mesh_attrs[] = {
&bat_attr_aggregated_ogms,
&bat_attr_bonding,
&bat_attr_fragmentation,
+ &bat_attr_ap_isolation,
&bat_attr_vis_mode,
&bat_attr_gw_mode,
&bat_attr_orig_interval,
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 6deed44..9addbab 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -739,6 +739,9 @@ void interface_rx(struct net_device *soft_iface,
soft_iface->last_rx = jiffies;
+ if (is_ap_isolated(bat_priv, ethhdr->h_source, ethhdr->h_dest))
+ goto dropped;
+
netif_rx(skb);
goto out;
@@ -812,6 +815,7 @@ struct net_device *softif_create(const char *name)
atomic_set(&bat_priv->aggregated_ogms, 1);
atomic_set(&bat_priv->bonding, 0);
+ atomic_set(&bat_priv->ap_isolation, 0);
atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE);
atomic_set(&bat_priv->gw_mode, GW_MODE_OFF);
atomic_set(&bat_priv->gw_sel_class, 20);
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index d630564..d0ed931 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -781,6 +781,18 @@ static void tt_global_table_free(struct bat_priv *bat_priv)
bat_priv->tt_global_hash = NULL;
}
+static bool _is_ap_isolated(struct tt_local_entry *tt_local_entry,
+ struct tt_global_entry *tt_global_entry)
+{
+ bool ret = false;
+
+ if (tt_local_entry->flags & TT_CLIENT_WIFI &&
+ tt_global_entry->flags & TT_CLIENT_WIFI)
+ ret = true;
+
+ return ret;
+}
+
struct orig_node *transtable_search(struct bat_priv *bat_priv,
const uint8_t *addr)
{
@@ -1729,3 +1741,33 @@ void tt_commit_changes(struct bat_priv *bat_priv)
atomic_inc(&bat_priv->ttvn);
bat_priv->tt_poss_change = false;
}
+
+bool is_ap_isolated(struct bat_priv *bat_priv, uint8_t *src, uint8_t *dst)
+{
+ struct tt_local_entry *tt_local_entry = NULL;
+ struct tt_global_entry *tt_global_entry = NULL;
+ bool ret = true;
+
+ if (!atomic_read(&bat_priv->ap_isolation))
+ return false;
+
+ tt_local_entry = tt_local_hash_find(bat_priv, dst);
+ if (!tt_local_entry)
+ goto out;
+
+ tt_global_entry = tt_global_hash_find(bat_priv, src);
+ if (!tt_global_entry)
+ goto out;
+
+ if (_is_ap_isolated(tt_local_entry, tt_global_entry))
+ goto out;
+
+ ret = false;
+
+out:
+ if (tt_global_entry)
+ tt_global_entry_free_ref(tt_global_entry);
+ if (tt_local_entry)
+ tt_local_entry_free_ref(tt_local_entry);
+ return ret;
+}
diff --git a/net/batman-adv/translation-table.h b/net/batman-adv/translation-table.h
index 4d1ca35..f1d148e 100644
--- a/net/batman-adv/translation-table.h
+++ b/net/batman-adv/translation-table.h
@@ -63,5 +63,6 @@ void handle_tt_response(struct bat_priv *bat_priv,
void send_roam_adv(struct bat_priv *bat_priv, uint8_t *client,
struct orig_node *orig_node);
void tt_commit_changes(struct bat_priv *bat_priv);
+bool is_ap_isolated(struct bat_priv *bat_priv, uint8_t *src, uint8_t *dst);
#endif /* _NET_BATMAN_ADV_TRANSLATION_TABLE_H_ */
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
index bd0ced8..1ae3557 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -146,6 +146,7 @@ struct bat_priv {
atomic_t aggregated_ogms; /* boolean */
atomic_t bonding; /* boolean */
atomic_t fragmentation; /* boolean */
+ atomic_t ap_isolation; /* boolean */
atomic_t vis_mode; /* VIS_TYPE_* */
atomic_t gw_mode; /* GW_MODE_* */
atomic_t gw_sel_class; /* uint */
--
1.7.5.3
^ permalink raw reply related
* [PATCH 3/8] batman-adv: detect clients connected through a 802.11 device
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Antonio Quartulli, Marek Lindner
In-Reply-To: <1314190838-2273-1-git-send-email-lindner_marek@yahoo.de>
From: Antonio Quartulli <ordex@autistici.org>
Clients connected through a 802.11 device are now marked with the
TT_CLIENT_WIFI flag. This flag is also advertised with the tt
announcement.
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
---
net/batman-adv/hard-interface.c | 30 ++++++++++++++++++++++++++++++
net/batman-adv/hard-interface.h | 1 +
net/batman-adv/main.c | 2 +-
net/batman-adv/main.h | 2 ++
net/batman-adv/packet.h | 1 +
net/batman-adv/routing.c | 2 +-
net/batman-adv/soft-interface.c | 4 ++--
net/batman-adv/translation-table.c | 15 ++++++++++++---
net/batman-adv/translation-table.h | 9 +++++----
9 files changed, 55 insertions(+), 11 deletions(-)
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index 0d73e1e..bf91e4d 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -681,6 +681,36 @@ err_out:
return NET_RX_DROP;
}
+/* This function returns true if the interface represented by ifindex is a
+ * 802.11 wireless device */
+bool is_wifi_iface(int ifindex)
+{
+ struct net_device *net_device = NULL;
+ bool ret = false;
+
+ if (ifindex == NULL_IFINDEX)
+ goto out;
+
+ net_device = dev_get_by_index(&init_net, ifindex);
+ if (!net_device)
+ goto out;
+
+#ifdef CONFIG_WIRELESS_EXT
+ /* pre-cfg80211 drivers have to implement WEXT, so it is possible to
+ * check for wireless_handlers != NULL */
+ if (net_device->wireless_handlers)
+ ret = true;
+ else
+#endif
+ /* cfg80211 drivers have to set ieee80211_ptr */
+ if (net_device->ieee80211_ptr)
+ ret = true;
+out:
+ if (net_device)
+ dev_put(net_device);
+ return ret;
+}
+
struct notifier_block hard_if_notifier = {
.notifier_call = hard_if_event,
};
diff --git a/net/batman-adv/hard-interface.h b/net/batman-adv/hard-interface.h
index 442eacb..67f78d1 100644
--- a/net/batman-adv/hard-interface.h
+++ b/net/batman-adv/hard-interface.h
@@ -42,6 +42,7 @@ void hardif_remove_interfaces(void);
int hardif_min_mtu(struct net_device *soft_iface);
void update_min_mtu(struct net_device *soft_iface);
void hardif_free_rcu(struct rcu_head *rcu);
+bool is_wifi_iface(int ifindex);
static inline void hardif_free_ref(struct hard_iface *hard_iface)
{
diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
index b0f9068..79b9ae5 100644
--- a/net/batman-adv/main.c
+++ b/net/batman-adv/main.c
@@ -107,7 +107,7 @@ int mesh_init(struct net_device *soft_iface)
if (tt_init(bat_priv) < 1)
goto err;
- tt_local_add(soft_iface, soft_iface->dev_addr);
+ tt_local_add(soft_iface, soft_iface->dev_addr, NULL_IFINDEX);
if (vis_init(bat_priv) < 1)
goto err;
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
index 3daa9b6..60b3696 100644
--- a/net/batman-adv/main.h
+++ b/net/batman-adv/main.h
@@ -62,6 +62,8 @@
#define NO_FLAGS 0
+#define NULL_IFINDEX 0 /* dummy ifindex used to avoid iface checks */
+
#define NUM_WORDS (TQ_LOCAL_WINDOW_SIZE / WORD_BIT_SIZE)
#define LOG_BUF_LEN 8192 /* has to be a power of 2 */
diff --git a/net/batman-adv/packet.h b/net/batman-adv/packet.h
index b76b4be..8802eab 100644
--- a/net/batman-adv/packet.h
+++ b/net/batman-adv/packet.h
@@ -84,6 +84,7 @@ enum tt_query_flags {
enum tt_client_flags {
TT_CLIENT_DEL = 1 << 0,
TT_CLIENT_ROAM = 1 << 1,
+ TT_CLIENT_WIFI = 1 << 2,
TT_CLIENT_NOPURGE = 1 << 8,
TT_CLIENT_NEW = 1 << 9,
TT_CLIENT_PENDING = 1 << 10
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index ec23f9f..13444e9 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -1299,7 +1299,7 @@ int recv_roam_adv(struct sk_buff *skb, struct hard_iface *recv_if)
roam_adv_packet->client);
tt_global_add(bat_priv, orig_node, roam_adv_packet->client,
- atomic_read(&orig_node->last_ttvn) + 1, true);
+ atomic_read(&orig_node->last_ttvn) + 1, true, false);
/* Roaming phase starts: I have new information but the ttvn has not
* been incremented yet. This flag will make me check all the incoming
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 6ba35a2..6deed44 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -536,7 +536,7 @@ static int interface_set_mac_addr(struct net_device *dev, void *p)
if (atomic_read(&bat_priv->mesh_state) == MESH_ACTIVE) {
tt_local_remove(bat_priv, dev->dev_addr,
"mac address changed", false);
- tt_local_add(dev, addr->sa_data);
+ tt_local_add(dev, addr->sa_data, NULL_IFINDEX);
}
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
@@ -595,7 +595,7 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
goto dropped;
/* Register the client MAC in the transtable */
- tt_local_add(soft_iface, ethhdr->h_source);
+ tt_local_add(soft_iface, ethhdr->h_source, skb->skb_iif);
orig_node = transtable_search(bat_priv, ethhdr->h_dest);
if (is_multicast_ether_addr(ethhdr->h_dest) ||
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index 6004cd8..d630564 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -183,7 +183,8 @@ static int tt_local_init(struct bat_priv *bat_priv)
return 1;
}
-void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
+void tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
+ int ifindex)
{
struct bat_priv *bat_priv = netdev_priv(soft_iface);
struct tt_local_entry *tt_local_entry = NULL;
@@ -207,6 +208,8 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
memcpy(tt_local_entry->addr, addr, ETH_ALEN);
tt_local_entry->last_seen = jiffies;
tt_local_entry->flags = NO_FLAGS;
+ if (is_wifi_iface(ifindex))
+ tt_local_entry->flags |= TT_CLIENT_WIFI;
atomic_set(&tt_local_entry->refcount, 2);
/* the batman interface mac address should never be purged */
@@ -495,7 +498,8 @@ static void tt_changes_list_free(struct bat_priv *bat_priv)
/* caller must hold orig_node refcount */
int tt_global_add(struct bat_priv *bat_priv, struct orig_node *orig_node,
- const unsigned char *tt_addr, uint8_t ttvn, bool roaming)
+ const unsigned char *tt_addr, uint8_t ttvn, bool roaming,
+ bool wifi)
{
struct tt_global_entry *tt_global_entry;
struct orig_node *orig_node_tmp;
@@ -537,6 +541,9 @@ int tt_global_add(struct bat_priv *bat_priv, struct orig_node *orig_node,
tt_global_entry->roam_at = 0;
}
+ if (wifi)
+ tt_global_entry->flags |= TT_CLIENT_WIFI;
+
bat_dbg(DBG_TT, bat_priv,
"Creating new global tt entry: %pM (via %pM)\n",
tt_global_entry->addr, orig_node->orig);
@@ -1363,7 +1370,9 @@ static void _tt_update_changes(struct bat_priv *bat_priv,
(tt_change + i)->flags & TT_CLIENT_ROAM);
else
if (!tt_global_add(bat_priv, orig_node,
- (tt_change + i)->addr, ttvn, false))
+ (tt_change + i)->addr, ttvn, false,
+ (tt_change + i)->flags &
+ TT_CLIENT_WIFI))
/* In case of problem while storing a
* global_entry, we stop the updating
* procedure without committing the
diff --git a/net/batman-adv/translation-table.h b/net/batman-adv/translation-table.h
index e6b564d..4d1ca35 100644
--- a/net/batman-adv/translation-table.h
+++ b/net/batman-adv/translation-table.h
@@ -26,15 +26,16 @@ int tt_len(int changes_num);
int tt_changes_fill_buffer(struct bat_priv *bat_priv,
unsigned char *buff, int buff_len);
int tt_init(struct bat_priv *bat_priv);
-void tt_local_add(struct net_device *soft_iface, const uint8_t *addr);
+void tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
+ int ifindex);
void tt_local_remove(struct bat_priv *bat_priv,
const uint8_t *addr, const char *message, bool roaming);
int tt_local_seq_print_text(struct seq_file *seq, void *offset);
void tt_global_add_orig(struct bat_priv *bat_priv, struct orig_node *orig_node,
const unsigned char *tt_buff, int tt_buff_len);
-int tt_global_add(struct bat_priv *bat_priv,
- struct orig_node *orig_node, const unsigned char *addr,
- uint8_t ttvn, bool roaming);
+int tt_global_add(struct bat_priv *bat_priv, struct orig_node *orig_node,
+ const unsigned char *addr, uint8_t ttvn, bool roaming,
+ bool wifi);
int tt_global_seq_print_text(struct seq_file *seq, void *offset);
void tt_global_del_orig(struct bat_priv *bat_priv,
struct orig_node *orig_node, const char *message);
--
1.7.5.3
^ permalink raw reply related
* [PATCH 2/8] batman-adv: correct several typ0s in the comments
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Antonio Quartulli, Marek Lindner
In-Reply-To: <1314190838-2273-1-git-send-email-lindner_marek@yahoo.de>
From: Antonio Quartulli <ordex@autistici.org>
Several typos have been corrected and some sentences have been rephrased
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
---
net/batman-adv/bitarray.c | 6 +++---
net/batman-adv/gateway_client.c | 10 +++++-----
net/batman-adv/hard-interface.c | 4 ++--
net/batman-adv/main.h | 4 ++--
net/batman-adv/routing.c | 19 +++++++++----------
net/batman-adv/send.c | 10 +++++-----
net/batman-adv/soft-interface.c | 2 +-
net/batman-adv/translation-table.c | 8 ++++----
net/batman-adv/translation-table.h | 2 +-
net/batman-adv/types.h | 4 ++--
net/batman-adv/unicast.h | 2 +-
net/batman-adv/vis.c | 2 +-
12 files changed, 36 insertions(+), 37 deletions(-)
diff --git a/net/batman-adv/bitarray.c b/net/batman-adv/bitarray.c
index c1f4bfc..0be9ff3 100644
--- a/net/batman-adv/bitarray.c
+++ b/net/batman-adv/bitarray.c
@@ -97,12 +97,12 @@ static void bit_shift(unsigned long *seq_bits, int32_t n)
(seq_bits[i - word_num - 1] >>
(WORD_BIT_SIZE-word_offset));
/* and the upper part of the right half and shift it left to
- * it's position */
+ * its position */
/* for our example that would be: word[0] = 9800 + 0076 =
* 9876 */
}
- /* now for our last word, i==word_num, we only have the it's "left"
- * half. that's the 1000 word in our example.*/
+ /* now for our last word, i==word_num, we only have its "left" half.
+ * that's the 1000 word in our example.*/
seq_bits[i] = (seq_bits[i - word_num] << word_offset);
diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c
index 056180e..619fb73 100644
--- a/net/batman-adv/gateway_client.c
+++ b/net/batman-adv/gateway_client.c
@@ -532,14 +532,14 @@ static bool is_type_dhcprequest(struct sk_buff *skb, int header_len)
pkt_len -= header_len + DHCP_OPTIONS_OFFSET + 1;
/* Access the dhcp option lists. Each entry is made up by:
- * - octect 1: option type
- * - octect 2: option data len (only if type != 255 and 0)
- * - octect 3: option data */
+ * - octet 1: option type
+ * - octet 2: option data len (only if type != 255 and 0)
+ * - octet 3: option data */
while (*p != 255 && !ret) {
- /* p now points to the first octect: option type */
+ /* p now points to the first octet: option type */
if (*p == 53) {
/* type 53 is the message type option.
- * Jump the len octect and go to the data octect */
+ * Jump the len octet and go to the data octet */
if (pkt_len < 2)
goto out;
p += 2;
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index db7aacf..0d73e1e 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -249,7 +249,7 @@ static void hardif_activate_interface(struct hard_iface *hard_iface)
/**
* the first active interface becomes our primary interface or
- * the next active interface after the old primay interface was removed
+ * the next active interface after the old primary interface was removed
*/
primary_if = primary_if_get_selected(bat_priv);
if (!primary_if)
@@ -573,7 +573,7 @@ out:
return NOTIFY_DONE;
}
-/* receive a packet with the batman ethertype coming on a hard
+/* incoming packets with the batman ethertype received on any active hard
* interface */
static int batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
struct packet_type *ptype,
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
index a6df61a..3daa9b6 100644
--- a/net/batman-adv/main.h
+++ b/net/batman-adv/main.h
@@ -44,7 +44,7 @@
#define PURGE_TIMEOUT 200
#define TT_LOCAL_TIMEOUT 3600 /* in seconds */
#define TT_CLIENT_ROAM_TIMEOUT 600
-/* sliding packet range of received originator messages in squence numbers
+/* sliding packet range of received originator messages in sequence numbers
* (should be a multiple of our word size) */
#define TQ_LOCAL_WINDOW_SIZE 64
#define TT_REQUEST_TIMEOUT 3 /* seconds we have to keep pending tt_req */
@@ -133,7 +133,7 @@ enum dbg_level {
#include <linux/mutex.h> /* mutex */
#include <linux/module.h> /* needed by all modules */
#include <linux/netdevice.h> /* netdevice */
-#include <linux/etherdevice.h> /* ethernet address classifaction */
+#include <linux/etherdevice.h> /* ethernet address classification */
#include <linux/if_ether.h> /* ethernet header */
#include <linux/poll.h> /* poll_table */
#include <linux/kthread.h> /* kernel threads */
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 0f32c81..ec23f9f 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -75,10 +75,9 @@ static void update_transtable(struct bat_priv *bat_priv,
/* the ttvn increased by one -> we can apply the attached changes */
if (ttvn - orig_ttvn == 1) {
- /* the OGM could not contain the changes because they were too
- * many to fit in one frame or because they have already been
- * sent TT_OGM_APPEND_MAX times. In this case send a tt
- * request */
+ /* the OGM could not contain the changes due to their size or
+ * because they have already been sent TT_OGM_APPEND_MAX times.
+ * In this case send a tt request */
if (!tt_num_changes) {
full_table = false;
goto request_table;
@@ -87,13 +86,13 @@ static void update_transtable(struct bat_priv *bat_priv,
tt_update_changes(bat_priv, orig_node, tt_num_changes, ttvn,
(struct tt_change *)tt_buff);
- /* Even if we received the crc into the OGM, we prefer
- * to recompute it to spot any possible inconsistency
+ /* Even if we received the precomputed crc with the OGM, we
+ * prefer to recompute it to spot any possible inconsistency
* in the global table */
orig_node->tt_crc = tt_global_crc(bat_priv, orig_node);
/* The ttvn alone is not enough to guarantee consistency
- * because a single value could repesent different states
+ * because a single value could represent different states
* (due to the wrap around). Thus a node has to check whether
* the resulting table (after applying the changes) is still
* consistent or not. E.g. a node could disconnect while its
@@ -228,7 +227,7 @@ static int is_bidirectional_neigh(struct orig_node *orig_node,
if (!neigh_node)
goto out;
- /* if orig_node is direct neighbour update neigh_node last_valid */
+ /* if orig_node is direct neighbor update neigh_node last_valid */
if (orig_node == orig_neigh_node)
neigh_node->last_valid = jiffies;
@@ -473,7 +472,7 @@ static void update_orig(struct bat_priv *bat_priv, struct orig_node *orig_node,
if (router && (router->tq_avg > neigh_node->tq_avg))
goto update_tt;
- /* if the TQ is the same and the link not more symetric we
+ /* if the TQ is the same and the link not more symmetric we
* won't consider it either */
if (router && (neigh_node->tq_avg == router->tq_avg)) {
orig_node_tmp = router->orig_node;
@@ -1243,7 +1242,7 @@ int recv_tt_query(struct sk_buff *skb, struct hard_iface *recv_if)
}
break;
case TT_RESPONSE:
- /* packet needs to be linearised to access the TT changes */
+ /* packet needs to be linearized to access the TT changes */
if (skb_linearize(skb) < 0)
goto out;
diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
index 58d1447..57ae809 100644
--- a/net/batman-adv/send.c
+++ b/net/batman-adv/send.c
@@ -135,7 +135,7 @@ static void send_packet_to_if(struct forw_packet *forw_packet,
"Forwarding"));
bat_dbg(DBG_BATMAN, bat_priv,
"%s %spacket (originator %pM, seqno %d, TQ %d, TTL %d,"
- " IDF %s, hvn %d) on interface %s [%pM]\n",
+ " IDF %s, ttvn %d) on interface %s [%pM]\n",
fwd_str, (packet_num > 0 ? "aggregated " : ""),
batman_packet->orig, ntohl(batman_packet->seqno),
batman_packet->tq, batman_packet->ttl,
@@ -313,7 +313,7 @@ void schedule_own_packet(struct hard_iface *hard_iface)
prepare_packet_buffer(bat_priv, hard_iface);
}
- /* if the changes have been sent enough times */
+ /* if the changes have been sent often enough */
if (!atomic_dec_not_zero(&bat_priv->tt_ogm_append_cnt))
reset_packet_buffer(bat_priv, hard_iface);
}
@@ -454,7 +454,7 @@ static void _add_bcast_packet_to_list(struct bat_priv *bat_priv,
}
/* add a broadcast packet to the queue and setup timers. broadcast packets
- * are sent multiple times to increase probability for beeing received.
+ * are sent multiple times to increase probability for being received.
*
* This function returns NETDEV_TX_OK on success and NETDEV_TX_BUSY on
* errors.
@@ -612,7 +612,7 @@ void purge_outstanding_packets(struct bat_priv *bat_priv,
&bat_priv->forw_bcast_list, list) {
/**
- * if purge_outstanding_packets() was called with an argmument
+ * if purge_outstanding_packets() was called with an argument
* we delete only packets belonging to the given interface
*/
if ((hard_iface) &&
@@ -641,7 +641,7 @@ void purge_outstanding_packets(struct bat_priv *bat_priv,
&bat_priv->forw_bat_list, list) {
/**
- * if purge_outstanding_packets() was called with an argmument
+ * if purge_outstanding_packets() was called with an argument
* we delete only packets belonging to the given interface
*/
if ((hard_iface) &&
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 3e2f91f..6ba35a2 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -532,7 +532,7 @@ static int interface_set_mac_addr(struct net_device *dev, void *p)
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
- /* only modify transtable if it has been initialised before */
+ /* only modify transtable if it has been initialized before */
if (atomic_read(&bat_priv->mesh_state) == MESH_ACTIVE) {
tt_local_remove(bat_priv, dev->dev_addr,
"mac address changed", false);
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
index fb6931d..6004cd8 100644
--- a/net/batman-adv/translation-table.c
+++ b/net/batman-adv/translation-table.c
@@ -369,8 +369,8 @@ static void tt_local_set_pending(struct bat_priv *bat_priv,
tt_local_event(bat_priv, tt_local_entry->addr,
tt_local_entry->flags | flags);
- /* The local client has to be merked as "pending to be removed" but has
- * to be kept in the table in order to send it in an full tables
+ /* The local client has to be marked as "pending to be removed" but has
+ * to be kept in the table in order to send it in a full table
* response issued before the net ttvn increment (consistency check) */
tt_local_entry->flags |= TT_CLIENT_PENDING;
}
@@ -1137,12 +1137,12 @@ static bool send_other_tt_response(struct bat_priv *bat_priv,
orig_ttvn = (uint8_t)atomic_read(&req_dst_orig_node->last_ttvn);
req_ttvn = tt_request->ttvn;
- /* I have not the requested data */
+ /* I don't have the requested data */
if (orig_ttvn != req_ttvn ||
tt_request->tt_data != req_dst_orig_node->tt_crc)
goto out;
- /* If it has explicitly been requested the full table */
+ /* If the full table has been explicitly requested */
if (tt_request->flags & TT_FULL_TABLE ||
!req_dst_orig_node->tt_buff)
full_table = true;
diff --git a/net/batman-adv/translation-table.h b/net/batman-adv/translation-table.h
index d4122cb..e6b564d 100644
--- a/net/batman-adv/translation-table.h
+++ b/net/batman-adv/translation-table.h
@@ -49,7 +49,7 @@ uint16_t tt_local_crc(struct bat_priv *bat_priv);
uint16_t tt_global_crc(struct bat_priv *bat_priv, struct orig_node *orig_node);
void tt_free(struct bat_priv *bat_priv);
int send_tt_request(struct bat_priv *bat_priv,
- struct orig_node *dst_orig_node, uint8_t hvn,
+ struct orig_node *dst_orig_node, uint8_t ttvn,
uint16_t tt_crc, bool full_table);
bool send_tt_response(struct bat_priv *bat_priv,
struct tt_query_packet *tt_request);
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
index 25bd1db..bd0ced8 100644
--- a/net/batman-adv/types.h
+++ b/net/batman-adv/types.h
@@ -57,7 +57,7 @@ struct hard_iface {
* @batman_seqno_reset: time when the batman seqno window was reset
* @gw_flags: flags related to gateway class
* @flags: for now only VIS_SERVER flag
- * @last_real_seqno: last and best known squence number
+ * @last_real_seqno: last and best known sequence number
* @last_ttl: ttl of last received packet
* @last_bcast_seqno: last broadcast sequence number received by this host
*
@@ -156,7 +156,7 @@ struct bat_priv {
atomic_t bcast_seqno;
atomic_t bcast_queue_left;
atomic_t batman_queue_left;
- atomic_t ttvn; /* tranlation table version number */
+ atomic_t ttvn; /* translation table version number */
atomic_t tt_ogm_append_cnt;
atomic_t tt_local_changes; /* changes registered in a OGM interval */
/* The tt_poss_change flag is used to detect an ongoing roaming phase.
diff --git a/net/batman-adv/unicast.h b/net/batman-adv/unicast.h
index 62f54b9..8fd5535 100644
--- a/net/batman-adv/unicast.h
+++ b/net/batman-adv/unicast.h
@@ -24,7 +24,7 @@
#include "packet.h"
-#define FRAG_TIMEOUT 10000 /* purge frag list entrys after time in ms */
+#define FRAG_TIMEOUT 10000 /* purge frag list entries after time in ms */
#define FRAG_BUFFER_SIZE 6 /* number of list elements in buffer */
int frag_reassemble_skb(struct sk_buff *skb, struct bat_priv *bat_priv,
diff --git a/net/batman-adv/vis.c b/net/batman-adv/vis.c
index 8b75cc5..fb9b19f 100644
--- a/net/batman-adv/vis.c
+++ b/net/batman-adv/vis.c
@@ -131,7 +131,7 @@ static void vis_data_insert_interface(const uint8_t *interface,
return;
}
- /* its a new address, add it to the list */
+ /* it's a new address, add it to the list */
entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
if (!entry)
return;
--
1.7.5.3
^ permalink raw reply related
* [PATCH 1/8] batman-adv: hash_add() has to discriminate on the return value
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n, Antonio Quartulli, Marek Lindner
In-Reply-To: <1314190838-2273-1-git-send-email-lindner_marek@yahoo.de>
From: Antonio Quartulli <ordex@autistici.org>
hash_add() returns 0 on success while returns -1 either on error and on
entry already present. The caller could use such information to select
its behaviour. For this reason it is useful that hash_add() returns -1
in case on error and returns 1 in case of entry already present.
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
---
net/batman-adv/hash.h | 25 +++++++++++++++++++------
net/batman-adv/originator.c | 2 +-
net/batman-adv/vis.c | 4 ++--
3 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/net/batman-adv/hash.h b/net/batman-adv/hash.h
index dd5c9fd..d20aa71 100644
--- a/net/batman-adv/hash.h
+++ b/net/batman-adv/hash.h
@@ -76,19 +76,30 @@ static inline void hash_delete(struct hashtable_t *hash,
hash_destroy(hash);
}
-/* adds data to the hashtable. returns 0 on success, -1 on error */
+/**
+ * hash_add - adds data to the hashtable
+ * @hash: storage hash table
+ * @compare: callback to determine if 2 hash elements are identical
+ * @choose: callback calculating the hash index
+ * @data: data passed to the aforementioned callbacks as argument
+ * @data_node: to be added element
+ *
+ * Returns 0 on success, 1 if the element already is in the hash
+ * and -1 on error.
+ */
+
static inline int hash_add(struct hashtable_t *hash,
hashdata_compare_cb compare,
hashdata_choose_cb choose,
const void *data, struct hlist_node *data_node)
{
- int index;
+ int index, ret = -1;
struct hlist_head *head;
struct hlist_node *node;
spinlock_t *list_lock; /* spinlock to protect write access */
if (!hash)
- goto err;
+ goto out;
index = choose(data, hash->size);
head = &hash->table[index];
@@ -99,6 +110,7 @@ static inline int hash_add(struct hashtable_t *hash,
if (!compare(node, data))
continue;
+ ret = 1;
goto err_unlock;
}
rcu_read_unlock();
@@ -108,12 +120,13 @@ static inline int hash_add(struct hashtable_t *hash,
hlist_add_head_rcu(data_node, head);
spin_unlock_bh(list_lock);
- return 0;
+ ret = 0;
+ goto out;
err_unlock:
rcu_read_unlock();
-err:
- return -1;
+out:
+ return ret;
}
/* removes data from hash, if found. returns pointer do data on success, so you
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index f3c3f62..d448018 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -252,7 +252,7 @@ struct orig_node *get_orig_node(struct bat_priv *bat_priv, const uint8_t *addr)
hash_added = hash_add(bat_priv->orig_hash, compare_orig,
choose_orig, orig_node, &orig_node->hash_entry);
- if (hash_added < 0)
+ if (hash_added != 0)
goto free_bcast_own_sum;
return orig_node;
diff --git a/net/batman-adv/vis.c b/net/batman-adv/vis.c
index 8a1b985..8b75cc5 100644
--- a/net/batman-adv/vis.c
+++ b/net/batman-adv/vis.c
@@ -465,7 +465,7 @@ static struct vis_info *add_packet(struct bat_priv *bat_priv,
/* try to add it */
hash_added = hash_add(bat_priv->vis_hash, vis_info_cmp, vis_info_choose,
info, &info->hash_entry);
- if (hash_added < 0) {
+ if (hash_added != 0) {
/* did not work (for some reason) */
kref_put(&info->refcount, free_info);
info = NULL;
@@ -920,7 +920,7 @@ int vis_init(struct bat_priv *bat_priv)
hash_added = hash_add(bat_priv->vis_hash, vis_info_cmp, vis_info_choose,
bat_priv->my_vis_info,
&bat_priv->my_vis_info->hash_entry);
- if (hash_added < 0) {
+ if (hash_added != 0) {
pr_err("Can't add own vis packet into hash\n");
/* not in hash, need to remove it manually. */
kref_put(&bat_priv->my_vis_info->refcount, free_info);
--
1.7.5.3
^ permalink raw reply related
* pull request: batman-adv 2011-08-24
From: Marek Lindner @ 2011-08-24 13:00 UTC (permalink / raw)
To: davem; +Cc: netdev, b.a.t.m.a.n
Hi,
the following 8 patches constitute the first batch I'd like to get the pulled
into net-next-2.6/3.2. They bring a new feature (AP isolation on the mesh
layer), some minor cleanups, spelling fixes and some additional debugfs
output.
Thanks,
Marek
The following changes since commit 322a8b034003c0d46d39af85bf24fee27b902f48:
Linux 3.1-rc1 (2011-08-07 18:23:30 -0700)
are available in the git repository at:
git://git.open-mesh.org/linux-merge.git batman-adv/next
Antonio Quartulli (6):
batman-adv: hash_add() has to discriminate on the return value
batman-adv: correct several typ0s in the comments
batman-adv: detect clients connected through a 802.11 device
batman-adv: implement AP-isolation on the receiver side
batman-adv: implement AP-isolation on the sender side
batman-adv: print client flags in the local/global transtables output
Marek Lindner (2):
batman-adv: reuse tt_len() to calculate tt buffer length
batman-adv: merge update_transtable() into tt related code
Documentation/ABI/testing/sysfs-class-net-mesh | 8 +
net/batman-adv/aggregation.h | 3 +-
net/batman-adv/bat_sysfs.c | 2 +
net/batman-adv/bitarray.c | 6 +-
net/batman-adv/gateway_client.c | 10 +-
net/batman-adv/hard-interface.c | 34 ++++-
net/batman-adv/hard-interface.h | 1 +
net/batman-adv/hash.h | 25 +++-
net/batman-adv/main.c | 2 +-
net/batman-adv/main.h | 6 +-
net/batman-adv/originator.c | 2 +-
net/batman-adv/packet.h | 1 +
net/batman-adv/routing.c | 77 +--------
net/batman-adv/send.c | 10 +-
net/batman-adv/soft-interface.c | 13 +-
net/batman-adv/translation-table.c | 199 ++++++++++++++++++++----
net/batman-adv/translation-table.h | 21 ++--
net/batman-adv/types.h | 5 +-
net/batman-adv/unicast.c | 6 +-
net/batman-adv/unicast.h | 2 +-
net/batman-adv/vis.c | 6 +-
21 files changed, 291 insertions(+), 148 deletions(-)
^ permalink raw reply
* [patch -next] bna: off by one in bfa_msgq_rspq_pi_update()
From: Dan Carpenter @ 2011-08-24 11:30 UTC (permalink / raw)
To: Rasesh Mody
Cc: Debashis Dutt, open list:BROCADE BNA 10 GI..., kernel-janitors
The rspq->rsphdlr[] array has BFI_MC_MAX elements, so this test was
off by one.
Signed-off-by: Dan Carpenter <error27@gmail.com>
diff --git a/drivers/net/ethernet/brocade/bna/bfa_msgq.c b/drivers/net/ethernet/brocade/bna/bfa_msgq.c
index ed52187..dd36427 100644
--- a/drivers/net/ethernet/brocade/bna/bfa_msgq.c
+++ b/drivers/net/ethernet/brocade/bna/bfa_msgq.c
@@ -483,7 +483,7 @@ bfa_msgq_rspq_pi_update(struct bfa_msgq_rspq *rspq, struct bfi_mbmsg *mb)
mc = msghdr->msg_class;
num_entries = ntohs(msghdr->num_entries);
- if ((mc > BFI_MC_MAX) || (rspq->rsphdlr[mc].cbfn == NULL))
+ if ((mc >= BFI_MC_MAX) || (rspq->rsphdlr[mc].cbfn == NULL))
break;
(rspq->rsphdlr[mc].cbfn)(rspq->rsphdlr[mc].cbarg, msghdr);
^ permalink raw reply related
* [patch -next] bna: unlock on error path in pnad_pci_probe()
From: Dan Carpenter @ 2011-08-24 11:29 UTC (permalink / raw)
To: Rasesh Mody
Cc: Debashis Dutt, open list:BROCADE BNA 10 GI..., kernel-janitors
We introduced a new lock here, so there was error path which needs
an unlock now.
Signed-off-by: Dan Carpenter <error27@gmail.com>
diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c
index bdfda07..6ad4b47 100644
--- a/drivers/net/ethernet/brocade/bna/bnad.c
+++ b/drivers/net/ethernet/brocade/bna/bnad.c
@@ -3167,7 +3167,7 @@ bnad_pci_probe(struct pci_dev *pdev,
*/
err = bnad_pci_init(bnad, pdev, &using_dac);
if (err)
- goto free_netdev;
+ goto unlock_mutex;
/*
* Initialize bnad structure
@@ -3296,9 +3296,9 @@ drv_uninit:
bnad_uninit(bnad);
pci_uninit:
bnad_pci_uninit(pdev);
+unlock_mutex:
mutex_unlock(&bnad->conf_mutex);
bnad_lock_uninit(bnad);
-free_netdev:
free_netdev(netdev);
return err;
}
^ permalink raw reply related
* Re: [PATCH 1/2] bnx2x: resurrect RX hashing
From: Vlad Zolotarov @ 2011-08-24 11:18 UTC (permalink / raw)
To: Michal Schmidt
Cc: netdev@vger.kernel.org, Eilon Greenstein, Dmitry Kravkov,
MichałMirosław
In-Reply-To: <20110823161530.24707.67923.stgit@dhcp-29-224.brq.redhat.com>
On Tuesday 23 August 2011 19:15:32 Michal Schmidt wrote:
> bnx2x used to be able to set rxhash, but this was lost in the conversion
> to hw_features (commit 66371c441).
> Restore it and enable it by default.
>
> Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
> CC: Vladislav Zolotarov <vladz@broadcom.com>
> CC: Eilon Greenstein <eilong@broadcom.com>
> CC: Dmitry Kravkov <dmitry@broadcom.com>
> CC: Michał Mirosław <mirq-linux@rere.qmqm.pl>
> ---
>
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 7204789..85dd294
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> @@ -10285,8 +10285,8 @@ static int __devinit bnx2x_init_dev(struct pci_dev
> *pdev, dev->priv_flags |= IFF_UNICAST_FLT;
>
> dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
> - NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 |
> - NETIF_F_RXCSUM | NETIF_F_LRO | NETIF_F_HW_VLAN_TX;
> + NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_LRO |
> + NETIF_F_RXCSUM | NETIF_F_RXHASH | NETIF_F_HW_VLAN_TX;
>
> dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
> NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_HIGHDMA;
ACK
Thanks, Michal.
vlad
^ permalink raw reply
* Re: [PATCH 2/2] bnx2x: expose HW RX VLAN stripping toggle
From: Vlad Zolotarov @ 2011-08-24 11:16 UTC (permalink / raw)
To: Michal Schmidt; +Cc: netdev@vger.kernel.org, Eilon Greenstein, Dmitry Kravkov
In-Reply-To: <20110823161539.24707.9577.stgit@dhcp-29-224.brq.redhat.com>
On Tuesday 23 August 2011 19:15:39 Michal Schmidt wrote:
> Allow disabling of HW RX VLAN stripping with ethtool.
>
> Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
> CC: Vladislav Zolotarov <vladz@broadcom.com>
> CC: Eilon Greenstein <eilong@broadcom.com>
> CC: Dmitry Kravkov <dmitry@broadcom.com>
> ---
>
> drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 1 +
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 18 ++++++++++++++----
> drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 10 +++++-----
> 3 files changed, 20 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h index f127768..dd43634
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
> @@ -1178,6 +1178,7 @@ struct bnx2x {
> #define NO_MCP_FLAG (1 << 9)
>
> #define BP_NOMCP(bp) (bp->flags & NO_MCP_FLAG)
> +#define RX_VLAN_STRIP_FLAG (1 << 10)
> #define MF_FUNC_DIS (1 << 11)
> #define OWN_CNIC_IRQ (1 << 12)
> #define NO_ISCSI_OOO_FLAG (1 << 13)
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 93bff08..340bff9
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
> @@ -385,6 +385,10 @@ static inline u16 bnx2x_set_lro_mss(struct bnx2x *bp,
> u16 parsing_flags, else /* IPv4 */
> hdrs_len += sizeof(struct iphdr);
>
> + /* VLAN header present and not stripped by HW */
> + if ((parsing_flags & PARSING_FLAGS_VLAN) &&
> + !(bp->flags & RX_VLAN_STRIP_FLAG))
> + hdrs_len += VLAN_HLEN;
>
> /* Check if there was a TCP timestamp, if there is it's will
> * always be 12 bytes length: nop nop kind length echo val.
> @@ -412,7 +416,7 @@ static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct
> bnx2x_fastpath *fp, frag_size = le16_to_cpu(cqe->pkt_len) - len_on_bd;
> pages = SGE_PAGE_ALIGN(frag_size) >> SGE_PAGE_SHIFT;
>
> - /* This is needed in order to enable forwarding support */
> + /* Doing LRO, let TCP know the receive MSS */
> if (frag_size)
> skb_shinfo(skb)->gso_size = bnx2x_set_lro_mss(bp,
> tpa_info->parsing_flags, len_on_bd);
> @@ -514,7 +518,8 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct
> bnx2x_fastpath *fp, skb->ip_summed = CHECKSUM_UNNECESSARY;
>
> if (!bnx2x_fill_frag_skb(bp, fp, queue, skb, cqe, cqe_idx)) {
> - if (tpa_info->parsing_flags & PARSING_FLAGS_VLAN)
> + if ((tpa_info->parsing_flags & PARSING_FLAGS_VLAN) &&
> + (bp->flags & RX_VLAN_STRIP_FLAG))
> __vlan_hwaccel_put_tag(skb, tpa_info-
>vlan_tag);
> napi_gro_receive(&fp->napi, skb);
> } else {
> @@ -757,8 +762,8 @@ reuse_rx:
>
> skb_record_rx_queue(skb, fp->index);
>
> - if (le16_to_cpu(cqe_fp->pars_flags.flags) &
> - PARSING_FLAGS_VLAN)
> + if ((le16_to_cpu(cqe_fp->pars_flags.flags) &
> + PARSING_FLAGS_VLAN) && (bp->flags & RX_VLAN_STRIP_FLAG))
> __vlan_hwaccel_put_tag(skb,
> le16_to_cpu(cqe_fp->vlan_tag));
> napi_gro_receive(&fp->napi, skb);
> @@ -3431,6 +3436,11 @@ int bnx2x_set_features(struct net_device *dev, u32
> features) else
> flags &= ~TPA_ENABLE_FLAG;
>
> + if (features & NETIF_F_HW_VLAN_RX)
> + flags |= RX_VLAN_STRIP_FLAG;
> + else
> + flags &= ~RX_VLAN_STRIP_FLAG;
> +
> if (features & NETIF_F_LOOPBACK) {
> if (bp->link_params.loopback_mode != LOOPBACK_BMAC) {
> bp->link_params.loopback_mode = LOOPBACK_BMAC;
> diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 85dd294..e444e7d
> 100644
> --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
> @@ -2722,9 +2722,8 @@ static inline unsigned long bnx2x_get_q_flags(struct
> bnx2x *bp, __set_bit(BNX2X_Q_FLG_MCAST, &flags);
> }
>
> - /* Always set HW VLAN stripping */
> - __set_bit(BNX2X_Q_FLG_VLAN, &flags);
> -
> + if (bp->flags & RX_VLAN_STRIP_FLAG)
> + __set_bit(BNX2X_Q_FLG_VLAN, &flags);
>
> return flags | bnx2x_get_common_flags(bp, fp, true);
> }
> @@ -10286,12 +10285,13 @@ static int __devinit bnx2x_init_dev(struct
> pci_dev *pdev,
>
> dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
> NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_LRO |
> - NETIF_F_RXCSUM | NETIF_F_RXHASH | NETIF_F_HW_VLAN_TX;
> + NETIF_F_RXCSUM | NETIF_F_RXHASH |
> + NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
>
> dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM
|
> NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 |
NETIF_F_HIGHDMA;
>
> - dev->features |= dev->hw_features | NETIF_F_HW_VLAN_RX;
> + dev->features |= dev->hw_features;
> if (bp->flags & USING_DAC_FLAG)
> dev->features |= NETIF_F_HIGHDMA;
NACK as u set the RX_VLAN_STRIP_FLAG in bp->flags before u reset the function,
thus there is a real posibility that u would handle the pending packets
(during unload) under the new stripping policy while it's not yet configured
in the HW.
thanks,
vlad
^ permalink raw reply
* Re: Bug#584724: linux-image-2.6.32-5-amd64: NETDEV WATCHDOG: eth0 (via-rhine): transmit queue 0 timed out
From: Paul Menzel @ 2011-08-24 10:39 UTC (permalink / raw)
To: Ben Hutchings, 584724; +Cc: Roger Luethi, netdev, R. Scott Bailey
In-Reply-To: <1275859426.10677.69.camel@localhost>
[-- Attachment #1: Type: text/plain, Size: 39590 bytes --]
Version: 2.6.32-35
Dear, Roger, dear Roger, dear Ben and dear NetDev folks,
Am Sonntag, den 06.06.2010, 22:23 +0100 schrieb Ben Hutchings:
> There's some kind of TX lock-up bug in via-rhine (or more likely certain
> variants of the hardware).
>
> On Sat, 2010-06-05 at 22:41 -0400, R. Scott Bailey wrote:
> > Package: linux-2.6
> > Version: 2.6.32-15
> > Severity: normal
> >
> > This appears to be the same bug as:
> > https://bugzilla.kernel.org/show_bug.cgi?id=11663
[…]
I experienced the same problem today when there probably was high usage
of the network interface `eth0` and the network suddenly stopped
working.
[ 1649.816037] ------------[ cut here ]------------
[ 1649.816061] WARNING: at /tmp/buildd/linux-2.6-2.6.32/debian/build/source_i386_none/net/sched/sch_generic.c:261 dev_watchdog+0xd2/0x16f()
[ 1649.816068] Hardware name: System Product Name
[ 1649.816074] NETDEV WATCHDOG: eth0 (via-rhine): transmit queue 0 timed out
[ 1649.816078] Modules linked in: binfmt_misc via drm ip6table_filter ip6_tables iptable_filter ip_tables x_tables powernow_k8 cpufreq_conservative cpufreq_userspace cpufreq_stats cpufreq_powersave reiserfs xfs exportfs fuse kvm_amd kvm loop firewire_sbp2 firewire_core crc_itu_t snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device amd64_edac_mod psmouse snd edac_core soundcore parport_pc i2c_viapro serio_raw snd_page_alloc k8temp edac_mce_amd evdev parport asus_atk0110 shpchp i2c_core pci_hotplug processor button ext3 jbd mbcache sha256_generic aes_x86_64 aes_generic cbc dm_crypt dm_mod raid1 md_mod sg usbhid hid sd_mod crc_t10dif sr_mod cdrom ata_generic sata_via uhci_hcd pata_via libata ehci_hcd thermal thermal_sys usbcore nls_base scsi_mod via_rhine mii [last unloaded: scsi_wait_scan]
[ 1649.816213] Pid: 0, comm: swapper Not tainted 2.6.32-5-amd64 #1
[ 1649.816218] Call Trace:
[ 1649.816223] <IRQ> [<ffffffff8125ff97>] ? dev_watchdog+0xd2/0x16f
[ 1649.816238] [<ffffffff8125ff97>] ? dev_watchdog+0xd2/0x16f
[ 1649.816248] [<ffffffff8104de1c>] ? warn_slowpath_common+0x77/0xa3
[ 1649.816255] [<ffffffff8125fec5>] ? dev_watchdog+0x0/0x16f
[ 1649.816262] [<ffffffff8104dea4>] ? warn_slowpath_fmt+0x51/0x59
[ 1649.816272] [<ffffffff811904ec>] ? rb_insert_color+0xba/0xe2
[ 1649.816281] [<ffffffff81041b4f>] ? enqueue_task_fair+0x3e/0x82
[ 1649.816292] [<ffffffff810164f7>] ? sched_clock+0x5/0x8
[ 1649.816299] [<ffffffff8125fe99>] ? netif_tx_lock+0x3d/0x69
[ 1649.816309] [<ffffffff8124ae2e>] ? netdev_drivername+0x3b/0x40
[ 1649.816316] [<ffffffff8125ff97>] ? dev_watchdog+0xd2/0x16f
[ 1649.816324] [<ffffffff81050065>] ? release_task+0x2ed/0x3fa
[ 1649.816335] [<ffffffff8105a3ff>] ? run_timer_softirq+0x1c9/0x268
[ 1649.816344] [<ffffffff81068f5b>] ? sched_clock_local+0x13/0x74
[ 1649.816354] [<ffffffff81053b83>] ? __do_softirq+0xdd/0x1a6
[ 1649.816363] [<ffffffff8102425e>] ? lapic_next_event+0x18/0x1d
[ 1649.816371] [<ffffffff81011cac>] ? call_softirq+0x1c/0x30
[ 1649.816378] [<ffffffff8101322b>] ? do_softirq+0x3f/0x7c
[ 1649.816385] [<ffffffff810539f3>] ? irq_exit+0x36/0x76
[ 1649.816393] [<ffffffff81024d2c>] ? smp_apic_timer_interrupt+0x87/0x95
[ 1649.816400] [<ffffffff81011673>] ? apic_timer_interrupt+0x13/0x20
[ 1649.816405] <EOI> [<ffffffff8102c570>] ? native_safe_halt+0x2/0x3
[ 1649.816421] [<ffffffff810171ad>] ? default_idle+0x34/0x51
[ 1649.816428] [<ffffffff81017539>] ? c1e_idle+0xf5/0xfb
[ 1649.816437] [<ffffffff8100feb1>] ? cpu_idle+0xa2/0xda
[ 1649.816448] [<ffffffff814eb140>] ? early_idt_handler+0x0/0x71
[ 1649.816456] [<ffffffff814ebcdd>] ? start_kernel+0x3dc/0x3e8
[ 1649.816464] [<ffffffff814eb3b7>] ? x86_64_start_kernel+0xf9/0x106
[ 1649.816470] ---[ end trace 60fe8c71761322c0 ]---
[ 1649.816620] eth0: Transmit timed out, status 1003, PHY status 796d, resetting...
[ 1649.817405] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1661.816170] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1661.816939] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1673.816203] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1673.816989] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1689.816172] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1689.816923] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1711.816175] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1711.816949] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1725.816228] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1725.816981] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1743.816171] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1743.816935] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1759.816238] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1759.816990] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1769.816216] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1769.817194] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1779.816170] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1779.816982] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1789.816208] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1789.816961] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1801.816211] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1801.816963] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 1815.816171] eth0: Transmit timed out, status 0003, PHY status 796d, resetting...
[ 1815.816938] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
Looking at the files in `/var/log` I only found that one occurrence and
I do not remember having it seen before. So it will be hard to
reproduce.
Did anyone look further into this issue? What is the best way to
proceed?
Thanks,
Paul
-- Package-specific info:
** Version:
Linux version 2.6.32-5-amd64 (Debian 2.6.32-35) (dannf@debian.org) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Mon Jun 13 05:49:32 UTC 2011
** Command line:
BOOT_IMAGE=/vmlinuz-2.6.32-5-amd64 root=/dev/mapper/speicher-root ro quiet
** Not tainted
** Kernel log:
[ 1.969559] usb 3-2: Manufacturer: ALCOR
[ 1.969655] usb 3-2: configuration #1 chosen from 1 choice
[ 1.972620] hub 3-2:1.0: USB hub found
[ 1.974547] hub 3-2:1.0: 4 ports detected
[ 34.436426] PM: Starting manual resume from disk
[ 34.436431] PM: Resume from partition 253:2
[ 34.436433] PM: Checking hibernation image.
[ 34.437267] PM: Error -22 checking image file
[ 34.437271] PM: Resume from disk failed.
[ 34.469253] kjournald starting. Commit interval 5 seconds
[ 34.469280] EXT3-fs: mounted filesystem with ordered data mode.
[ 36.067027] <30>udevd[479]: starting version 172
[ 36.820001] input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input2
[ 36.820017] ACPI: Sleep Button [SLPB]
[ 36.820094] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input3
[ 36.820098] ACPI: Power Button [PWRB]
[ 36.820172] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input4
[ 36.820176] ACPI: Power Button [PWRF]
[ 36.869497] processor LNXCPU:00: registered as cooling_device0
[ 36.869722] processor LNXCPU:01: registered as cooling_device1
[ 36.995431] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[ 37.195935] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[ 37.199434] k8temp 0000:00:18.3: Temperature readouts might be wrong - check erratum #141
[ 37.305311] parport_pc 00:04: reported by Plug and Play ACPI
[ 37.305357] parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE]
[ 37.309018] EDAC MC: Ver: 2.1.0 Jun 13 2011
[ 37.392788] EDAC amd64_edac: Ver: 3.2.0 Jun 13 2011
[ 37.393206] EDAC amd64: ECC is enabled by BIOS.
[ 37.393260] EDAC MC: Rev F or later detected
[ 37.393339] EDAC MC0: Giving out device to 'amd64_edac' 'RevF': DEV 0000:00:18.2
[ 37.393366] EDAC PCI0: Giving out device to module 'amd64_edac' controller 'EDAC PCI controller': DEV '0000:00:18.2' (POLLED)
[ 38.078767] alloc irq_desc for 17 on node 0
[ 38.078771] alloc kstat_irqs on node 0
[ 38.078780] HDA Intel 0000:20:01.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[ 38.078848] HDA Intel 0000:20:01.0: setting latency timer to 64
[ 38.078852] HDA Intel 0000:20:01.0: PCI: Disallowing DAC for device
[ 38.165465] input: HDA Digital PCBeep as /devices/pci0000:20/0000:20:01.0/input/input5
[ 38.229088] input: ImPS/2 Logitech Wheel Mouse as /devices/platform/i8042/serio1/input/input6
[ 38.654956] ioctl32(fsck.ext3:873): Unknown cmd fd(3) cmd(0000127c){t:12;sz:0} arg(ffbb5b78) on /dev/dm-1
[ 38.733323] EXT3 FS on dm-1, internal journal
[ 39.260842] loop: module loaded
[ 39.347705] kvm: Nested Virtualization enabled
[ 40.978782] Adding 4194296k swap on /dev/mapper/speicher-swap. Priority:-1 extents:1 across:4194296k
[ 40.991004] ioctl32(fsck.ext3:1112): Unknown cmd fd(3) cmd(0000127c){t:12;sz:0} arg(ffc7e7c8) on /dev/md0
[ 41.096680] ioctl32(fsck.ext3:1113): Unknown cmd fd(3) cmd(0000127c){t:12;sz:0} arg(ff829398) on /dev/dm-6
[ 41.611917] ioctl32(fsck.ext3:1118): Unknown cmd fd(3) cmd(0000127c){t:12;sz:0} arg(ffb6a518) on /dev/dm-3
[ 42.107186] ioctl32(fsck.ext3:1122): Unknown cmd fd(3) cmd(0000127c){t:12;sz:0} arg(ffa58358) on /dev/dm-4
[ 42.831820] fuse init (API version 7.13)
[ 43.030563] kjournald starting. Commit interval 5 seconds
[ 43.062644] EXT3 FS on md0, internal journal
[ 43.062650] EXT3-fs: mounted filesystem with ordered data mode.
[ 43.361324] kjournald starting. Commit interval 5 seconds
[ 43.425153] EXT3 FS on dm-6, internal journal
[ 43.425160] EXT3-fs: mounted filesystem with ordered data mode.
[ 43.537165] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled
[ 43.538260] SGI XFS Quota Management subsystem
[ 43.624320] XFS mounting filesystem dm-7
[ 43.830882] Ending clean XFS mount for filesystem: dm-7
[ 44.042558] XFS mounting filesystem dm-8
[ 44.368648] Ending clean XFS mount for filesystem: dm-8
[ 44.432261] REISERFS (device dm-5): found reiserfs format "3.6" with standard journal
[ 44.432311] REISERFS (device dm-5): using ordered data mode
[ 44.441915] REISERFS (device dm-5): journal params: device dm-5, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30
[ 44.443486] REISERFS (device dm-5): checking transaction log (dm-5)
[ 44.460023] REISERFS (device dm-5): Using r5 hash to sort names
[ 44.620051] kjournald starting. Commit interval 5 seconds
[ 44.620626] EXT3 FS on dm-3, internal journal
[ 44.620633] EXT3-fs: mounted filesystem with ordered data mode.
[ 44.664746] kjournald starting. Commit interval 5 seconds
[ 44.665047] EXT3 FS on dm-4, internal journal
[ 44.665054] EXT3-fs: mounted filesystem with ordered data mode.
[ 47.302027] powernow-k8: Found 1 AMD Athlon(tm) X2 Dual Core Processor BE-2350 processors (2 cpu cores) (version 2.20.00)
[ 47.302087] powernow-k8: 0 : fid 0xd (2100 MHz), vid 0xe
[ 47.302089] powernow-k8: 1 : fid 0xc (2000 MHz), vid 0xf
[ 47.302092] powernow-k8: 2 : fid 0xa (1800 MHz), vid 0x11
[ 47.302094] powernow-k8: 3 : fid 0x2 (1000 MHz), vid 0x16
[ 47.504022] Clocksource tsc unstable (delta = -92800302 ns)
[ 129.063621] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 129.189058] ip6_tables: (C) 2000-2006 Netfilter Core Team
[ 137.998574] [drm] Initialized drm 1.1.0 20060810
[ 138.158226] alloc irq_desc for 16 on node 0
[ 138.158234] alloc kstat_irqs on node 0
[ 138.158256] pci 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[ 138.159938] [drm] Initialized via 2.11.1 20070202 for 0000:01:00.0 on minor 0
[ 138.161083] ioctl32(Xorg:2429): Unknown cmd fd(11) cmd(c0106407){t:'d';sz:16} arg(ffe72770) on /dev/dri/card0
[ 138.161128] ioctl32(Xorg:2429): Unknown cmd fd(11) cmd(c0106407){t:'d';sz:16} arg(ffe72770) on /dev/dri/card0
[ 138.161144] ioctl32(Xorg:2429): Unknown cmd fd(11) cmd(c0086401){t:'d';sz:8} arg(ffe72768) on /dev/dri/card0
[ 138.231724] ioctl32(Xorg:2429): Unknown cmd fd(11) cmd(c0246400){t:'d';sz:36} arg(08823f10) on /dev/dri/card0
[ 138.252608] ioctl32(Xorg:2429): Unknown cmd fd(11) cmd(c0246400){t:'d';sz:36} arg(08823f10) on /dev/dri/card0
[ 142.791066] mtrr: no MTRR for d0000000,8000000 found
[ 146.113242] ioctl32(Xorg:2515): Unknown cmd fd(11) cmd(c0246400){t:'d';sz:36} arg(08665f10) on /dev/dri/card0
[ 146.113308] ioctl32(Xorg:2515): Unknown cmd fd(11) cmd(c0246400){t:'d';sz:36} arg(08665f10) on /dev/dri/card0
[ 146.123386] ioctl32(Xorg:2515): Unknown cmd fd(11) cmd(c0106407){t:'d';sz:16} arg(ffd8c0b0) on /dev/dri/card0
[ 146.123407] ioctl32(Xorg:2515): Unknown cmd fd(11) cmd(c0106407){t:'d';sz:16} arg(ffd8c0b0) on /dev/dri/card0
[ 146.123416] ioctl32(Xorg:2515): Unknown cmd fd(11) cmd(c0086401){t:'d';sz:8} arg(ffd8c0a8) on /dev/dri/card0
[ 146.184393] ioctl32(Xorg:2515): Unknown cmd fd(11) cmd(c0246400){t:'d';sz:36} arg(08665f10) on /dev/dri/card0
[ 146.194407] ioctl32(Xorg:2515): Unknown cmd fd(11) cmd(c0246400){t:'d';sz:36} arg(08665f10) on /dev/dri/card0
[ 185.172076] hda-intel: IRQ timing workaround is activated for card #0. Suggest a bigger bdl_pos_adj.
[ 327.111398] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 337.652026] eth0: no IPv6 routers present
** Model information
sys_vendor: System manufacturer
product_name: System Product Name
product_version: System Version
chassis_vendor: Chassis Manufacture
chassis_version: Chassis Version
bios_vendor: American Megatrends Inc.
bios_version: 0304
board_vendor: ASUSTeK Computer INC.
board_name: M2V-MX SE
board_version: Rev x.xx
** Loaded modules:
Module Size Used by
binfmt_misc 6351 1
via 32815 0
drm 141751 1 via
ip6table_filter 2384 0
ip6_tables 14883 1 ip6table_filter
iptable_filter 2258 0
ip_tables 13691 1 iptable_filter
x_tables 12685 2 ip6_tables,ip_tables
powernow_k8 10946 2
cpufreq_conservative 5162 0
cpufreq_userspace 1960 0
cpufreq_stats 2659 0
cpufreq_powersave 902 0
reiserfs 193068 1
xfs 433495 2
exportfs 3090 1 xfs
fuse 50492 1
kvm_amd 31830 0
kvm 213832 1 kvm_amd
loop 11591 0
firewire_sbp2 11354 0
firewire_core 36576 1 firewire_sbp2
crc_itu_t 1307 1 firewire_core
snd_hda_codec_realtek 235122 1
snd_hda_intel 20003 2
snd_hda_codec 53892 2 snd_hda_codec_realtek,snd_hda_intel
snd_hwdep 5220 1 snd_hda_codec
snd_pcm_oss 32415 0
snd_mixer_oss 12478 1 snd_pcm_oss
snd_pcm 60151 3 snd_hda_intel,snd_hda_codec,snd_pcm_oss
snd_seq_midi 4256 0
snd_rawmidi 15323 1 snd_seq_midi
snd_seq_midi_event 4628 1 snd_seq_midi
snd_seq 41153 2 snd_seq_midi,snd_seq_midi_event
snd_timer 15486 2 snd_pcm,snd_seq
snd_seq_device 4493 3 snd_seq_midi,snd_rawmidi,snd_seq
amd64_edac_mod 13758 0
snd 45966 15 snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
psmouse 49905 0
evdev 7352 14
edac_core 29197 3 amd64_edac_mod
parport_pc 18855 0
soundcore 4566 1 snd
i2c_viapro 5483 0
parport 27682 1 parport_pc
snd_page_alloc 6137 2 snd_hda_intel,snd_pcm
k8temp 3283 0
asus_atk0110 7686 0
shpchp 26232 0
edac_mce_amd 6401 1 amd64_edac_mod
serio_raw 3752 0
i2c_core 15403 2 drm,i2c_viapro
pci_hotplug 21203 1 shpchp
processor 29807 1 powernow_k8
button 4650 0
ext3 106086 5
jbd 36653 1 ext3
mbcache 5050 1 ext3
sha256_generic 8644 2
aes_x86_64 7340 2
aes_generic 25714 1 aes_x86_64
cbc 2507 1
dm_crypt 10600 1
dm_mod 53162 30 dm_crypt
raid1 18207 2
md_mod 73200 3 raid1
sg 23861 0
usbhid 33148 0
hid 63145 1 usbhid
sr_mod 12250 0
cdrom 28631 1 sr_mod
sd_mod 29617 3
crc_t10dif 1276 1 sd_mod
ata_generic 3239 0
uhci_hcd 18457 0
pata_via 7429 0
ehci_hcd 31825 0
sata_via 7896 2
libata 133008 3 ata_generic,pata_via,sata_via
thermal 11610 0
thermal_sys 11942 2 processor,thermal
via_rhine 17259 0
mii 3210 1 via_rhine
usbcore 121970 4 usbhid,uhci_hcd,ehci_hcd
nls_base 6377 1 usbcore
scsi_mod 125813 5 firewire_sbp2,sg,sr_mod,sd_mod,libata
** Network interface configuration:
auto lo
iface lo inet loopback
allow-hotplug eth0
** Network status:
*** IP interfaces and addresses:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:1e:8c:b9:4b:2a brd ff:ff:ff:ff:ff:ff
inet 192.168.178.21/24 brd 192.168.178.255 scope global eth0
inet6 fe80::21e:8cff:feb9:4b2a/64 scope link
valid_lft forever preferred_lft forever
*** Device statistics:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 8656508 14542 0 0 0 0 0 0 8656508 14542 0 0 0 0 0 0
eth0:169205475 144684 0 0 0 0 0 0 9204417 100047 0 0 0 0 0 0
*** Protocol statistics:
Ip:
158979 total packets received
0 forwarded
0 incoming packets discarded
158979 incoming packets delivered
114296 requests sent out
72 dropped because of missing route
Icmp:
0 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
1 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 1
IcmpMsg:
OutType3: 1
Tcp:
2282 active connections openings
0 passive connection openings
6 failed connection attempts
187 connection resets received
6 connections established
139466 segments received
94270 segments send out
222 segments retransmited
0 bad segments received.
2153 resets sent
Udp:
19438 packets received
1 packets to unknown port received.
0 packet receive errors
19727 packets sent
UdpLite:
TcpExt:
245 TCP sockets finished time wait in fast timer
6 time wait sockets recycled by time stamp
2181 delayed acks sent
Quick ack mode was activated 8 times
61 packets directly queued to recvmsg prequeue.
988 bytes directly received in process context from prequeue
114317 packet headers predicted
1 packets header predicted and directly queued to user
2128 acknowledgments not containing data payload received
9176 predicted acknowledgments
7 congestion windows recovered without slow start after partial ack
72 other TCP timeouts
8 DSACKs sent for old packets
2 DSACKs received
375 connections reset due to unexpected data
910 connections reset due to early user close
22 connections aborted due to timeout
TCPDSACKIgnoredNoUndo: 2
IpExt:
InMcastPkts: 110
OutMcastPkts: 112
InBcastPkts: 1
InOctets: 175828154
OutOctets: 16448126
InMcastOctets: 7513
OutMcastOctets: 7913
InBcastOctets: 576
*** Device features:
eth0: 0x0
lo: 0x13865
** PCI devices:
00:00.0 Host bridge [0600]: VIA Technologies, Inc. K8M890CE Host Bridge [1106:0336]
Subsystem: VIA Technologies, Inc. K8M890CE Host Bridge [1106:0336]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64, Cache Line Size: 64 bytes
Region 0: Memory at <ignored> (32-bit, prefetchable)
Capabilities: <access denied>
Kernel driver in use: agpgart-amd64
00:00.1 Host bridge [0600]: VIA Technologies, Inc. K8M890CE Host Bridge [1106:1336]
Subsystem: ASUSTeK Computer Inc. Device [1043:8297]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
00:00.2 Host bridge [0600]: VIA Technologies, Inc. K8M890CE Host Bridge [1106:2336]
Subsystem: ASUSTeK Computer Inc. Device [1043:8297]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
00:00.3 Host bridge [0600]: VIA Technologies, Inc. K8M890CE Host Bridge [1106:3336]
Subsystem: ASUSTeK Computer Inc. Device [1043:8297]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
00:00.4 Host bridge [0600]: VIA Technologies, Inc. K8M890CE Host Bridge [1106:4336]
Subsystem: ASUSTeK Computer Inc. Device [1043:8297]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
00:00.5 PIC [0800]: VIA Technologies, Inc. K8M890CE I/O APIC Interrupt Controller [1106:5336] (prog-if 20 [IO(X)-APIC])
Subsystem: ASUSTeK Computer Inc. Device [1043:8297]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
00:00.7 Host bridge [0600]: VIA Technologies, Inc. K8M890CE Host Bridge [1106:7336]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
00:01.0 PCI bridge [0604]: VIA Technologies, Inc. VT8237 PCI bridge [K8T800/K8T890 South] [1106:b188] (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
Memory behind bridge: fa000000-fbefffff
Prefetchable memory behind bridge: d0000000-dfffffff
Secondary status: 66MHz+ FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity+ SERR+ NoISA- VGA+ MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: <access denied>
00:02.0 PCI bridge [0604]: VIA Technologies, Inc. K8T890 PCI to PCI Bridge Controller [1106:a238] (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
I/O behind bridge: 00001000-00001fff
Memory behind bridge: 80000000-801fffff
Prefetchable memory behind bridge: 0000000080200000-00000000803fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity+ SERR+ NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: <access denied>
Kernel driver in use: pcieport
00:03.0 PCI bridge [0604]: VIA Technologies, Inc. K8T890 PCI to PCI Bridge Controller [1106:c238] (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Bus: primary=00, secondary=03, subordinate=03, sec-latency=0
I/O behind bridge: 00002000-00002fff
Memory behind bridge: 80400000-805fffff
Prefetchable memory behind bridge: 0000000080600000-00000000807fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: <access denied>
Kernel driver in use: pcieport
00:0f.0 IDE interface [0101]: VIA Technologies, Inc. Device [1106:5372] (prog-if 8f [Master SecP SecO PriP PriO])
Subsystem: ASUSTeK Computer Inc. Device [1043:827c]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64
Interrupt: pin B routed to IRQ 21
Region 0: I/O ports at ec00 [size=8]
Region 1: I/O ports at e880 [size=4]
Region 2: I/O ports at e800 [size=8]
Region 3: I/O ports at e480 [size=4]
Region 4: I/O ports at e400 [size=16]
Region 5: I/O ports at e000 [size=256]
Capabilities: <access denied>
Kernel driver in use: sata_via
00:0f.1 IDE interface [0101]: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE [1106:0571] (rev 07) (prog-if 8a [Master SecP PriP])
Subsystem: ASUSTeK Computer Inc. Device [1043:827c]
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 32
Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable) [size=1]
Region 4: I/O ports at fc00 [size=16]
Capabilities: <access denied>
Kernel driver in use: pata_via
00:10.0 USB Controller [0c03]: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038] (rev b0) (prog-if 00 [UHCI])
Subsystem: ASUSTeK Computer Inc. Device [1043:827c]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 20
Region 4: I/O ports at d480 [size=32]
Capabilities: <access denied>
Kernel driver in use: uhci_hcd
00:10.1 USB Controller [0c03]: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038] (rev b0) (prog-if 00 [UHCI])
Subsystem: ASUSTeK Computer Inc. Device [1043:827c]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64, Cache Line Size: 64 bytes
Interrupt: pin B routed to IRQ 22
Region 4: I/O ports at d800 [size=32]
Capabilities: <access denied>
Kernel driver in use: uhci_hcd
00:10.2 USB Controller [0c03]: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038] (rev b0) (prog-if 00 [UHCI])
Subsystem: ASUSTeK Computer Inc. Device [1043:827c]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64, Cache Line Size: 64 bytes
Interrupt: pin C routed to IRQ 21
Region 4: I/O ports at d880 [size=32]
Capabilities: <access denied>
Kernel driver in use: uhci_hcd
00:10.3 USB Controller [0c03]: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller [1106:3038] (rev b0) (prog-if 00 [UHCI])
Subsystem: ASUSTeK Computer Inc. Device [1043:827c]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64, Cache Line Size: 64 bytes
Interrupt: pin D routed to IRQ 23
Region 4: I/O ports at dc00 [size=32]
Capabilities: <access denied>
Kernel driver in use: uhci_hcd
00:10.4 USB Controller [0c03]: VIA Technologies, Inc. USB 2.0 [1106:3104] (rev 90) (prog-if 20 [EHCI])
Subsystem: ASUSTeK Computer Inc. Device [1043:827c]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64, Cache Line Size: 64 bytes
Interrupt: pin C routed to IRQ 21
Region 0: Memory at f9fffc00 (32-bit, non-prefetchable) [size=256]
Capabilities: <access denied>
Kernel driver in use: ehci_hcd
00:11.0 ISA bridge [0601]: VIA Technologies, Inc. VT8237S PCI to ISA Bridge [1106:3372]
Subsystem: ASUSTeK Computer Inc. Device [1043:827c]
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Capabilities: <access denied>
00:11.7 Host bridge [0600]: VIA Technologies, Inc. VT8251 Ultra VLINK Controller [1106:287e]
Subsystem: VIA Technologies, Inc. Device [1106:337e]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 128
Capabilities: <access denied>
00:12.0 Ethernet controller [0200]: VIA Technologies, Inc. VT6102 [Rhine-II] [1106:3065] (rev 7c)
Subsystem: ASUSTeK Computer Inc. A7V600-X Motherboard [1043:80ed]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64 (750ns min, 2000ns max), Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 23
Region 0: I/O ports at d000 [size=256]
Region 1: Memory at f9fff800 (32-bit, non-prefetchable) [size=256]
Capabilities: <access denied>
Kernel driver in use: via-rhine
00:13.0 Host bridge [0600]: VIA Technologies, Inc. VT8237A Host Bridge [1106:337b]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ >SERR- <PERR- INTx-
Latency: 0
Capabilities: <access denied>
00:13.1 PCI bridge [0604]: VIA Technologies, Inc. VT8237A PCI to PCI Bridge [1106:337a] (prog-if 01 [Subtractive decode])
Control: I/O- Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ >SERR- <PERR- INTx-
Latency: 0
Bus: primary=00, secondary=04, subordinate=04, sec-latency=0
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity+ SERR+ NoISA- VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: <access denied>
00:18.0 Host bridge [0600]: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration [1022:1100]
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Capabilities: <access denied>
00:18.1 Host bridge [0600]: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map [1022:1101]
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
00:18.2 Host bridge [0600]: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller [1022:1102]
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Kernel driver in use: amd64_edac
00:18.3 Host bridge [0600]: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control [1022:1103]
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Capabilities: <access denied>
Kernel driver in use: k8temp
01:00.0 VGA compatible controller [0300]: VIA Technologies, Inc. K8M890CE/K8N890CE [Chrome 9] [1106:3230] (rev 11) (prog-if 00 [VGA controller])
Subsystem: ASUSTeK Computer Inc. Device [1043:8297]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64 (500ns min)
Interrupt: pin A routed to IRQ 16
Region 0: Memory at d0000000 (32-bit, prefetchable) [size=256M]
Region 1: Memory at fa000000 (32-bit, non-prefetchable) [size=16M]
Expansion ROM at fbef0000 [disabled] [size=64K]
Capabilities: <access denied>
20:01.0 Audio device [0403]: VIA Technologies, Inc. VT1708/A [Azalia HDAC] (VIA High Definition Audio Controller) [1106:3288] (rev 10)
Subsystem: ASUSTeK Computer Inc. Device [1043:8290]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 17
Region 0: Memory at fbffc000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: HDA Intel
** USB devices:
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 046d:c312 Logitech, Inc. DeLuxe 250 Keyboard
Bus 003 Device 002: ID 058f:9254 Alcor Micro Corp. Hub
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1, 'experimental')
Architecture: i386 (x86_64)
Kernel: Linux 2.6.32-5-amd64 (SMP w/2 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages linux-image-2.6.32-5-amd64 depends on:
ii debconf [debconf-2.0] 1.5.41 Debian configuration management sy
ii initramfs-tools [linux-initra 0.99 tools for generating an initramfs
ii linux-base 3.3 Linux image base package
ii module-init-tools 3.16-1 tools for managing Linux kernel mo
Versions of packages linux-image-2.6.32-5-amd64 recommends:
ii firmware-linux-free 3 Binary firmware for various driver
iu libc6-i686 2.13-17 Embedded GNU C Library: Shared lib
Versions of packages linux-image-2.6.32-5-amd64 suggests:
pn grub | lilo <none> (no description available)
pn linux-doc-2.6.32 <none> (no description available)
Versions of packages linux-image-2.6.32-5-amd64 is related to:
pn firmware-bnx2 <none> (no description available)
pn firmware-bnx2x <none> (no description available)
pn firmware-ipw2x00 <none> (no description available)
pn firmware-ivtv <none> (no description available)
pn firmware-iwlwifi <none> (no description available)
pn firmware-linux <none> (no description available)
pn firmware-linux-nonfree <none> (no description available)
pn firmware-qlogic <none> (no description available)
pn firmware-ralink <none> (no description available)
pn xen-hypervisor <none> (no description available)
-- debconf information:
linux-image-2.6.32-5-amd64/postinst/missing-firmware-2.6.32-5-amd64:
linux-image-2.6.32-5-amd64/postinst/bootloader-error-2.6.32-5-amd64:
linux-image-2.6.32-5-amd64/prerm/would-invalidate-boot-loader-2.6.32-5-amd64: true
linux-image-2.6.32-5-amd64/postinst/ignoring-do-bootloader-2.6.32-5-amd64:
shared/kernel-image/really-run-bootloader: true
linux-image-2.6.32-5-amd64/postinst/depmod-error-initrd-2.6.32-5-amd64: false
linux-image-2.6.32-5-amd64/prerm/removing-running-kernel-2.6.32-5-amd64: true
linux-image-2.6.32-5-amd64/postinst/bootloader-test-error-2.6.32-5-amd64:
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply
* Re: slow performance on disk/network i/o full speed after drop_caches
From: Wu Fengguang @ 2011-08-24 9:33 UTC (permalink / raw)
To: Stefan Priebe - Profihost AG
Cc: Pekka Enberg, LKML, linux-mm@kvack.org, Andrew Morton, Mel Gorman,
Jens Axboe, Linux Netdev List
In-Reply-To: <4E54BDCF.9020504@profihost.ag>
On Wed, Aug 24, 2011 at 05:01:03PM +0800, Stefan Priebe - Profihost AG wrote:
>
> >> sync&& echo 3>/proc/sys/vm/drop_caches&& sleep 2&& echo 0
> >>> /proc/sys/vm/drop_caches
>
> Another way to get it working again is to stop some processes. Could be
> mysql or apache or php fcgi doesn't matter. Just free some memory.
> Although there are already 5GB free.
Is it a NUMA machine and _every_ node has enough free pages?
grep . /sys/devices/system/node/node*/vmstat
Thanks,
Fengguang
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
* [PATCH] MAINTAINERS: Update GIT trees for network development
From: Nicolas de Pesloüan @ 2011-08-24 9:31 UTC (permalink / raw)
To: David Miller; +Cc: Nicolas de Pesloüan, netdev
In-Reply-To: <20110721.202643.1084293436022974836.davem@davemloft.net>
Remove -2.6 from net and net-next tree names.
Signed-off-by: Nicolas de Pesloüan <nicolas.2p.debian@free.fr>
---
MAINTAINERS | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index d32e1ca..d899040 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4442,8 +4442,8 @@ M: "David S. Miller" <davem@davemloft.net>
L: netdev@vger.kernel.org
W: http://www.linuxfoundation.org/en/Net
W: http://patchwork.ozlabs.org/project/netdev/list/
-T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
-T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git
+T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
+T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
S: Maintained
F: net/
F: include/net/
--
1.7.5.4
^ permalink raw reply related
* Re: slow performance on disk/network i/o full speed after drop_caches
From: Wu Fengguang @ 2011-08-24 9:32 UTC (permalink / raw)
To: Pekka Enberg
Cc: Stefan Priebe - Profihost AG, LKML, linux-mm@kvack.org,
Andrew Morton, Mel Gorman, Jens Axboe, Linux Netdev List
In-Reply-To: <CAOJsxLEFYW0eDbXQ0Uixf-FjsxHZ_1nmnovNx1CWj=m-c-_vJw@mail.gmail.com>
On Wed, Aug 24, 2011 at 02:20:07PM +0800, Pekka Enberg wrote:
> On Wed, Aug 24, 2011 at 9:06 AM, Stefan Priebe - Profihost AG
> <s.priebe@profihost.ag> wrote:
> > i hope this is the correct list to write to if it would be nice to give me a
> > hint where i can ask.
> >
> > Kernel: 2.6.38
> >
> > I'm seeing some strange problems on some of our servers after upgrading to
> > 2.6.38.
> >
> > I'm copying a 1GB file via scp from Machine A to Machine B. When B is
> > freshly booted the file transfer is done with about 80 to 85 Mb/s. I can
> > repeat that various times to performance degrease.
> >
> > Then after some days copying is only done with about 900kb/s up to 3Mb/s
> > going up and down while transfering the file.
> >
> > When i then do drop_caches it works again on 80Mb/s.
> >
> > sync && echo 3 >/proc/sys/vm/drop_caches && sleep 2 && echo 0
> >>/proc/sys/vm/drop_caches
> >
> > Attached is also an output of meminfo before and after drop_caches.
> >
> > What's going on here? MemFree is pretty high.
> >
> > Please CC me i'm not on list.
>
> Interesting. I can imagine one or more of the following to be
> involved: networking, vmscan, block, and writeback. Lets CC all of
> them!
>
> > # before drop_caches
> >
> > # cat /proc/meminfo
> > MemTotal: 8185544 kB
> > MemFree: 6670292 kB
> > Buffers: 105164 kB
> > Cached: 166672 kB
> > SwapCached: 0 kB
> > Active: 728308 kB
> > Inactive: 567428 kB
> > Active(anon): 639204 kB
> > Inactive(anon): 394932 kB
> > Active(file): 89104 kB
> > Inactive(file): 172496 kB
> > Unevictable: 2976 kB
> > Mlocked: 2992 kB
> > SwapTotal: 1464316 kB
> > SwapFree: 1464316 kB
> > Dirty: 52 kB
> > Writeback: 0 kB
Since dirty/writeback pages are low, it seems not being throttled by
balance_dirty_pages().
Stefan, would you please run this several times on the server?
ps -eo user,pid,tid,class,rtprio,ni,pri,psr,pcpu,vsz,rss,pmem,stat,wchan:28,cmd | grep scp
It will show where the scp task is blocked (the wchan field). Hope it helps.
Thanks,
Fengguang
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox