* [PATCH v2] net/r8169: update the new parser for the new firmware
From: Hayes Wang @ 2011-06-15 3:45 UTC (permalink / raw)
To: romieu; +Cc: netdev, linux-kernel, Hayes Wang
Update the parser for the new firmware which is embedded some information.
Signed-off-by: Hayes Wang <hayeswang@realtek.com>
---
drivers/net/r8169.c | 96 +++++++++++++++++++++++++++++++++++++--------------
1 files changed, 70 insertions(+), 26 deletions(-)
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index ef1ce2e..bd9e78f 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -594,6 +594,14 @@ struct ring_info {
u8 __pad[sizeof(void *) - sizeof(u32)];
};
+struct fw_info {
+ u32 magic;
+ char version[32];
+ u32 fw_start;
+ u32 fw_len;
+ u8 chksum;
+};
+
enum features {
RTL_FEATURE_WOL = (1 << 0),
RTL_FEATURE_MSI = (1 << 1),
@@ -1740,21 +1748,57 @@ static void rtl_writephy_batch(struct rtl8169_private *tp,
#define PHY_DELAY_MS 0xe0000000
#define PHY_WRITE_ERI_WORD 0xf0000000
+static int is_firmware_valid(const struct firmware *fw)
+{
+ struct fw_info *f_info = (struct fw_info *)fw->data;
+
+ if (f_info->magic == 0) {
+ size_t i, fw_size;
+ u8 checksum = 0;
+
+ for (i = 0; i < fw->size; i++) {
+ checksum += fw->data[i];
+ }
+
+ if (checksum != 0)
+ return 0;
+
+ fw_size = (fw->size - le32_to_cpu(f_info->fw_start)) / 4;
+ if (fw_size < le32_to_cpu(f_info->fw_len))
+ return 0;
+ } else if (fw->size % 4) {
+ return 0;
+ }
+
+ return 1;
+}
+
static void
rtl_phy_write_fw(struct rtl8169_private *tp, const struct firmware *fw)
{
- __le32 *phytable = (__le32 *)fw->data;
+ struct fw_info *f_info = (struct fw_info *)fw->data;
struct net_device *dev = tp->dev;
- size_t index, fw_size = fw->size / sizeof(*phytable);
+ __le32 *phytable;
+ size_t i, fw_size;
u32 predata, count;
- if (fw->size % sizeof(*phytable)) {
- netif_err(tp, probe, dev, "odd sized firmware %zd\n", fw->size);
+ if (!is_firmware_valid(fw)) {
+ netif_err(tp, probe, dev, "Invalid firwmare\n");
return;
}
- for (index = 0; index < fw_size; index++) {
- u32 action = le32_to_cpu(phytable[index]);
+ if (f_info->magic == 0) {
+ netif_info(tp, probe, dev, "firmware: %s\n", f_info->version);
+
+ phytable = (__le32 *)(fw->data + le32_to_cpu(f_info->fw_start));
+ fw_size = le32_to_cpu(f_info->fw_len);
+ } else {
+ phytable = (__le32 *)fw->data;
+ fw_size = fw->size / sizeof(*phytable);
+ }
+
+ for (i = 0; i < fw_size; i++) {
+ u32 action = le32_to_cpu(phytable[i]);
u32 regno = (action & 0x0fff0000) >> 16;
switch(action & 0xf0000000) {
@@ -1769,14 +1813,14 @@ rtl_phy_write_fw(struct rtl8169_private *tp, const struct firmware *fw)
break;
case PHY_BJMPN:
- if (regno > index) {
+ if (regno > i) {
netif_err(tp, probe, tp->dev,
"Out of range of firmware\n");
return;
}
break;
case PHY_READCOUNT_EQ_SKIP:
- if (index + 2 >= fw_size) {
+ if (i + 2 >= fw_size) {
netif_err(tp, probe, tp->dev,
"Out of range of firmware\n");
return;
@@ -1785,7 +1829,7 @@ rtl_phy_write_fw(struct rtl8169_private *tp, const struct firmware *fw)
case PHY_COMP_EQ_SKIPN:
case PHY_COMP_NEQ_SKIPN:
case PHY_SKIPN:
- if (index + 1 + regno >= fw_size) {
+ if (i + 1 + regno >= fw_size) {
netif_err(tp, probe, tp->dev,
"Out of range of firmware\n");
return;
@@ -1805,8 +1849,8 @@ rtl_phy_write_fw(struct rtl8169_private *tp, const struct firmware *fw)
predata = 0;
count = 0;
- for (index = 0; index < fw_size; ) {
- u32 action = le32_to_cpu(phytable[index]);
+ for (i = 0; i < fw_size; ) {
+ u32 action = le32_to_cpu(phytable[i]);
u32 data = action & 0x0000ffff;
u32 regno = (action & 0x0fff0000) >> 16;
@@ -1817,54 +1861,54 @@ rtl_phy_write_fw(struct rtl8169_private *tp, const struct firmware *fw)
case PHY_READ:
predata = rtl_readphy(tp, regno);
count++;
- index++;
+ i++;
break;
case PHY_DATA_OR:
predata |= data;
- index++;
+ i++;
break;
case PHY_DATA_AND:
predata &= data;
- index++;
+ i++;
break;
case PHY_BJMPN:
- index -= regno;
+ i -= regno;
break;
case PHY_READ_EFUSE:
predata = rtl8168d_efuse_read(tp->mmio_addr, regno);
- index++;
+ i++;
break;
case PHY_CLEAR_READCOUNT:
count = 0;
- index++;
+ i++;
break;
case PHY_WRITE:
rtl_writephy(tp, regno, data);
- index++;
+ i++;
break;
case PHY_READCOUNT_EQ_SKIP:
- index += (count == data) ? 2 : 1;
+ i += (count == data) ? 2 : 1;
break;
case PHY_COMP_EQ_SKIPN:
if (predata == data)
- index += regno;
- index++;
+ i += regno;
+ i++;
break;
case PHY_COMP_NEQ_SKIPN:
if (predata != data)
- index += regno;
- index++;
+ i += regno;
+ i++;
break;
case PHY_WRITE_PREVIOUS:
rtl_writephy(tp, regno, predata);
- index++;
+ i++;
break;
case PHY_SKIPN:
- index += regno + 1;
+ i += regno + 1;
break;
case PHY_DELAY_MS:
mdelay(data);
- index++;
+ i++;
break;
case PHY_READ_MAC_BYTE:
--
1.7.3.2
^ permalink raw reply related
* Re: [ipv6] valid_lft and active connections
From: YOSHIFUJI Hideaki @ 2011-06-15 3:37 UTC (permalink / raw)
To: Stefan (metze) Metzmacher; +Cc: netdev, yoshfuji
In-Reply-To: <4DF753C6.1000700@samba.org>
Stefan (metze) Metzmacher wrote:
> Am 14.06.2011 13:41, schrieb YOSHIFUJI Hideaki:
> > Hello.
> >
> > Stefan (metze) Metzmacher wrote:
> >> If I use ipv6 addresses with valid_lft != forever, the ipv6 addresses
> >> are removed from the interface if the valid_lft expires, even if there're
> >> established connection which use with address.
> >>
> >> Would it be possible keep the address until the last active connection
> >> is closed? Otherwise the usable of the privacy extensions will make
> >> very long living tcp connections impossible.
> >>
> >
> > I cannot imagine why you do not hear RAs before the address expires.
>
> They do not reset the valid lifetime counter for temporary addresses.
>
> And I think that valid_lft and preferred_lft should work with a manual
> configured setup in a similar way.
This is because of RFC3041 Section 3.3:
| 1) Process the Prefix Information Option as defined in [ADDRCONF],
| either creating a public address or adjusting the lifetimes of
| existing addresses, both public and temporary. When adjusting the
| lifetimes of an existing temporary address, only lower the
| lifetimes. Implementations must not increase the lifetimes of an
| existing temporary address when processing a Prefix Information
| Option.
It would be make sense to allow extending valid lifetime of non-deprecated
addresses, but not sure.
> > And well, I don't think it is a good idea because it is not what
> > "valid lifetime" means.
> >
> > We have 3 states:
> >
> > 1) time <= preferred lifetime
> > 2) preferred lifetime < time <= valid lifetime
> > 3) valid lifetime < lifetime
> >
> > You can make new connection during the period of 1 and you can continue
> > using that connection during the period of 1 and 2.
>
> But it means tcp connection can not last longer than the valid lifetime of
> a temporary address, which is very ugly as the application layer will
> run into
> timeouts instead of getting an immediate error when the kernel drops the
> related ip.
>
Valid lifetime represents administrative "hard" lifetime. If it
expired, all address must be gone.
> > Ask network administrator to advertise longer "valid" lifetime, if
> > needed, and you may want to make net.ipv6.conf.*.max_addresses larger.
>
> My aim is to have a preferred lifetime of say 4 hours, in order to have
> no limit
> on the lifetime of tcp connections, I'd have to set valid lifetime to
> forever,
> which means that I'll have about 180 addresses on an interface after
> a month (8760 after a year) which are mostly all unused.
This is how it works.
How can you determine if one address is not unused at all?
For UDP, applications only know, for example.
In fact, RFC3041 Section 3.4 says:
| As an optional optimization, an implementation may wish to remove a
| deprecated temporary address that is not in use by applications or
| upper-layers. For TCP connections, such information is available in
| control blocks. For UDP-based applications, it may be the case that
| only the applications have knowledge about what addresses are
| actually in use. Consequently, one may need to use heuristics in
| deciding when an address is no longer in use (e.g., the default
| TEMP_VALID_LIFETIME suggested above).
Of course, we could have some sysctl (but default must be off
(or moderate; do it if the number addresses exceeds some limit).
> Do you know a better solution?
Ask your administrator to advertise larger valid lifetime.
Otherwise, other implementation will have similar issues, anyway.
We could have above "optimization" with sysctl.
And, please note that if you want to change address preference in
an application, consider using IPV6_ADDR_PREFERENCES socket
option.
--yoshfuji
^ permalink raw reply
* kernel 2.6.32-27 crash in tcp
From: Vishal Study @ 2011-06-15 2:43 UTC (permalink / raw)
To: netdev; +Cc: vishal.study
Hello,
I'm using kernel 2.6.32-27 on a MIPS platform and get following kernel crash.
I'm running open-source IET iSCSI Stack and get this error during
heavy load test. Any ideas on what could be happening or if this is
known issue?
Thanks,
Vishal.
------------[ cut here ]------------
WARNING: at net/ipv4/tcp.c:1457 tcp_recvmsg+0x7c0/0x990()
recvmsg bug 2: copied 8D07C2AD seq 1EAA6653 rcvnxt 8D083A71 fl 4000
Modules linked in: iscsi_trgt test_ethernet ipv6
Call Trace:
[<ffffffff801127d0>] dump_stack+0x8/0x34
[<ffffffff8024a8e8>] warn_slowpath_common+0x70/0xb0
[<ffffffff8024a97c>] warn_slowpath_fmt+0x34/0x40
[<ffffffff805c0130>] tcp_recvmsg+0x7c0/0x990
[<ffffffff8057bd8c>] sock_common_recvmsg+0x34/0x58
[<ffffffff8057a050>] sock_recvmsg+0x100/0x140
[<ffffffffc0081800>] do_recv+0x120/0x238 [iscsi_trgt]
[<ffffffffc0081ef8>] istd+0x5e0/0x1408 [iscsi_trgt]
[<ffffffff80264820>] kthread+0x88/0x90
[<ffffffff80221ea8>] kernel_thread_helper+0x10/0x18
^ permalink raw reply
* RE: [PATCH] linux-firmware: Replace the old firmware
From: hayeswang @ 2011-06-15 2:38 UTC (permalink / raw)
To: dwmw2; +Cc: romieu, netdev
In-Reply-To: <1307956516-1203-1-git-send-email-hayeswang@realtek.com>
Hi David Woodhouse,
Please give up this patch. Thanks.
Best Regards,
Hayes
-----Original Message-----
From: Hayeswang [mailto:hayeswang@realtek.com]
Sent: Monday, June 13, 2011 5:15 PM
To: dwmw2@infradead.org
Cc: romieu@fr.zoreil.com; netdev@vger.kernel.org; Hayeswang
Subject: [PATCH] linux-firmware: Replace the old firmware
Replace the old firmware with the new one which is embedded more
information. The old firmware needs the old method of parsing, and
the new firmware needs the new one. They are not compatible.
rtl8168d-3.fw replace rtl8168d-1.fw.
rtl8168d-4.fw replace rtl8168d-2.fw.
rtl8168e-3.fw replace rtl8168e-1.fw.
rtl8168e-4.fw replace rtl8168e-2.fw.
rtl8105e-2.fw replace rtl8105e-1.fw.
Signed-off-by: Hayes Wang <hayeswang@realtek.com>
---
WHENCE | 4 ++++
rtl_nic/rtl8105e-2.fw | Bin 0 -> 2144 bytes
rtl_nic/rtl8168d-3.fw | Bin 0 -> 1584 bytes
rtl_nic/rtl8168d-4.fw | Bin 0 -> 1408 bytes
rtl_nic/rtl8168e-3.fw | Bin 2804 -> 5568 bytes
rtl_nic/rtl8168e-4.fw | Bin 0 -> 3984 bytes
6 files changed, 4 insertions(+), 0 deletions(-)
create mode 100644 rtl_nic/rtl8105e-2.fw
create mode 100644 rtl_nic/rtl8168d-3.fw
create mode 100644 rtl_nic/rtl8168d-4.fw
create mode 100644 rtl_nic/rtl8168e-4.fw
diff --git a/WHENCE b/WHENCE
index d2abe41..8eba04a 100644
--- a/WHENCE
+++ b/WHENCE
@@ -1613,10 +1613,14 @@ Driver: r8169 - RealTek 8169/8168/8101 ethernet driver.
File: rtl_nic/rtl8168d-1.fw
File: rtl_nic/rtl8168d-2.fw
+File: rtl_nic/rtl8168d-3.fw
+File: rtl_nic/rtl8168d-4.fw
File: rtl_nic/rtl8105e-1.fw
+File: rtl_nic/rtl8105e-2.fw
File: rtl_nic/rtl8168e-1.fw
File: rtl_nic/rtl8168e-2.fw
File: rtl_nic/rtl8168e-3.fw
+File: rtl_nic/rtl8168e-4.fw
Licence:
* Copyright C 2011, Realtek Semiconductor Corporation
diff --git a/rtl_nic/rtl8105e-2.fw b/rtl_nic/rtl8105e-2.fw
new file mode 100644
index
0000000000000000000000000000000000000000..c19d8288e4bfdb0549a88e0fdc5ae1c3e79e32
db
GIT binary patch
literal 2144
zcma);Z-`W76vp4ZGp@U}<VuDX9(Ra^mI$0t+ZI2~LdFtpMH#xRFhj1XX|-rbAFNKb
zK~S3%T1YL8x&$SXv{6Yx`>BWs?T?XcA13HS`=ty;qBghRGxuJaZdeVxoO|E*oaa2}
z&wK7XxcT9omC?<+M|VF^=_?g)tgOGIGO}y?o-Mm7#lBT*LOF!c8ijBu6nj^eR<A6T
z3Z>q)YkJp~`oj1~cgTk>*BTwY+C%Gd4=<aCM_Jnwxy}6GfO*$m-fxR#3o^KQ{qcBj
zVHtTdt4Xi(Zr-ab?0dH&L%g~+nEzfe&%J5BaoBuC(R>6s_qzGacjimbd*h7xmB<}m
zm@h_N@ea?Y%sY5)ecQZ6TsE5LB{!L01BUimlD#~8!W}G`pJj<>0nYiVxp=K^;;FdW
z6wgyExQ6>!_|fV(Vg403vab&&{=mq_B+Sbby((Baa0*-g!pXg5eie2@=qyFn$w3EP
zpJUB|eS~~mm*LbYPGjap_!Y4ED08kFv>(G4=Q-j{IsZ*klN-=E`HguL%+Grqi(^|5
zE_N$2xDjWU{SREl9F3E6e4KxRx+QrIgXXI;n2Mzhf9i+#Ce5d)@5T9;O9B1x80%j1
zbx97(?3ELJ;dkB@*Q|k&V5K#4a#z2{{Gn;{1;i-qKfsoK8Gou>6+Gp93A`FT1BPTC
z8J_(297e~`fx|5LIq<*b{bP7Ol5m{{yV%s<6Q|-_U!-T{+c}T6fzi}gX)bnV@}!#P
z4xpRlLwDr^;!E$!EIxHtj(%=FOpN2mA><BX-hiy(dq(oJnCn?Lzkp49Qky#XMecU7
zsW<D&^ZI|*O!*bhHgc%D5hZtFA9#wZMqD-Z@sRo9iuoiym49(kp62kaUTo+pu6L;;
zc%9XFhIHXmy+4I*Za<4N_3;Acg7d8Vt@+Rc_w-${U+SI+Tm99Y$!S_+@tB53W44XN
zzLncc={IU{|9_lQSLIjO;db+M4mM^VXU%hO5xJUIti(4=Y@3K{D>5Q>_5Km^HbK6g
zM!tenO%EbxU*bH$lAi*8eqb;EY*L>)!91GWFP>Y_-P6>MduNz|^I(AWJ@#enZyGRP
zMo)jzA9L59?u+_B^H6=5%1`%E=P%7~#Xk3<d4J7(4DQ0JV)rUoJ-5U-dhelk^`7Eo
zXZ4TxOtDjW93TD6_3Oc&NP4vfRs@#_o&&7?_(}C8b8t*+w~*(b!JTKlkmzYodP|X-
zqrW~M$9n)@r-@_HA^PfT@<v>K+WZ7LiVmB<kN?JOz^9(a&^gDM<S$5lQ&fjK{L&bo
zLH8uS)3a&L&Sm(v!=r6o%%K|&%gE`q_?|?*2JV>z*Rf6KXIh8F*!JK<{>s!S`>j(>
rrzXvR0we8}^gEF4yWh}J-(C1H{$}aBCEofE5TfN?)c*iIC%-=d;3S|Q
literal 0
HcmV?d00001
diff --git a/rtl_nic/rtl8168d-3.fw b/rtl_nic/rtl8168d-3.fw
new file mode 100644
index
0000000000000000000000000000000000000000..17309e299a23991bc8ea7aa64d371ba381cda7
70
GIT binary patch
literal 1584
zcmb7_&ud&&6vyvOW{#;*GqpmA5fh{<p>$^2skEy>LTzo*v|=T(n-*030|ZlO;oFQG
zTMKSPagn5`AR{EGD_wMUZmm&5#gx8IlL{@&xY9|QPW+si_h@w2f$+WOo*(ynzvsN0
z*GBi}OQn~Gi~0P4-TBh)Vj=wJSH?P<3gOF;-@m7@cTb@(T-bN8R6JPP7cRfGD`dlv
z218aMSO~TEzIFTW&8!qmL0PS}OwDyuW72e&b%XtTU<956TenP;=ZWbz9Y~pG(yWbj
z&NSOg{EPp~BPPk4AaABjEV<P~rdprr<7w0Mk}3U}X`I+?^Vl`h680Rvl-D0OwLdX!
zJmCDSX?+cB!1r#9_rSX8_BqpeIBx&S^z?R9dC@fDwMR@lsWpdPb-UWN`#EcbSoe>y
zuKF6^E6!noyX-I>t8_IObA<P3jN|eCi5OpX+%z2pBQOtE&}yP!T4|dux^}DhE}4q4
zZ*s4xPED`9>j~3eZ^HX|;#N$nADJ$b<2)jG_<1X6>{y9RQ^(Moo<xs#_i}Tb4}a$y
zp`&AV%Jlin!}ysDK5DqH2VehIA35_`(*itN7fcs8ci{`uGV4T(!{qrq907eE{O-=l
zF*QNoXX(i`lYTM1GZgoP9{K#VxZAMb?GAT~_tL-8*YCS=O?r2#NDtNRVGrCknU^Qg
z@;Pchdy>As&AePeGxD5E<+f??i0PX*m=R|04%pfM)0AUB;gLa``VS9tn)vF}@}6~S
z9HsYO<Ed_q&OSBj?0au2aE?a1>p(5n$aV2P<i<eyH4h4XeI2n*H16A~G5!XB?u(e~
zN0|dZ>sH=WAUE|cnsLtRMbjm;eTjLkH0UWa(TR(>rUp$J&c9MMeI3VSJcigXj&8n3
z-6__yJ#c%b%WaW4SSp)dNAqcTF7CvhBj?Ai-NsJ7#g_9rZ8`&wbiymPJHErr3%-7O
znD+iV?|9E=#p~BjnT~U>Lrv4bvgz6lVpGfm->mzi_f4m%;cw5x8D@@mpkuGX1A7fk
z@AGEWelnGbt6b$<KaNh+7<|n1^M|HhzWqOVC%zkCuI`&2w5dnlR*t<1|CrxDaNf!{
zv%w70+jKC!fR2tgu~W?G4Q$7C&Tmq`c9s~{1J~jFJNkaW-Zs-!zmvZ~aP{}@Q|{a*
zFH7xBbWOo4fPVk$m8?z(?LmJFe**({ZaA&5+`}6_#IxO}<PG0|PiK$+0m<)QUJh0t
literal 0
HcmV?d00001
diff --git a/rtl_nic/rtl8168d-4.fw b/rtl_nic/rtl8168d-4.fw
new file mode 100644
index
0000000000000000000000000000000000000000..b35fb1b70eae2bdadad668b79462c9b94c0b00
8f
GIT binary patch
literal 1408
zcmb7^OGuPa6vyw3^PSAB86$`?bO>n|%}kAzD;Lts$COl<Z4xTlv<wmwj@l+oXcx55
zX(5HdM7gR(L5sGTffyx?IvNy=t;%Q9?|MH=mwlUa&*Pr+KmT*S+uTqcOD5~0iCFCD
z{#bH<B5pQ(wP>k;G3_Q+eIS1DKs+9eAF4?vYLZ7x-{mUfnMy4;o*E;@44-;t^`8Y#
z)rcDPbYWgJzbN|6N^IYeQ^;G$`DxL?4$-nQ(b4UqW3{4nb)ua?^tb3~(V-!yXV3@3
z&Y!_Q*yw!r{Pei!n@-X0JT;q~4CA+YxWTule0j#n!YN<YBeSBDG0}Lp=<gPA<wR$C
zM0>%w>Pv_o#23DRJ|$X8?$#>NiXWmmaNo7P%z&fM$3eb`tw)|LvWdIqrfA84%a_JB
z7~u@QfW=GvO=Q1E`~w#sB0kc;&R2vl?0f-y9=_5H+&rc3BhhC1Up@D(<Kl#?VNSX{
z5!*YMT95+)(UEVW?~Q1sGLx%rMs_Bx-|3B>W~081-acR(hU=-{Zgz<|QN8G9*v||*
zz*i`cd#mWVJ)&23i#}woAMQ~T&Zfa~5+2T%ixxjYa=&|4^s8@w4<8ms8XPY|8}D4P
zu{H-YtM_wk8(Npcx7(OmX4627<uuK?)Hq(U@Y0AqM;$9eaF?T=J^$su2#&Y><3D8i
z&x;0`&HwB{mOY5sypy8W;?#lb9{997k^x8lu&a@!-YQn&%E8)C+z`EI9uo7|#pKab
z<jT-T7T)Z+i23iZy9725Y_+3sJ_gRSqHjCt8~vr#xnuPeX67w(9}Jf)j!AH}fh*|i
z;L4((@O>@pOGViES8e!5u-SYiUDSOoI(J(1^D)thUF`6PXcxJHC8GQA&u96cE{V30
zZ>0sDotyFX5I7bWz_o;(Jg;g+Pt#K%ExIWndWZcOeaAadEV}EH=+blkN%ktV;_$Cw
zyat{eF>ClN=G?D;`Z9VW+?gmmg3atjM;5-IQ>QRNedH2vQ#<=*v5XV*k$!H2dGi20
zVH>+HdZP<`+?`8t@4o0VeD3rduASrv81myE@8%s;?jTd#i9~~HJ{R#eR`MKf(Y3d6
J*~VKN-yhTU5+48n
literal 0
HcmV?d00001
diff --git a/rtl_nic/rtl8168e-3.fw b/rtl_nic/rtl8168e-3.fw
index
cb494071d0273c7b3102b97552f4bc7b756c0e17..d3497e897c447bce05859be45cd7ca3f9ad7a2
a3 100644
GIT binary patch
literal 5568
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
literal 2804
zcmaKuS!|S56vyvuXDEwdX=z8WolZ+xrAP=!Vq#-Nc`(M9m<Srf13vJiQ4@-BIfa&`
zMS>d`6R?UeXp0DaGtxc~Ow<@#AOWSxH%JAQw21-A(sulv@B5~F;_~q2-gE9*{^x(s
zJu}W#sjG16T$w8jxh!jsTkSNBzTQ=$cQ3}A^PHP)Mp<?7_Vv!~b}qHVg}!E6^Ecaa
zhfmgFTN>J?u(?)9sXFmvo4q7vYMSp0SElP4GJ2TRHD>fnTi?j&5!S;mW%Q`YZ)UX1
z<d-uVi<N20Wi-K>U`?@(F3G5{4)4oon)L)SwfH$4IpT&j{MJ>M`xqL)kaQJVo32nd
zmeFOlj%KvBf^`JhR%G8V;^Xi!U9={r)D{;VUM=cT<8VP#+eHtdi(eBhi;2c;pA)Sw
z?jICg!`}SjJ4FwwXqzXR-!8hN4f{&uyl7=BI_%n_I_ypNR#dl3v>n|y<p1iBXwxat
z3;RXi!KQ6MwD(=n?u6*u&7v#F*;|9m`d%mxB1?<tAT|?NyVr?s$Jbp3TSjy@`@tK+
zJ+hL+YU~}uj{Wv%Ov4(=Nn(1}1Dx4T{7QqpakQ4Y5{;rIU`!bYKZ`!FS#&A;k^4li
zCyC>Uc2d{fS<x&!wq3vud0vy~Li71fbpE}>v3-~5`}i!j{kNhoMEoaJi&jVcmvJ@=
zJMWU{F6zpG?OF=Ha)DgTI|2MP5x?2sDxRfkMQg(|4@?$kPBG4$JL1%d)<xo61@m~E
zxuSC;XRpG4azyk7ybaw1;|9@f#5Vr=o)7r`tzL9F_$%@2rnal0JQ=xiTA;fg)lCm{
zx1zckfo^YA5X<-Fek|Uu=7?@47|`wHzT(*CxUbe<xfgn{6h4-KYlxgrgJ=I_^lAEM
zIr_EK@ezI8iy!^ySnIpl{|TonME4Adj?zEHT7RHctM?}L#^~Lyr@+Gbhar|uYI}5^
zXtTxG%YBh!UWe$9&mhxJ)tmW{JGe)CXOEN9!}i#5aBd|}pJ?U`-&xUfVC<)-(|kL2
zh^_}q`Z>`l1<_~W*uniHmDrx+>lZzL1Ra>VW1@S(WAEn>y>aXw(c|>!R`T@0-I=85
z*)VR=_XxR8UBMrWMeJ7p5Vei%;X6UUk8<DO_Rfp`^1J9C#7x6q0zR|g@ZkGmsP{O_
z(;uU(N%I4%^-@O@@1*YbzLY!j^(~@zWpD4Tr+xi4c&g>S!PA97V$BX$YVvWsCi*&Y
z{e1U}u4KQMyY8F?Pb-6at+u;39o*+;<AfR0F$o>^LR{0uPx98b1U1^5Zp{-DKAPz1
zI^xBt`_mkEIUL~Xq>dEWYw#UDi0ypQmazZL_H%e%P_(7C6!lCu+l$yP4Bkp@7<VIi
z7h&5vKz?$L&lGYb;Hnxwk2AwkjgMC%dWAmE(ns-x=m*3$t~$w60*9^aJBX72-wgA;
z6=180_~t_2o4h&S7oJPtdEA$nTksu$-+$x7n?Nst+n*(tgPtG9H&JwAb1*Mb?Ysdy
zkMLu@m%wke_-6|u_&Cc_XQJpA;mZ6RH5ShX76m-GkD2kD*^EC;&DQrL;2-23%|40V
z=DW=&<J_ZHP4CEIcXfa|uF?mwP(F%02{|6hUn3`wE$@g6_^=re-@u#UtYr{i^foI-
zcrV76=^SsW*|5;FzRu%K2ycemu_}6Rzvuun$>b#Qi*bsx#&X;uM+^NsM4Y}&<Redx
zFHQ~qoVpzJ^$hEAW|qyHRZ~Q()-VIWbF!cJ1~>im{8Vz-`~JVLoPJ1tB3k(VpR;cq
z549yM4sWVk$qW8X<XXk|Uzp~?dm}aE3&HPpjQ6?tvjF3!v&>}THF4M7;BBXOiog9s
zF>vEIZ8AI_W~DZNKJ5$Yws{?ujYFHW#^(WkJG!`Y<!z7G1&-)U&tto>L9`)HUyyrg
zPV@=(`B&iJVbPyF^k9Cnhkmj>Slwfy59L$Fqy2}R%G%R#hg|&c<--4_g@POZZ(97n
VdHX+Uxf?6kf6?+D|9>1#e*sYqwB!H)
diff --git a/rtl_nic/rtl8168e-4.fw b/rtl_nic/rtl8168e-4.fw
new file mode 100644
index
0000000000000000000000000000000000000000..1ded93185fff12bd206ebf0762471b5b1434d6
cd
GIT binary patch
literal 3984
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
literal 0
HcmV?d00001
--
1.7.3.2
^ permalink raw reply related
* [PATCH net-next-2.6] net: rfs: enable RFS before first data packet is received
From: Eric Dumazet @ 2011-06-15 2:15 UTC (permalink / raw)
To: Tom Herbert, David Miller; +Cc: netdev, Ben Hutchings, jamal
First packet received on a passive tcp flow is not correctly RFS
steered.
One sock_rps_record_flow() call is missing in inet_accept()
But before that, we also must record rxhash when child socket is setup.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Tom Herbert <therbert@google.com>
CC: Ben Hutchings <bhutchings@solarflare.com>
CC: Jamal Hadi Salim <hadi@cyberus.ca>
---
Netconf2011 workshop ;)
net/ipv4/af_inet.c | 1 +
net/ipv4/tcp_ipv4.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 83673d2..0600f0f 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -676,6 +676,7 @@ int inet_accept(struct socket *sock, struct socket *newsock, int flags)
lock_sock(sk2);
+ sock_rps_record_flow(sk2);
WARN_ON(!((1 << sk2->sk_state) &
(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT | TCPF_CLOSE)));
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 617dee3..955b8e6 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1594,6 +1594,7 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
goto discard;
if (nsk != sk) {
+ sock_rps_save_rxhash(nsk, skb->rxhash);
if (tcp_child_process(sk, nsk, skb)) {
rsk = nsk;
goto reset;
^ permalink raw reply related
* Re: Please revert "iwlagn: Support new 5000 microcode." from 2.6.32 and 2.6.33
From: Herton Ronaldo Krzesinski @ 2011-06-15 1:14 UTC (permalink / raw)
To: Greg KH
Cc: ak, sgruszka, stable, netdev, linux-wireless, linville,
donald.h.fry, linux-kernel, ilw, wey-yi.w.guy, reinette.chatre
In-Reply-To: <20110614230344.GA2065@kroah.com>
On Tue, Jun 14, 2011 at 04:03:44PM -0700, Greg KH wrote:
> On Mon, Jun 13, 2011 at 03:13:18PM -0300, Herton Ronaldo Krzesinski wrote:
> > The patch ("iwlagn: Support new 5000 microcode") shoudn't have been
> > applied on 2.6.32 and 2.6.33 stable trees, it doesn't support new
> > firmware file format, thus if the new firmware is on the disk, loading
> > fails, as reported on:
> > https://bugs.launchpad.net/ubuntu/+source/linux/+bug/796336
> >
> > Support for the iwlagn new firmware file format was only added beginning
> > with 2.6.35 (commit "iwlagn: implement loading a new firmware file
> > type"), so iwlagn works with new firmware only with 2.6.35 or later.
>
> Can I get an ack from the developer of the patch and the people involved
> with it first? It was asked to be backported for a reason, so I would
> at least like to get the people who asked for the backport to have a
> chance to respond please.
>
> It's only nice, why would you exclude them?
I didn't intend to exclude anyone and I'm just reporting it, it didn't
came to my mind CC'ing people while sending to stable, and hopefully
everyone related are CC'ed now.
Also note that this revert request is for 2.6.32 and 2.6.33 *only*
And seems the right thing to do for them.
The other stable release where this was applied (2.6.35) looks fine
but these two are too old to support the new firmware (don't work, need
extra patches backported which weren't, like the commit I mentioned --
commit "iwlagn: implement loading a new firmware file type"), as yourself
can check reading the code/bug report, and what I wrote.
>
> greg k-h
>
--
[]'s
Herton
_______________________________________________
stable mailing list
stable@linux.kernel.org
http://linux.kernel.org/mailman/listinfo/stable
^ permalink raw reply
* RE: [PATCH net-next 2/2] drivers/net: Remove casts of void *
From: Huang, Xiong @ 2011-06-15 0:10 UTC (permalink / raw)
To: Chris Snook, Joe Perches, Ren, Cloud; +Cc: netdev@vger.kernel.org, Jay Cliburn
In-Reply-To: <BANLkTimK4RXsQUnHbE0Eu9==54AbdBKzzQ@mail.gmail.com>
Hi Chris
Yes, Jie yang doesn't maintain it any more. Could you add cjren@qca.qualcomm.com to the list ? thanks.
-Xiong
-----Original Message-----
From: Chris Snook [mailto:chris.snook@gmail.com]
Sent: Tuesday, June 14, 2011 22:23
To: Joe Perches; Huang, Xiong
Cc: netdev@vger.kernel.org; Jay Cliburn
Subject: Re: [PATCH net-next 2/2] drivers/net: Remove casts of void *
On Tue, Jun 14, 2011 at 10:17 AM, Joe Perches <joe@perches.com> wrote:
> On Tue, 2011-06-14 at 06:34 -0400, Chris Snook wrote:
>> atlx looks fine.
>> Acked-By: Chris Snook <chris.snook@gmail.com>
>
> Hey Chris.
>
> I get bounce messages from one of the ATLX DRIVERS MAINTAINERS.
>
> ATLX ETHERNET DRIVERS
> M: Jay Cliburn <jcliburn@gmail.com>
> M: Chris Snook <chris.snook@gmail.com>
> M: Jie Yang <jie.yang@atheros.com>
>
> Jie Yang at atheros.com doesn't work for me.
> Perhaps that entry should be removed?
>
> Jie Yang doesn't seem to have contributed any acks or patches to
> drivers/net/atlx/
>
> <jie.yang@atheros.com>: host gatewayhorse1.qualcomm.com[199.106.114.111] said:
> 550 #5.1.0 Address rejected jie.yang@atheros.com (in reply to RCPT
> TO
> command)
Xiong --
Is Jie still working on atlx drivers? Should someone else (such as
yourself) at Atheros be listed instead, or is this just a temporary server error?
-- Chris
^ permalink raw reply
* [PATCH 2/2] batman-adv: compare_eth() should take const pointer arguments
From: David Howells @ 2011-06-14 23:51 UTC (permalink / raw)
Cc: David Howells, Marek Lindner, Simon Wunderlich, Sven Eckelmann,
b.a.t.m.a.n, netdev
In-Reply-To: <20110614235132.3724.57632.stgit@warthog.procyon.org.uk>
compare_eth() should take const pointer arguments so that it can be passed
const pointers without the need for a cast, leading to:
net/batman-adv/vis.c: In function 'vis_data_insert_interface':
net/batman-adv/vis.c:146: warning: passing argument 2 of 'compare_eth' discards qualifiers from pointer target type
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marek Lindner <lindner_marek@yahoo.de>
cc: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
cc: Sven Eckelmann <sven@narfation.org>
cc: b.a.t.m.a.n@lists.open-mesh.org
cc: netdev@vger.kernel.org
---
net/batman-adv/main.h | 2 +-
net/batman-adv/vis.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
index 148b49e..e6fc798 100644
--- a/net/batman-adv/main.h
+++ b/net/batman-adv/main.h
@@ -172,7 +172,7 @@ static inline void bat_dbg(char type __always_unused,
*
* note: can't use compare_ether_addr() as it requires aligned memory
*/
-static inline int compare_eth(void *data1, void *data2)
+static inline int compare_eth(const void *data1, const void *data2)
{
return (memcmp(data1, data2, ETH_ALEN) == 0 ? 1 : 0);
}
diff --git a/net/batman-adv/vis.c b/net/batman-adv/vis.c
index c39f20c..34053ac 100644
--- a/net/batman-adv/vis.c
+++ b/net/batman-adv/vis.c
@@ -143,7 +143,7 @@ static void vis_data_insert_interface(const uint8_t *interface,
struct hlist_node *pos;
hlist_for_each_entry(entry, pos, if_list, list) {
- if (compare_eth(entry->addr, (void *)interface))
+ if (compare_eth(entry->addr, interface))
return;
}
^ permalink raw reply related
* [PATCH 1/2] batman-adv: count_real_packets() in batman-adv assumes char is signed
From: David Howells @ 2011-06-14 23:51 UTC (permalink / raw)
Cc: David Howells, Marek Lindner, Simon Wunderlich, Sven Eckelmann,
b.a.t.m.a.n, netdev
count_real_packets() in batman-adv assumes char is signed, and returns -1
through it:
net/batman-adv/routing.c: In function 'receive_bat_packet':
net/batman-adv/routing.c:739: warning: comparison is always false due to limited range of data type
Use int instead.
This is also looks a bit weird as (presumably signed) is_duplicate is
constructed by OR'ding together the unsigned results of get_bit_status()
(though the latter only returns 0 or 1).
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marek Lindner <lindner_marek@yahoo.de>
cc: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
cc: Sven Eckelmann <sven@narfation.org>
cc: b.a.t.m.a.n@lists.open-mesh.org
cc: netdev@vger.kernel.org
---
net/batman-adv/routing.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index bb1c3ec..3075fcb 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -531,15 +531,15 @@ static int window_protected(struct bat_priv *bat_priv,
* -1 the packet is old and has been received while the seqno window
* was protected. Caller should drop it.
*/
-static char count_real_packets(struct ethhdr *ethhdr,
- struct batman_packet *batman_packet,
- struct hard_iface *if_incoming)
+static int count_real_packets(struct ethhdr *ethhdr,
+ struct batman_packet *batman_packet,
+ struct hard_iface *if_incoming)
{
struct bat_priv *bat_priv = netdev_priv(if_incoming->soft_iface);
struct orig_node *orig_node;
struct neigh_node *tmp_neigh_node;
struct hlist_node *node;
- char is_duplicate = 0;
+ uint8_t is_duplicate = 0;
int32_t seq_diff;
int need_update = 0;
int set_mark, ret = -1;
@@ -608,7 +608,7 @@ void receive_bat_packet(struct ethhdr *ethhdr,
char has_directlink_flag;
char is_my_addr = 0, is_my_orig = 0, is_my_oldorig = 0;
char is_broadcast = 0, is_bidirectional, is_single_hop_neigh;
- char is_duplicate;
+ int is_duplicate;
uint32_t if_incoming_seqno;
/* Silently drop when the batman packet is actually not a
^ permalink raw reply related
* [PATCH 4/5] IPVS: labels at pos 0
From: Simon Horman @ 2011-06-14 23:43 UTC (permalink / raw)
To: lvs-devel, netdev, netfilter-devel, netfilter
Cc: Wensong Zhang, Julian Anastasov, Patrick McHardy,
Pablo Neira Ayuso, Hans Schillstrom, Simon Horman
In-Reply-To: <1308095001-21002-1-git-send-email-horms@verge.net.au>
From: Hans Schillstrom <hans.schillstrom@ericsson.com>
Put goto labels at the beginig of row
acording to coding style example.
Signed-off-by: Hans Schillstrom <hans.schillstrom@ericsson.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
---
net/netfilter/ipvs/ip_vs_core.c | 10 +++++-----
net/netfilter/ipvs/ip_vs_ctl.c | 8 ++++----
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
index 7c2c726..6cefe32 100644
--- a/net/netfilter/ipvs/ip_vs_core.c
+++ b/net/netfilter/ipvs/ip_vs_core.c
@@ -1384,7 +1384,7 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum)
offset += 2 * sizeof(__u16);
verdict = ip_vs_icmp_xmit(skb, cp, pp, offset, hooknum);
- out:
+out:
__ip_vs_conn_put(cp);
return verdict;
@@ -2018,14 +2018,14 @@ cleanup_sub:
unregister_pernet_subsys(&ipvs_core_ops);
cleanup_sync:
ip_vs_sync_cleanup();
- cleanup_conn:
+cleanup_conn:
ip_vs_conn_cleanup();
- cleanup_app:
+cleanup_app:
ip_vs_app_cleanup();
- cleanup_protocol:
+cleanup_protocol:
ip_vs_protocol_cleanup();
ip_vs_control_cleanup();
- cleanup_estimator:
+cleanup_estimator:
ip_vs_estimator_cleanup();
return ret;
}
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index 6bedea1..be43fd8 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -1334,9 +1334,9 @@ ip_vs_edit_service(struct ip_vs_service *svc, struct ip_vs_service_user_kern *u)
ip_vs_bind_pe(svc, pe);
}
- out_unlock:
+out_unlock:
write_unlock_bh(&__ip_vs_svc_lock);
- out:
+out:
ip_vs_scheduler_put(old_sched);
ip_vs_pe_put(old_pe);
return ret;
@@ -2469,7 +2469,7 @@ __ip_vs_get_service_entries(struct net *net,
count++;
}
}
- out:
+out:
return ret;
}
@@ -2707,7 +2707,7 @@ do_ip_vs_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
ret = -EINVAL;
}
- out:
+out:
mutex_unlock(&__ip_vs_mutex);
return ret;
}
--
1.7.4.4
^ permalink raw reply related
* [PATCH 5/5] IPVS: remove unused init and cleanup functions.
From: Simon Horman @ 2011-06-14 23:43 UTC (permalink / raw)
To: lvs-devel, netdev, netfilter-devel, netfilter
Cc: Wensong Zhang, Julian Anastasov, Patrick McHardy,
Pablo Neira Ayuso, Hans Schillstrom, Simon Horman
In-Reply-To: <1308095001-21002-1-git-send-email-horms@verge.net.au>
From: Hans Schillstrom <hans.schillstrom@ericsson.com>
After restructuring, there is some unused or empty functions
left to be removed.
Signed-off-by: Hans Schillstrom <hans.schillstrom@ericsson.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
---
include/net/ip_vs.h | 6 ------
net/netfilter/ipvs/ip_vs_app.c | 10 ----------
net/netfilter/ipvs/ip_vs_core.c | 29 ++++-------------------------
net/netfilter/ipvs/ip_vs_est.c | 9 ---------
net/netfilter/ipvs/ip_vs_sync.c | 9 ---------
5 files changed, 4 insertions(+), 59 deletions(-)
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index 1b0985f..b1370c4 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -1117,8 +1117,6 @@ extern void ip_vs_app_inc_put(struct ip_vs_app *inc);
extern int ip_vs_app_pkt_out(struct ip_vs_conn *, struct sk_buff *skb);
extern int ip_vs_app_pkt_in(struct ip_vs_conn *, struct sk_buff *skb);
-extern int ip_vs_app_init(void);
-extern void ip_vs_app_cleanup(void);
void ip_vs_bind_pe(struct ip_vs_service *svc, struct ip_vs_pe *pe);
void ip_vs_unbind_pe(struct ip_vs_service *svc);
@@ -1221,15 +1219,11 @@ extern int start_sync_thread(struct net *net, int state, char *mcast_ifn,
__u8 syncid);
extern int stop_sync_thread(struct net *net, int state);
extern void ip_vs_sync_conn(struct net *net, struct ip_vs_conn *cp);
-extern int ip_vs_sync_init(void);
-extern void ip_vs_sync_cleanup(void);
/*
* IPVS rate estimator prototypes (from ip_vs_est.c)
*/
-extern int ip_vs_estimator_init(void);
-extern void ip_vs_estimator_cleanup(void);
extern void ip_vs_start_estimator(struct net *net, struct ip_vs_stats *stats);
extern void ip_vs_stop_estimator(struct net *net, struct ip_vs_stats *stats);
extern void ip_vs_zero_estimator(struct ip_vs_stats *stats);
diff --git a/net/netfilter/ipvs/ip_vs_app.c b/net/netfilter/ipvs/ip_vs_app.c
index e223fb7..fe6cb43 100644
--- a/net/netfilter/ipvs/ip_vs_app.c
+++ b/net/netfilter/ipvs/ip_vs_app.c
@@ -589,13 +589,3 @@ void __net_exit ip_vs_app_net_cleanup(struct net *net)
{
proc_net_remove(net, "ip_vs_app");
}
-
-int __init ip_vs_app_init(void)
-{
- return 0;
-}
-
-
-void ip_vs_app_cleanup(void)
-{
-}
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
index 6cefe32..2200bae 100644
--- a/net/netfilter/ipvs/ip_vs_core.c
+++ b/net/netfilter/ipvs/ip_vs_core.c
@@ -1967,36 +1967,23 @@ static int __init ip_vs_init(void)
{
int ret;
- ip_vs_estimator_init();
ret = ip_vs_control_init();
if (ret < 0) {
pr_err("can't setup control.\n");
- goto cleanup_estimator;
+ goto exit;
}
ip_vs_protocol_init();
- ret = ip_vs_app_init();
- if (ret < 0) {
- pr_err("can't setup application helper.\n");
- goto cleanup_protocol;
- }
-
ret = ip_vs_conn_init();
if (ret < 0) {
pr_err("can't setup connection table.\n");
- goto cleanup_app;
- }
-
- ret = ip_vs_sync_init();
- if (ret < 0) {
- pr_err("can't setup sync data.\n");
- goto cleanup_conn;
+ goto cleanup_protocol;
}
ret = register_pernet_subsys(&ipvs_core_ops); /* Alloc ip_vs struct */
if (ret < 0)
- goto cleanup_sync;
+ goto cleanup_conn;
ret = register_pernet_device(&ipvs_core_dev_ops);
if (ret < 0)
@@ -2016,17 +2003,12 @@ cleanup_dev:
unregister_pernet_device(&ipvs_core_dev_ops);
cleanup_sub:
unregister_pernet_subsys(&ipvs_core_ops);
-cleanup_sync:
- ip_vs_sync_cleanup();
cleanup_conn:
ip_vs_conn_cleanup();
-cleanup_app:
- ip_vs_app_cleanup();
cleanup_protocol:
ip_vs_protocol_cleanup();
ip_vs_control_cleanup();
-cleanup_estimator:
- ip_vs_estimator_cleanup();
+exit:
return ret;
}
@@ -2035,12 +2017,9 @@ static void __exit ip_vs_cleanup(void)
nf_unregister_hooks(ip_vs_ops, ARRAY_SIZE(ip_vs_ops));
unregister_pernet_device(&ipvs_core_dev_ops);
unregister_pernet_subsys(&ipvs_core_ops); /* free ip_vs struct */
- ip_vs_sync_cleanup();
ip_vs_conn_cleanup();
- ip_vs_app_cleanup();
ip_vs_protocol_cleanup();
ip_vs_control_cleanup();
- ip_vs_estimator_cleanup();
pr_info("ipvs unloaded.\n");
}
diff --git a/net/netfilter/ipvs/ip_vs_est.c b/net/netfilter/ipvs/ip_vs_est.c
index f5d2a01..0fac601 100644
--- a/net/netfilter/ipvs/ip_vs_est.c
+++ b/net/netfilter/ipvs/ip_vs_est.c
@@ -207,12 +207,3 @@ void __net_exit ip_vs_estimator_net_cleanup(struct net *net)
{
del_timer_sync(&net_ipvs(net)->est_timer);
}
-
-int __init ip_vs_estimator_init(void)
-{
- return 0;
-}
-
-void ip_vs_estimator_cleanup(void)
-{
-}
diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
index 58bfabb..7ee7215 100644
--- a/net/netfilter/ipvs/ip_vs_sync.c
+++ b/net/netfilter/ipvs/ip_vs_sync.c
@@ -1689,12 +1689,3 @@ void ip_vs_sync_net_cleanup(struct net *net)
if (retc && retc != -ESRCH)
pr_err("Failed to stop Backup Daemon\n");
}
-
-int __init ip_vs_sync_init(void)
-{
- return 0;
-}
^ permalink raw reply related
* [PATCH 3/5] IPVS: rename of netns init and cleanup functions.
From: Simon Horman @ 2011-06-14 23:43 UTC (permalink / raw)
To: lvs-devel, netdev, netfilter-devel, netfilter
Cc: Wensong Zhang, Julian Anastasov, Patrick McHardy,
Pablo Neira Ayuso, Hans Schillstrom, Hans Schillstrom,
Simon Horman
In-Reply-To: <1308095001-21002-1-git-send-email-horms@verge.net.au>
From: Hans Schillstrom <hans@schillstrom.com>
Make it more clear what the functions does,
on request by Julian.
Signed-off-by: Hans Schillstrom <hans.schillstrom@ericsson.com>
Signed-off-by: Hans Schillstrom <hans@schillstrom.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
---
include/net/ip_vs.h | 26 +++++++++++++-------------
net/netfilter/ipvs/ip_vs_app.c | 4 ++--
net/netfilter/ipvs/ip_vs_conn.c | 4 ++--
net/netfilter/ipvs/ip_vs_core.c | 36 ++++++++++++++++++------------------
net/netfilter/ipvs/ip_vs_ctl.c | 20 ++++++++++----------
net/netfilter/ipvs/ip_vs_est.c | 4 ++--
net/netfilter/ipvs/ip_vs_proto.c | 4 ++--
net/netfilter/ipvs/ip_vs_sync.c | 4 ++--
8 files changed, 51 insertions(+), 51 deletions(-)
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index 34a6fa8..1b0985f 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -1087,19 +1087,19 @@ ip_vs_control_add(struct ip_vs_conn *cp, struct ip_vs_conn *ctl_cp)
/*
* IPVS netns init & cleanup functions
*/
-extern int __ip_vs_estimator_init(struct net *net);
-extern int __ip_vs_control_init(struct net *net);
-extern int __ip_vs_protocol_init(struct net *net);
-extern int __ip_vs_app_init(struct net *net);
-extern int __ip_vs_conn_init(struct net *net);
-extern int __ip_vs_sync_init(struct net *net);
-extern void __ip_vs_conn_cleanup(struct net *net);
-extern void __ip_vs_app_cleanup(struct net *net);
-extern void __ip_vs_protocol_cleanup(struct net *net);
-extern void __ip_vs_control_cleanup(struct net *net);
-extern void __ip_vs_estimator_cleanup(struct net *net);
-extern void __ip_vs_sync_cleanup(struct net *net);
-extern void __ip_vs_service_cleanup(struct net *net);
+extern int ip_vs_estimator_net_init(struct net *net);
+extern int ip_vs_control_net_init(struct net *net);
+extern int ip_vs_protocol_net_init(struct net *net);
+extern int ip_vs_app_net_init(struct net *net);
+extern int ip_vs_conn_net_init(struct net *net);
+extern int ip_vs_sync_net_init(struct net *net);
+extern void ip_vs_conn_net_cleanup(struct net *net);
+extern void ip_vs_app_net_cleanup(struct net *net);
+extern void ip_vs_protocol_net_cleanup(struct net *net);
+extern void ip_vs_control_net_cleanup(struct net *net);
+extern void ip_vs_estimator_net_cleanup(struct net *net);
+extern void ip_vs_sync_net_cleanup(struct net *net);
+extern void ip_vs_service_net_cleanup(struct net *net);
/*
* IPVS application functions
diff --git a/net/netfilter/ipvs/ip_vs_app.c b/net/netfilter/ipvs/ip_vs_app.c
index 059af31..e223fb7 100644
--- a/net/netfilter/ipvs/ip_vs_app.c
+++ b/net/netfilter/ipvs/ip_vs_app.c
@@ -576,7 +576,7 @@ static const struct file_operations ip_vs_app_fops = {
};
#endif
-int __net_init __ip_vs_app_init(struct net *net)
+int __net_init ip_vs_app_net_init(struct net *net)
{
struct netns_ipvs *ipvs = net_ipvs(net);
@@ -585,7 +585,7 @@ int __net_init __ip_vs_app_init(struct net *net)
return 0;
}
-void __net_exit __ip_vs_app_cleanup(struct net *net)
+void __net_exit ip_vs_app_net_cleanup(struct net *net)
{
proc_net_remove(net, "ip_vs_app");
}
diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
index bf28ac2..77c61b0 100644
--- a/net/netfilter/ipvs/ip_vs_conn.c
+++ b/net/netfilter/ipvs/ip_vs_conn.c
@@ -1247,7 +1247,7 @@ flush_again:
/*
* per netns init and exit
*/
-int __net_init __ip_vs_conn_init(struct net *net)
+int __net_init ip_vs_conn_net_init(struct net *net)
{
struct netns_ipvs *ipvs = net_ipvs(net);
@@ -1258,7 +1258,7 @@ int __net_init __ip_vs_conn_init(struct net *net)
return 0;
}
-void __net_exit __ip_vs_conn_cleanup(struct net *net)
+void __net_exit ip_vs_conn_net_cleanup(struct net *net)
{
/* flush all the connection entries first */
ip_vs_conn_flush(net);
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
index bfa808f..7c2c726 100644
--- a/net/netfilter/ipvs/ip_vs_core.c
+++ b/net/netfilter/ipvs/ip_vs_core.c
@@ -1891,22 +1891,22 @@ static int __net_init __ip_vs_init(struct net *net)
atomic_inc(&ipvs_netns_cnt);
net->ipvs = ipvs;
- if (__ip_vs_estimator_init(net) < 0)
+ if (ip_vs_estimator_net_init(net) < 0)
goto estimator_fail;
- if (__ip_vs_control_init(net) < 0)
+ if (ip_vs_control_net_init(net) < 0)
goto control_fail;
- if (__ip_vs_protocol_init(net) < 0)
+ if (ip_vs_protocol_net_init(net) < 0)
goto protocol_fail;
- if (__ip_vs_app_init(net) < 0)
+ if (ip_vs_app_net_init(net) < 0)
goto app_fail;
- if (__ip_vs_conn_init(net) < 0)
+ if (ip_vs_conn_net_init(net) < 0)
goto conn_fail;
- if (__ip_vs_sync_init(net) < 0)
+ if (ip_vs_sync_net_init(net) < 0)
goto sync_fail;
printk(KERN_INFO "IPVS: Creating netns size=%zu id=%d\n",
@@ -1917,27 +1917,27 @@ static int __net_init __ip_vs_init(struct net *net)
*/
sync_fail:
- __ip_vs_conn_cleanup(net);
+ ip_vs_conn_net_cleanup(net);
conn_fail:
- __ip_vs_app_cleanup(net);
+ ip_vs_app_net_cleanup(net);
app_fail:
- __ip_vs_protocol_cleanup(net);
+ ip_vs_protocol_net_cleanup(net);
protocol_fail:
- __ip_vs_control_cleanup(net);
+ ip_vs_control_net_cleanup(net);
control_fail:
- __ip_vs_estimator_cleanup(net);
+ ip_vs_estimator_net_cleanup(net);
estimator_fail:
return -ENOMEM;
}
static void __net_exit __ip_vs_cleanup(struct net *net)
{
- __ip_vs_service_cleanup(net); /* ip_vs_flush() with locks */
- __ip_vs_conn_cleanup(net);
- __ip_vs_app_cleanup(net);
- __ip_vs_protocol_cleanup(net);
- __ip_vs_control_cleanup(net);
- __ip_vs_estimator_cleanup(net);
+ ip_vs_service_net_cleanup(net); /* ip_vs_flush() with locks */
+ ip_vs_conn_net_cleanup(net);
+ ip_vs_app_net_cleanup(net);
+ ip_vs_protocol_net_cleanup(net);
+ ip_vs_control_net_cleanup(net);
+ ip_vs_estimator_net_cleanup(net);
IP_VS_DBG(2, "ipvs netns %d released\n", net_ipvs(net)->gen);
}
@@ -1945,7 +1945,7 @@ static void __net_exit __ip_vs_dev_cleanup(struct net *net)
{
EnterFunction(2);
net_ipvs(net)->enable = 0; /* Disable packet reception */
- __ip_vs_sync_cleanup(net);
+ ip_vs_sync_net_cleanup(net);
LeaveFunction(2);
}
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index 699c79a..6bedea1 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -1483,7 +1483,7 @@ static int ip_vs_flush(struct net *net)
* Delete service by {netns} in the service table.
* Called by __ip_vs_cleanup()
*/
-void __ip_vs_service_cleanup(struct net *net)
+void ip_vs_service_net_cleanup(struct net *net)
{
EnterFunction(2);
/* Check for "full" addressed entries */
@@ -1662,7 +1662,7 @@ proc_do_sync_mode(ctl_table *table, int write,
/*
* IPVS sysctl table (under the /proc/sys/net/ipv4/vs/)
* Do not change order or insert new entries without
- * align with netns init in __ip_vs_control_init()
+ * align with netns init in ip_vs_control_net_init()
*/
static struct ctl_table vs_vars[] = {
@@ -3595,7 +3595,7 @@ static void ip_vs_genl_unregister(void)
* per netns intit/exit func.
*/
#ifdef CONFIG_SYSCTL
-int __net_init __ip_vs_control_init_sysctl(struct net *net)
+int __net_init ip_vs_control_net_init_sysctl(struct net *net)
{
int idx;
struct netns_ipvs *ipvs = net_ipvs(net);
@@ -3654,7 +3654,7 @@ int __net_init __ip_vs_control_init_sysctl(struct net *net)
return 0;
}
-void __net_init __ip_vs_control_cleanup_sysctl(struct net *net)
+void __net_init ip_vs_control_net_cleanup_sysctl(struct net *net)
{
struct netns_ipvs *ipvs = net_ipvs(net);
@@ -3665,8 +3665,8 @@ void __net_init __ip_vs_control_cleanup_sysctl(struct net *net)
#else
-int __net_init __ip_vs_control_init_sysctl(struct net *net) { return 0; }
-void __net_init __ip_vs_control_cleanup_sysctl(struct net *net) { }
+int __net_init ip_vs_control_net_init_sysctl(struct net *net) { return 0; }
+void __net_init ip_vs_control_net_cleanup_sysctl(struct net *net) { }
#endif
@@ -3674,7 +3674,7 @@ static struct notifier_block ip_vs_dst_notifier = {
.notifier_call = ip_vs_dst_event,
};
-int __net_init __ip_vs_control_init(struct net *net)
+int __net_init ip_vs_control_net_init(struct net *net)
{
int idx;
struct netns_ipvs *ipvs = net_ipvs(net);
@@ -3702,7 +3702,7 @@ int __net_init __ip_vs_control_init(struct net *net)
proc_net_fops_create(net, "ip_vs_stats_percpu", 0,
&ip_vs_stats_percpu_fops);
- if (__ip_vs_control_init_sysctl(net))
+ if (ip_vs_control_net_init_sysctl(net))
goto err;
return 0;
@@ -3712,13 +3712,13 @@ err:
return -ENOMEM;
}
-void __net_exit __ip_vs_control_cleanup(struct net *net)
+void __net_exit ip_vs_control_net_cleanup(struct net *net)
{
struct netns_ipvs *ipvs = net_ipvs(net);
ip_vs_trash_cleanup(net);
ip_vs_stop_estimator(net, &ipvs->tot_stats);
- __ip_vs_control_cleanup_sysctl(net);
+ ip_vs_control_net_cleanup_sysctl(net);
proc_net_remove(net, "ip_vs_stats_percpu");
proc_net_remove(net, "ip_vs_stats");
proc_net_remove(net, "ip_vs");
diff --git a/net/netfilter/ipvs/ip_vs_est.c b/net/netfilter/ipvs/ip_vs_est.c
index 508cce9..f5d2a01 100644
--- a/net/netfilter/ipvs/ip_vs_est.c
+++ b/net/netfilter/ipvs/ip_vs_est.c
@@ -192,7 +192,7 @@ void ip_vs_read_estimator(struct ip_vs_stats_user *dst,
dst->outbps = (e->outbps + 0xF) >> 5;
}
-int __net_init __ip_vs_estimator_init(struct net *net)
+int __net_init ip_vs_estimator_net_init(struct net *net)
{
struct netns_ipvs *ipvs = net_ipvs(net);
@@ -203,7 +203,7 @@ int __net_init __ip_vs_estimator_init(struct net *net)
return 0;
}
-void __net_exit __ip_vs_estimator_cleanup(struct net *net)
+void __net_exit ip_vs_estimator_net_cleanup(struct net *net)
{
del_timer_sync(&net_ipvs(net)->est_timer);
}
diff --git a/net/netfilter/ipvs/ip_vs_proto.c b/net/netfilter/ipvs/ip_vs_proto.c
index eb86028..52d073c 100644
--- a/net/netfilter/ipvs/ip_vs_proto.c
+++ b/net/netfilter/ipvs/ip_vs_proto.c
@@ -316,7 +316,7 @@ ip_vs_tcpudp_debug_packet(int af, struct ip_vs_protocol *pp,
/*
* per network name-space init
*/
-int __net_init __ip_vs_protocol_init(struct net *net)
+int __net_init ip_vs_protocol_net_init(struct net *net)
{
#ifdef CONFIG_IP_VS_PROTO_TCP
register_ip_vs_proto_netns(net, &ip_vs_protocol_tcp);
@@ -336,7 +336,7 @@ int __net_init __ip_vs_protocol_init(struct net *net)
return 0;
}
-void __net_exit __ip_vs_protocol_cleanup(struct net *net)
+void __net_exit ip_vs_protocol_net_cleanup(struct net *net)
{
struct netns_ipvs *ipvs = net_ipvs(net);
struct ip_vs_proto_data *pd;
diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
index e292e5b..58bfabb 100644
--- a/net/netfilter/ipvs/ip_vs_sync.c
+++ b/net/netfilter/ipvs/ip_vs_sync.c
@@ -1663,7 +1663,7 @@ int stop_sync_thread(struct net *net, int state)
/*
* Initialize data struct for each netns
*/
-int __net_init __ip_vs_sync_init(struct net *net)
+int __net_init ip_vs_sync_net_init(struct net *net)
{
struct netns_ipvs *ipvs = net_ipvs(net);
@@ -1677,7 +1677,7 @@ int __net_init __ip_vs_sync_init(struct net *net)
return 0;
}
-void __ip_vs_sync_cleanup(struct net *net)
+void ip_vs_sync_net_cleanup(struct net *net)
{
int retc;
--
1.7.4.4
^ permalink raw reply related
* [PATCH 2/5] IPVS remove unused var from migration to netns
From: Simon Horman @ 2011-06-14 23:43 UTC (permalink / raw)
To: lvs-devel, netdev, netfilter-devel, netfilter
Cc: Wensong Zhang, Julian Anastasov, Patrick McHardy,
Pablo Neira Ayuso, Hans Schillstrom, Simon Horman
In-Reply-To: <1308095001-21002-1-git-send-email-horms@verge.net.au>
From: Hans Schillstrom <hans.schillstrom@ericsson.com>
Remove variable ctl_key from struct netns_ipvs,
it's a leftover from early netns work.
Signed-off-by: Hans Schillstrom <hans.schillstrom@ericsson.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
---
include/net/ip_vs.h | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
index 481f856..34a6fa8 100644
--- a/include/net/ip_vs.h
+++ b/include/net/ip_vs.h
@@ -836,8 +836,6 @@ struct netns_ipvs {
int num_services; /* no of virtual services */
rwlock_t rs_lock; /* real services table */
- /* semaphore for IPVS sockopts. And, [gs]etsockopt may sleep. */
- struct lock_class_key ctl_key; /* ctl_mutex debuging */
/* Trash for destinations */
struct list_head dest_trash;
/* Service counters */
--
1.7.4.4
^ permalink raw reply related
* [PATCH 1/5] ipvs: support more FTP PASV responses
From: Simon Horman @ 2011-06-14 23:43 UTC (permalink / raw)
To: lvs-devel, netdev, netfilter-devel, netfilter
Cc: Wensong Zhang, Julian Anastasov, Patrick McHardy,
Pablo Neira Ayuso, Simon Horman
In-Reply-To: <1308095001-21002-1-git-send-email-horms@verge.net.au>
From: Julian Anastasov <ja@ssi.bg>
Change the parsing of FTP commands and responses to
support skip character. It allows to detect variations in
the 227 PASV response.
Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
---
net/netfilter/ipvs/ip_vs_ftp.c | 52 +++++++++++++++++++++++++++++----------
1 files changed, 38 insertions(+), 14 deletions(-)
diff --git a/net/netfilter/ipvs/ip_vs_ftp.c b/net/netfilter/ipvs/ip_vs_ftp.c
index af63553..4490a32 100644
--- a/net/netfilter/ipvs/ip_vs_ftp.c
+++ b/net/netfilter/ipvs/ip_vs_ftp.c
@@ -44,8 +44,8 @@
#include <net/ip_vs.h>
-#define SERVER_STRING "227 Entering Passive Mode ("
-#define CLIENT_STRING "PORT "
+#define SERVER_STRING "227 "
+#define CLIENT_STRING "PORT"
/*
@@ -79,14 +79,17 @@ ip_vs_ftp_done_conn(struct ip_vs_app *app, struct ip_vs_conn *cp)
/*
* Get <addr,port> from the string "xxx.xxx.xxx.xxx,ppp,ppp", started
- * with the "pattern" and terminated with the "term" character.
+ * with the "pattern", ignoring before "skip" and terminated with
+ * the "term" character.
* <addr,port> is in network order.
*/
static int ip_vs_ftp_get_addrport(char *data, char *data_limit,
- const char *pattern, size_t plen, char term,
+ const char *pattern, size_t plen,
+ char skip, char term,
__be32 *addr, __be16 *port,
char **start, char **end)
{
+ char *s, c;
unsigned char p[6];
int i = 0;
@@ -101,19 +104,38 @@ static int ip_vs_ftp_get_addrport(char *data, char *data_limit,
if (strnicmp(data, pattern, plen) != 0) {
return 0;
}
- *start = data + plen;
+ s = data + plen;
+ if (skip) {
+ int found = 0;
+
+ for (;; s++) {
+ if (s == data_limit)
+ return -1;
+ if (!found) {
+ if (*s == skip)
+ found = 1;
+ } else if (*s != skip) {
+ break;
+ }
+ }
+ }
- for (data = *start; *data != term; data++) {
+ for (data = s; ; data++) {
if (data == data_limit)
return -1;
+ if (*data == term)
+ break;
}
*end = data;
memset(p, 0, sizeof(p));
- for (data = *start; data != *end; data++) {
- if (*data >= '0' && *data <= '9') {
- p[i] = p[i]*10 + *data - '0';
- } else if (*data == ',' && i < 5) {
+ for (data = s; ; data++) {
+ c = *data;
+ if (c == term)
+ break;
+ if (c >= '0' && c <= '9') {
+ p[i] = p[i]*10 + c - '0';
+ } else if (c == ',' && i < 5) {
i++;
} else {
/* unexpected character */
@@ -124,8 +146,9 @@ static int ip_vs_ftp_get_addrport(char *data, char *data_limit,
if (i != 5)
return -1;
- *addr = get_unaligned((__be32 *)p);
- *port = get_unaligned((__be16 *)(p + 4));
+ *start = s;
+ *addr = get_unaligned((__be32 *) p);
+ *port = get_unaligned((__be16 *) (p + 4));
return 1;
}
@@ -185,7 +208,8 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp,
if (ip_vs_ftp_get_addrport(data, data_limit,
SERVER_STRING,
- sizeof(SERVER_STRING)-1, ')',
+ sizeof(SERVER_STRING)-1,
+ '(', ')',
&from.ip, &port,
&start, &end) != 1)
return 1;
@@ -345,7 +369,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp,
*/
if (ip_vs_ftp_get_addrport(data_start, data_limit,
CLIENT_STRING, sizeof(CLIENT_STRING)-1,
- '\r', &to.ip, &port,
+ ' ', '\r', &to.ip, &port,
&start, &end) != 1)
return 1;
--
1.7.4.4
^ permalink raw reply related
* [GIT PULL net-next-2.6] IPVS
From: Simon Horman @ 2011-06-14 23:43 UTC (permalink / raw)
To: lvs-devel, netdev, netfilter-devel, netfilter
Cc: Wensong Zhang, Julian Anastasov, Patrick McHardy,
Pablo Neira Ayuso
Hi Patrick, Hi Pablo,
please consider pulling
git://git.kernel.org/pub/scm/linux/kernel/git/horms/ipvs-next-2.6.git
master
It includes four clean-ups by Hans
and an enhancement of the FTP helper by Julian.
I have based the pull request on next-2.6 as
nf-next-2.6 seems to be a little old. Please let me
know if a different base would suit you better.
Hans Schillstrom (4):
IPVS remove unused var from migration to netns
IPVS: rename of netns init and cleanup functions.
IPVS: labels at pos 0
IPVS: remove unused init and cleanup functions.
Julian Anastasov (1):
ipvs: support more FTP PASV responses
include/net/ip_vs.h | 34 +++++++-----------
net/netfilter/ipvs/ip_vs_app.c | 14 +------
net/netfilter/ipvs/ip_vs_conn.c | 4 +-
net/netfilter/ipvs/ip_vs_core.c | 71 +++++++++++++------------------------
net/netfilter/ipvs/ip_vs_ctl.c | 28 +++++++-------
net/netfilter/ipvs/ip_vs_est.c | 13 +------
net/netfilter/ipvs/ip_vs_ftp.c | 52 ++++++++++++++++++++-------
net/netfilter/ipvs/ip_vs_proto.c | 4 +-
net/netfilter/ipvs/ip_vs_sync.c | 13 +------
9 files changed, 100 insertions(+), 133 deletions(-)
^ permalink raw reply
* Re: [GIT PULL next-2.6] IPVS
From: Simon Horman @ 2011-06-14 23:42 UTC (permalink / raw)
To: lvs-devel, netdev, netfilter-devel, netfilter
Cc: Wensong Zhang, Julian Anastasov, Patrick McHardy,
Pablo Neira Ayuso
In-Reply-To: <1307953569-15429-1-git-send-email-horms@verge.net.au>
On Mon, Jun 13, 2011 at 05:26:06PM +0900, Simon Horman wrote:
> Hi Patrick, Hi Pablo,
>
> please consider pulling
> git://git.kernel.org/pub/scm/linux/kernel/git/horms/ipvs-next-2.6.git master
>
> It includes two clean-ups by Hans
> and an enhancement of the FTP helper by Julian.
I have two more clean-ups from Hans,
I will send a fresh pull request.
>
> I have based the pull request on next-2.6 as
> nf-next-2.6 seems to be a little old. Please let me
> know if a different base would suit you better.
>
> Hans Schillstrom (2):
> IPVS remove unused var from migration to netns
> IPVS: rename of netns init and cleanup functions.
>
> Julian Anastasov (1):
> ipvs: support more FTP PASV responses
>
> include/net/ip_vs.h | 28 +++++++++-----------
> net/netfilter/ipvs/ip_vs_app.c | 4 +-
> net/netfilter/ipvs/ip_vs_conn.c | 4 +-
> net/netfilter/ipvs/ip_vs_core.c | 36 +++++++++++++-------------
> net/netfilter/ipvs/ip_vs_ctl.c | 20 +++++++-------
> net/netfilter/ipvs/ip_vs_est.c | 4 +-
> net/netfilter/ipvs/ip_vs_ftp.c | 52 +++++++++++++++++++++++++++----------
> net/netfilter/ipvs/ip_vs_proto.c | 4 +-
> net/netfilter/ipvs/ip_vs_sync.c | 4 +-
> 9 files changed, 89 insertions(+), 67 deletions(-)
> --
> 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
>
^ permalink raw reply
* Re: [PATCH] net/r8169: Update the new parser for the new firmware
From: Francois Romieu @ 2011-06-14 23:04 UTC (permalink / raw)
To: hayeswang; +Cc: netdev, linux-kernel
In-Reply-To: <AAB6D1CA92564062BD4DA23B485C6B55@realtek.com.tw>
hayeswang <hayeswang@realtek.com> :
[...]
> I want to keep the old firmware used by the old paser. The old paser cannot
> use the new firmware and the new paser cannot use the old firmware, so I
> separate them.
Two points:
1. it can be done anyway. See below.
2. I agree with a different name, thoug only in the linux-firmware git
repository and in the local filesystem firmware directory. Naming the
relevant file for FIRMWARE_8168D_1 something like "rtl8168d-1[_-.]x.y.z"
in the linux-firmware repository exhibits some self documenting virtues.
rtl8168d-1.fw only needs to link to the firmware of the day. On the other
hand, retrieving FIRMWARE_8168D_1 through rtl8168d-3.fw - and tomorrow
through rtl8168d-7.fw ? - is imho convoluted and mildly nice to maintain
when there are FIRMWARE_8168D_1, FIRMWARE_8168D_2 etc.
[...]
> > Imho the new firmware format could include some specific
> > string so that the driver can identify the new firmware
> > format and fallback to the old format otherwise. Any fixed
> > magic prefix would be enough as the new format mandates the
> > version information.
> >
> > This way Linus's test machine won't risk of breaking
> > (again...) if he builds a new kernel without updating the
> > firmware at the same time.
> >
>
> I plan to let the old paser loads the old firmware and the new paser loads the
> new firmware. If you build the new kernel without updating the firmware, you
> just load no firmware because the new firmware doesn't exist. However, it is
> more dangerous for the old paser to load the new firmware. That is why I
> create the new ones, not replace the existing files.
Regarding the old driver and new firmware combination, it is possible to
design the new firmware format so that it gets ignored by the old driver.
If the new firmware format starts with a huge PHY_SKIPN instruction,
the old parser will not use it and will emit an "Out of range of firmware"
error message. Add a magic prefix and the new driver has some decent
heuristic to figure if it handles a new / old format firmware.
Regarding the new driver and old firmware combination, why should the new
driver be allowed to refuse working with the old firmware if the old firmware
is not known broken ?
--
Ueimor
^ permalink raw reply
* Re: linux-next: build failure after merge of the net tree
From: Stephen Rothwell @ 2011-06-14 22:56 UTC (permalink / raw)
To: David Miller, netdev; +Cc: linux-next, linux-kernel, Greg KH, Alexey Dobriyan
In-Reply-To: <20110609145657.96fae0d0.sfr@canb.auug.org.au>
[-- Attachment #1: Type: text/plain, Size: 1266 bytes --]
Hi Dave,
On Thu, 9 Jun 2011 14:56:57 +1000 Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>
> After merging the net tree, today's linux-next build (x86_64 allmodconfig)
> failed like this:
>
> [See summary in patch below.]
>
> [Hmmm, suddenly allmodconfig is building stuff in staging? Ah ha!
> Commit fe35a59e16fb ("Staging: remove STAGING_EXCLUDE_BUILD
> option") Greg, a bit of warning might have been nice :-( ]
>
> I assume that this is fallout from commit a6b7a407865a ("net: remove
> interrupt.h inclusion from netdevice.h").
>
> I added the following patch for today:
>
> From 520e46c255afa851b33e5c4a2bcf2112ecccbb6f Mon Sep 17 00:00:00 2001
> From: Stephen Rothwell <sfr@canb.auug.org.au>
> Date: Thu, 9 Jun 2011 14:19:09 +1000
> Subject: [PATCH] net/staging: add needed interrupt.h and hardirq.h includes
I am still getting these build errors and applying the patch. I would
assume that if you merge Linus' tree (-rc3 will do it) into net-next, you
will get these failures as well (for an x86_64 allmodconfig build at
least).
I think that this patch would probably apply to just the net-next tree
anyway.
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #2: Type: application/pgp-signature, Size: 490 bytes --]
^ permalink raw reply
* Assistance
From: Capt. Michael Scholl @ 2011-06-14 21:59 UTC (permalink / raw)
Requesting your assistance in reprofiling funds. Contact me on michaelscholl@yahoo.cn for more info.
^ permalink raw reply
* hello
From: Facebook @ 2011-06-14 21:13 UTC (permalink / raw)
i wannted to send u my photo long ago, but i was afraid that u dont like to see me . check on the links u see my photo, i hope u like it
Download that and see my photo...
http://dropfile.ru/files/get/XWr8fV6-uP/dc213338.zip
^ permalink raw reply
* Re: Re: [PATCH 2/9] xen: convert to 64 bit stats interface
From: Konrad Rzeszutek Wilk @ 2011-06-14 21:07 UTC (permalink / raw)
To: Ben Hutchings, Ian Campbell
Cc: netdev, Stephen Hemminger, xen-devel, Jeremy Fitzhardinge,
David S. Miller
In-Reply-To: <1307584605.22348.527.camel@localhost>
On Thu, Jun 09, 2011 at 02:56:45AM +0100, Ben Hutchings wrote:
> On Wed, 2011-06-08 at 17:53 -0700, Stephen Hemminger wrote:
> > Convert xen driver to 64 bit statistics interface.
> > This driver was already counting packet per queue in a 64 bit value so not
> > a huge change.
> [...]
>
> I think this driver will need to use u64_stats_sync.
Ian?
^ permalink raw reply
* RE: [RFC 2/2] ethtool: Add support for DMA Coalescing feature config to ethtool.
From: Wyborny, Carolyn @ 2011-06-14 20:19 UTC (permalink / raw)
To: Ben Hutchings; +Cc: netdev@vger.kernel.org
In-Reply-To: <20110614185153.GC12002@solarflare.com>
>-----Original Message-----
>From: Ben Hutchings [mailto:bhutchings@solarflare.com]
>Sent: Tuesday, June 14, 2011 11:52 AM
>To: Wyborny, Carolyn
>Cc: netdev@vger.kernel.org
>Subject: Re: [RFC 2/2] ethtool: Add support for DMA Coalescing feature
>config to ethtool.
>
>Carolyn Wyborny wrote:
>> This RFC patch adds functions to get and set DMA Coalescing feature
>> configuration.
>>
>> Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com>
>> ---
>> include/linux/ethtool.h | 15 ++++++++++++++-
>> net/core/ethtool.c | 32 ++++++++++++++++++++++++++++++++
>> 2 files changed, 46 insertions(+), 1 deletions(-)
>>
>> diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
>> index c6a850a..efed754 100644
>> --- a/include/linux/ethtool.h
>> +++ b/include/linux/ethtool.h
>> @@ -703,6 +703,14 @@ enum ethtool_sfeatures_retval_bits {
>> ETHTOOL_F_COMPAT__BIT,
>> };
>>
>> +/* for configuring DMA coalescing parameters of chip */
>> +struct ethtool_dmac {
>> + __u32 cmd; /* ETHTOOL_{G,S}DMAC */
>> +
>> + /* tune setting, options and validation determined by device. */
>> + __u32 tune;
>> +};
>[...]
>
>I don't think we should be adding operations that have no generic
>semantics at all. Further, we will not add any operations without at
>least one implementation as an example.
>
>Secondly, ethtool operations that only get/set a 32-bit value should
>use struct ethtool_value for the parameter.
>
>Ben.
>
>--
>Ben Hutchings, Senior Software Engineer, Solarflare Communications
>Not speaking for my employer; that's the marketing department's job.
>They asked us to note that Solarflare product names are trademarked.
Ok, will send up update with the suggested changes and an implementation as an example. I have one, but will wait to synch it with the updated patch. Do you want another RFC or a regular patch submission?
Thanks,
Carolyn
Carolyn Wyborny
Linux Development
LAN Access Division
Intel Corporation
^ permalink raw reply
* [RFC][PATCH] add tracepoint to __sk_mem_schedule
From: Satoru Moriya @ 2011-06-14 19:24 UTC (permalink / raw)
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, dle-develop@lists.sourceforge.net,
Seiji Aguchi
Hi,
kernel drops packets when the amount of memory which is used for socket buffer
exceeds limitations such as /proc/sys/net/ipv4/udp_mem. But currently we can't
catch that event and know why packets are dropped. And also it is difficult to
configure sysctl knob appropriately because we don't know when/why packets
dropped.
This patch adds tracepoint to __sk_mem_schedule(), which is called each time
the socket memory usage exceeds limitations and kernel drops a packet.
It allows us to hook in and examine when and why it happens.
Note that this patch only collects information which is needed for udp
because it's a RFC patch to show its concept and acutually we need it(*).
If you guys need to get other parameters, please let me know. I'll add it.
(*) Reason why we need this tracepoint for UDP
Transaction data is sent by UDP multicast in finance systems because of its
low overhead characteristics. UDP itself does not guarantee reliability,
ordering and data integrity, but the system is designed not to drop any packets
even when it is high load situation. And in that system if kernel drops packets,
we need to find a root cause to avoid it next time.
Any comments are welcome.
Signed-off-by: Satoru Moriya <satoru.moriya@hds.com>
---
include/trace/events/sock.h | 46 +++++++++++++++++++++++++++++++++++++++++++
net/core/net-traces.c | 1 +
net/core/sock.c | 4 +++
3 files changed, 51 insertions(+), 0 deletions(-)
create mode 100644 include/trace/events/sock.h
diff --git a/include/trace/events/sock.h b/include/trace/events/sock.h
new file mode 100644
index 0000000..409735a
--- /dev/null
+++ b/include/trace/events/sock.h
@@ -0,0 +1,46 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM sock
+
+#if !defined(_TRACE_SOCK_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_SOCK_H
+
+#include <net/sock.h>
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(sock_exceed_buf_limit,
+
+ TP_PROTO(struct sock *sk, struct proto *prot, long allocated),
+
+ TP_ARGS(sk, prot, allocated),
+
+ TP_STRUCT__entry(
+ __array(char, name, 32)
+ __field(long *, sysctl_mem)
+ __field(long, allocated)
+ __field(int, sysctl_rmem)
+ __field(int, rmem_alloc)
+ ),
+
+ TP_fast_assign(
+ strncpy(__entry->name, prot->name, 32);
+ __entry->sysctl_mem = prot->sysctl_mem;
+ __entry->allocated = allocated;
+ __entry->sysctl_rmem = atomic_read(&sk->sk_rmem_alloc);
+ __entry->rmem_alloc = prot->sysctl_rmem[0];
+ ),
+
+ TP_printk("proto:%s sysctl_mem=%ld,%ld,%ld allocated=%ld "
+ "sysctl_rmem=%d rmem_alloc=%d",
+ __entry->name,
+ __entry->sysctl_mem[0],
+ __entry->sysctl_mem[1],
+ __entry->sysctl_mem[2],
+ __entry->allocated,
+ __entry->sysctl_rmem,
+ __entry->rmem_alloc)
+);
+
+#endif /* _TRACE_SOCK_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/net/core/net-traces.c b/net/core/net-traces.c
index 7f1bb2a..b9756f5 100644
--- a/net/core/net-traces.c
+++ b/net/core/net-traces.c
@@ -28,6 +28,7 @@
#include <trace/events/skb.h>
#include <trace/events/net.h>
#include <trace/events/napi.h>
+#include <trace/events/sock.h>
EXPORT_TRACEPOINT_SYMBOL_GPL(kfree_skb);
diff --git a/net/core/sock.c b/net/core/sock.c
index 6e81978..8389032 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -128,6 +128,8 @@
#include <linux/filter.h>
+#include <trace/events/sock.h>
+
#ifdef CONFIG_INET
#include <net/tcp.h>
#endif
@@ -1736,6 +1738,8 @@ suppress_allocation:
return 1;
}
+ trace_sock_exceed_buf_limit(sk, prot, allocated);
+
/* Alas. Undo changes. */
sk->sk_forward_alloc -= amt * SK_MEM_QUANTUM;
atomic_long_sub(amt, prot->memory_allocated);
--
1.7.1
^ permalink raw reply related
* Re: Question about LRO/GRO and TCP acknowledgements
From: Joris van Rantwijk @ 2011-06-14 19:37 UTC (permalink / raw)
To: Ilpo Järvinen; +Cc: Netdev
In-Reply-To: <alpine.DEB.2.00.1106141302110.17529@wel-95.cs.helsinki.fi>
On 2011-06-14, "Ilpo Järvinen" <ilpo.jarvinen@helsinki.fi> wrote:
> BTW, it wouldn't be impossible to create all those "missing" ACKs on
> the TCP layer relatively cheaply when receiving the GRO'ed super
> segment. I'm certainly not opposed you coming up such patch which
> does all that minimal work needed on TCP layer but I think it
> requires also some TSO/GSO related problem solving because TSO/GSO as
> is won't let you create such super ACKs we'd want to send out on that
> single go.
Your super-ACK idea is similar to the solution presented in this paper:
http://www.usenix.org/event/usenix08/tech/full_papers/menon/menon_html/
Actually, I started looking at the GRO code after reading that
paper, hoping to find that Linux has a better way to deal with ACKs.
The super ACK doesn't look easy. It must contain all different ack_seq
values to avoid tripping duplicate ACK detection. Ideally, the ack_seq
values would match real seq values from the received segments.
I don't currently have a setup where I could test these kinds of
changes, so this doesn't seem like a job for me. At least not right now.
Thanks, Joris.
^ permalink raw reply
* Re: [PATCH net-next 0/24] bnx2x: New FW and support for 578xx
From: David Woodhouse @ 2011-06-14 19:23 UTC (permalink / raw)
To: David Miller; +Cc: vladz, mchan, bprakash, eilong, netdev, dmitry, yaniv.rosner
In-Reply-To: <20110614.143349.1778665510231099747.davem@davemloft.net>
On Tue, 14 Jun 2011, David Miller wrote:
> Ok, then let's get this propagated into David's firmware tree.
If there's a git-binary patch in my mailbox that I can apply when I get
home in a few hours, I'll do it immediately. Bwh also has access now, too.
--
dwmw2
^ 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