TCP resets connection after 3rd ACK with win=0

2008-02-19 Thread Gergely Magyarosi


I have noticed a strange behavior with heavy traffic.
Linux TCP stack resets connection, after exchanging 3 ACKs with zero 
advertised window size.

That is:

1.  ACK, win=0,len=0 received from peer
   ACK, win=0, len=0 sent to peer

2. same as 1.

3. ACK, win=0,len=0 received from peer
   RST, ACK, win 0, len=0 sent to peer

The sequence numbers remain the same, because neither side can send.
3rd ACK received frequently triggers a RST. (It shouldn't IMHO, 
according to RFC.)


Is this a feature for conserving resources, or a bug?

the kernel version: 2.6.5

Thanks.
Best Regards, Gergely Magyarosi.
-
To unsubscribe from this list: send the line unsubscribe linux-net in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: TCP resets connection after 3rd ACK with win=0

2008-02-19 Thread Varun Chandramohan
Gergely Magyarosi wrote:

 I have noticed a strange behavior with heavy traffic.
 Linux TCP stack resets connection, after exchanging 3 ACKs with zero
 advertised window size.
 That is:

 1.  ACK, win=0,len=0 received from peer
ACK, win=0, len=0 sent to peer

 2. same as 1.

 3. ACK, win=0,len=0 received from peer
RST, ACK, win 0, len=0 sent to peer

 The sequence numbers remain the same, because neither side can send.
 3rd ACK received frequently triggers a RST. (It shouldn't IMHO,
 according to RFC.)

 Is this a feature for conserving resources, or a bug?

 the kernel version: 2.6.5

Does the same happen with newer kernels? 2.6.24?

Regards,
Varun
 Thanks.
 Best Regards, Gergely Magyarosi.
 -
 To unsubscribe from this list: send the line unsubscribe linux-net in
 the body of a message to [EMAIL PROTECTED]
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

-
To unsubscribe from this list: send the line unsubscribe linux-net in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [ANNOUNCE] ESFQ -- SFQ patches for Linux 2.6.24

2008-02-19 Thread Patrick McHardy

David Miller wrote:

From: Brock Noland [EMAIL PROTECTED]
Date: Sat, 9 Feb 2008 20:30:58 -0600


Is this going to be merged anytime soon?


If it gets submitted to the proper mailing list, it might.
'linux-net' is for user questions, it is not where the networking
developers hang out, 'netdev' is.

And you have to post patches for review, not URL's point to
the patches.  It has to be int he email, in an applyable form
so people can review the thing properly.



Since SFQ is not exactly simple and I needed something like this
myself, I followed Paul's suggestion and added a new scheduler
(DRR) for this with more flexible limits.

I'll rediff against net-2.6.26 within the next days and send
a final version for review (anyone interested is welcome to
already review this version of course :).

commit 13d0cc64d0f7fed945c357cf4ca43330c8f95ad2
Author: Patrick McHardy [EMAIL PROTECTED]
Date:   Mon Feb 18 22:21:55 2008 +0100

[NET_SCHED]: Add DRR scheduler

Signed-off-by: Patrick McHardy [EMAIL PROTECTED]

diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h
index dbb7ac3..2fca9c4 100644
--- a/include/linux/pkt_sched.h
+++ b/include/linux/pkt_sched.h
@@ -482,4 +482,20 @@ struct tc_netem_corrupt
 
 #define NETEM_DIST_SCALE   8192
 
+/* DRR */
+
+enum
+{
+   TCA_DRR_UNSPEC,
+   TCA_DRR_QUANTUM,
+   __TCA_DRR_MAX
+};
+
+#define TCA_DRR_MAX(__TCA_DRR_MAX - 1)
+
+struct tc_drr_stats
+{
+   s32 deficit;
+};
+
 #endif
diff --git a/net/sched/Kconfig b/net/sched/Kconfig
index 82adfe6..7e1ab99 100644
--- a/net/sched/Kconfig
+++ b/net/sched/Kconfig
@@ -196,6 +196,9 @@ config NET_SCH_NETEM
 
  If unsure, say N.
 
+config NET_SCH_DRR
+   tristate DRR scheduler
+
 config NET_SCH_INGRESS
