Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Oct 2002 14:46:24 -0700
From:      "Luoqi Chen" <lchen@briontech.com>
To:        <net@freebsd.org>
Subject:   possible routed bug
Message-ID:  <AHEKICEOIHLOGINAFIINIEEJCAAA.lchen@briontech.com>

next in thread | raw e-mail | index | archive | help
Hi,

I've encountered a possible bug in routed code that's interfering
with path mtu discovery mechanism. Routed deletes any cloned route
as soon as it sees one (with exception of arp routes in the local
ethernet), including protocol cloned routes served as holders for
path mtu information. Could anyone confirm this is not an intended
behavior?

This symptom of this bug is the breakdown of the pmtu discovery
process. It is easily reproduced with a machine behind a PPPoE
router (or any router limits MTU to below 1500) and running routed.
With this seutp, send an email larger than 1500 to your friend at
stanford or mit, you will find the email couldn't be delivered.
Start tcpdump and watch your email and icmp traffic, you will see
an icmp response ICMP_NEEDFRAG for the first 1500-byte tcp packet,
but *NO* immediate retransmission with reduced packet size in
response to the icmp message, the next retransmission will occur
10ms later when the retransmit timer expires and with the same 1500
byte packet.

Following is my proposed fix. Basically treat the protocol cloned
routes the same way as we treat arp routes (in fact also cloned),
that is, ignore them.

Index: table.c
===================================================================
RCS file: /home/ncvs/src/sbin/routed/table.c,v
retrieving revision 1.16
diff -u -r1.16 table.c
--- table.c     18 Feb 2002 20:35:19 -0000      1.16
+++ table.c     16 Oct 2002 18:33:53 -0000
@@ -1111,9 +1111,9 @@
                        continue;
 
                /* ignore ARP table entries on systems with a merged route
-                * and ARP table.
+                * and ARP table, or any other cloned routes
                 */
-               if (rtm->rtm_flags & RTF_LLINFO)
+               if (rtm->rtm_flags & (RTF_LLINFO | RTF_WASCLONED))
                        continue;
 
                /* ignore multicast addresses
@@ -1259,6 +1259,11 @@
 
                if (m.r.rtm.rtm_flags & RTF_LLINFO) {
                        trace_act("ignore ARP %s", str);
+                       continue;
+               }
+
+               if (m.r.rtm.rtm_flags & RTF_WASCLONED) {
+                       trace_act("ignore clone %s", str);
                        continue;
                }


Thanks
-lq

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AHEKICEOIHLOGINAFIINIEEJCAAA.lchen>