tristate Ingress Qdisc
depends on NET_CLS_ACT
diff --git a/net/sched/Makefile b/net/sched/Makefile
index 1d2b0f7..b055f74 100644
--- a/net/sched/Makefile
+++ b/net/sched/Makefile
@@ -28,6 +28,7 @@ obj-$(CONFIG_NET_SCH_TEQL)+= sch_teql.o
 obj-$(CONFIG_NET_SCH_PRIO) += sch_prio.o
 obj-$(CONFIG_NET_SCH_ATM)  += sch_atm.o
 obj-$(CONFIG_NET_SCH_NETEM)+= sch_netem.o
+obj-$(CONFIG_NET_SCH_DRR)  += sch_drr.o
 obj-$(CONFIG_NET_CLS_U32)  += cls_u32.o
 obj-$(CONFIG_NET_CLS_ROUTE4)   += cls_route.o
 obj-$(CONFIG_NET_CLS_FW)   += cls_fw.o
diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c
new file mode 100644
index 000..aa241b5
--- /dev/null
+++ b/net/sched/sch_drr.c
@@ -0,0 +1,534 @@
+/*
+ * net/sched/sch_drr.c Deficit Round Robin scheduler
+ *
+ * Copyright (c) 2008 Patrick McHardy [EMAIL PROTECTED]
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ */
+
+#include linux/module.h
+#include linux/init.h
+#include linux/errno.h
+#include linux/netdevice.h
+#include linux/pkt_sched.h
+#include net/sch_generic.h
+#include net/pkt_sched.h
+#include net/pkt_cls.h
+
+struct drr_class {
+   struct hlist_node   hlist;
+   u32 classid;
+   unsigned intrefcnt;
+
+   struct gnet_stats_basic bstats;
+   struct gnet_stats_queue qstats;
+   struct gnet_stats_rate_est  rate_est;
+   struct list_headalist;
+   struct Qdisc *  qdisc;
+
+   u32 quantum;
+   s32 deficit;
+};
+
+#define DRR_HSIZE  16
+
+struct drr_sched {
+   struct list_headactive;
+   struct tcf_proto *  filter_list;
+   unsigned intfilter_cnt;
+   struct hlist_head   clhash[DRR_HSIZE];
+   struct sk_buff *requeue;
+};
+
+static unsigned int drr_hash(u32 h)
+{
+   h ^= h  8;
+   h ^= h  4;
+
+   return h  (DRR_HSIZE - 1);
+}
+
+static struct drr_class *drr_find_class(struct Qdisc *sch, u32 classid)
+{
+   struct drr_sched *q = qdisc_priv(sch);
+   struct drr_class *cl;
+   struct hlist_node *n;
+
+   hlist_for_each_entry(cl, n, q-clhash[drr_hash(classid)], hlist) {
+   if (cl-classid == classid)
+   return cl;
+   }
+   return NULL;
+}
+
+static void drr_purge_queue(struct drr_class *cl)
+{
+   unsigned int len = cl-qdisc-q.qlen;
+
+   qdisc_reset(cl-qdisc);
+   qdisc_tree_decrease_qlen(cl-qdisc, len);
+}
+
+static const struct nla_policy drr_policy[TCA_DRR_MAX + 1] = {
+   [TCA_DRR_QUANTUM]   = { .type = NLA_U32 },
+};
+
+static int drr_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
+   struct nlattr **tca, unsigned long *arg)
+{
+   struct drr_sched *q = qdisc_priv(sch);
+   struct drr_class *cl = (struct drr_class *)*arg;
+   struct nlattr 

ssh tunnel

2008-02-19 Thread Bobby
Hi,

I'm trying to get a ssh tunnel going over ssh and am having issues between 
Slack12 and Ubuntu 7.10.

I tried ssg -w 0:0 remote external ip

But no tun i/f is showing up on Slack, Ubuntu already has a tun1. Slack kernel 
has tunnel in the kernel.

It makes the ssh connection but no tun's show up. Slack has a /dev/net/tun, 
lsmod shows it as loaded but ifconfig -a does not list any tun.

I'm alsy trying ssh -ND port remote ip. Here it just sits there. -v 
reveals that it is 'Entering interactive session'. Don't know if that means 
it's working.

Any pointers?

-- 

Bobby
-
To unsubscribe from this list: send the line unsubscribe linux-net in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html