From owner-freebsd-stable@FreeBSD.ORG Fri May 7 11:39:04 2004 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AB83116A4CF; Fri, 7 May 2004 11:39:04 -0700 (PDT) Received: from smtp3b.sentex.ca (smtp3b.sentex.ca [205.211.164.50]) by mx1.FreeBSD.org (Postfix) with ESMTP id B3CC843D5F; Fri, 7 May 2004 11:39:03 -0700 (PDT) (envelope-from mike@sentex.net) Received: from avscan2.sentex.ca (avscan2.sentex.ca [199.212.134.19]) by smtp3b.sentex.ca (8.12.11/8.12.11) with ESMTP id i47Id263035463; Fri, 7 May 2004 14:39:02 -0400 (EDT) (envelope-from mike@sentex.net) Received: from localhost (localhost [127.0.0.1]) by avscan2.sentex.ca (Postfix) with ESMTP id 009D759C86; Fri, 7 May 2004 14:39:03 -0400 (EDT) Received: from avscan2.sentex.ca ([127.0.0.1]) by localhost (avscan2.sentex.ca [127.0.0.1]) (amavisd-new, port 10024) with SMTP id 12595-11; Fri, 7 May 2004 14:39:02 -0400 (EDT) Received: from lava.sentex.ca (pyroxene.sentex.ca [199.212.134.18]) by avscan2.sentex.ca (Postfix) with ESMTP id A997E59C85; Fri, 7 May 2004 14:39:02 -0400 (EDT) Received: from simian.sentex.net (simeon.sentex.ca [192.168.43.27]) by lava.sentex.ca (8.12.11/8.12.11) with ESMTP id i47Icxl9028019; Fri, 7 May 2004 14:38:59 -0400 (EDT) (envelope-from mike@sentex.net) Message-Id: <6.0.3.0.0.20040507143926.071d4bc0@64.7.153.2> X-Sender: mdtpop@64.7.153.2 (Unverified) X-Mailer: QUALCOMM Windows Eudora Version 6.0.3.0 Date: Fri, 07 May 2004 14:41:05 -0400 To: Gabor , freebsd-stable@freebsd.org From: Mike Tancsa In-Reply-To: <20040507135948.GA5726@vmunix.com> References: <20040507135948.GA5726@vmunix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed X-Virus-Scanned: by amavisd-new X-Virus-Scanned: by amavisd-new at (avscan2) sentex.ca cc: current@freebsd.org Subject: Re: routing bug? X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 May 2004 18:39:04 -0000 A follow up to this. The problem works only with IPSEC in the kernel. This bug is also present in HEAD as of yesterday as well ( FreeBSD 5.2-CURRENT #0: Thu May 6 18:50:14 EDT 2004 ) cc'ing to current. ---Mike At 09:59 AM 07/05/2004, Gabor wrote: >I am experiencing some weird routing phenomena. >When I open a UDP socket and send datagrams to an address(172.30.1.1) >and then remove that route(route delete 172.30.1.1) then my packets >switch from going out the route specific interface(rl0) to going out >the default interface(fxp0). This is as expected. Then I add back >the route (route add 172.30.1.1 10.0.2.2) and the packets swing back >to the route specific interface(rl0). However, if I bind my socket to >a source address(172.16.24.33), when I remove the route and then add >it back, the packets continue to go out the default interface(fxp0) >instead of going out the route specific interface(rl0). > >This is on 4.9 STABLE. I was unable to reproduce this on 5.2.1. What >changes have there been that haven't been MFC'ed? > >=0= udp-test # netstat -nr >Routing tables > >Internet: >Destination Gateway Flags Refs Use Netif Expire >default 192.168.43.1 UGSc 2 2440 fxp0 >10.0.2/24 link#1 UC 2 0 rl0 >10.0.2.1 00:50:fc:32:52:a7 UHLW 0 2 lo0 >10.0.2.2 00:0e:0c:05:09:19 UHLW 1 3 rl0 69 >172.0.0.1 172.0.0.1 UH 0 0 lo0 >172.30.1.1 10.0.2.2 UGHS 0 0 rl0 >192.168.7 link#1 UC 0 0 rl0 >192.168.43 link#2 UC 4 0 fxp0 >192.168.43.1 00:50:bf:33:63:70 UHLW 4 56111 fxp0 1079 >192.168.43.31 link#2 UHLW 1 249 fxp0 >192.168.43.157 00:a0:c9:4b:a5:f4 UHLW 6 2168880 fxp0 771 >192.168.43.242 link#2 UHLW 1 718878 fxp0 > >=0= udp-test # ifconfig >rl0: flags=8843 mtu 1500 > inet 192.168.7.2 netmask 0xffffff00 broadcast 192.168.7.255 > inet 10.0.2.1 netmask 0xffffff00 broadcast 10.0.2.255 > ether 00:50:fc:32:52:a7 > media: Ethernet 10baseT/UTP > status: active >fxp0: flags=8843 mtu 1500 > inet 192.168.43.26 netmask 0xffffff00 broadcast 192.168.43.255 > ether 00:01:80:3d:b4:4f > media: Ethernet autoselect (100baseTX ) > status: active >ppp0: flags=8010 mtu 1500 >faith0: flags=8002 mtu 1500 >ds0: flags=8008 mtu 65532 >lo0: flags=8049 mtu 16384 > inet 172.16.24.33 netmask 0xffff0000 > inet 172.0.0.1 netmask 0xffff0000 >tun0: flags=8010 mtu 1500 > >=0= udp-test # cat udp-test.c >#include >#include >#include >#include >#include >#include >#include >#include >#include >#include > >int send_pkt(unsigned char *src, unsigned char *dest, unsigned short port); > >int >main(int argc, char **argv) >{ > unsigned a, b, c, d, a2, b2, c2, d2; > unsigned port; > unsigned char src[4], dest[4]; > > > if (argc != 3) { > fprintf(stderr, > "Usage: %s :\n", > argv[0]); > return 1; > } > > if (sscanf(argv[1], "%u.%u.%u.%u", &a, &b, &c, &d) == 4 > && a < 256 && b < 256 && c < 256 && d < 256 > && sscanf(argv[2], "%u.%u.%u.%u:%u", &a2, &b2, &c2, &d2, > &port) == 5 > && a2 < 256 && b2 < 256 && c2 < 256 && d2 < 256 && port < > 65536) { > /* OK */ > src[0] = a; > src[1] = b; > src[2] = c; > src[3] = d; > dest[0] = a2; > dest[1] = b2; > dest[2] = c2; > dest[3] = d2; > send_pkt(src, dest, port); > } > else { > fprintf(stderr, > "Usage: %s :\n", > argv[0]); > return 1; > } > > return 0; >} > >int >send_pkt(unsigned char *src, unsigned char *dest, unsigned short port) >{ > int s, len, cnt, rc, on; > struct protoent *proto; > struct sockaddr_in to, from; > char data[1024]; > > if (!(proto = getprotobyname("udp"))) { > perror("getprotobyname"); > return -1; > } > > if ((s = socket(PF_INET, SOCK_DGRAM, proto->p_proto)) < 0) { > perror("socket"); > return -1; > } > on = 1; > > memset(&from, 0, sizeof from); > from.sin_family = AF_INET; > from.sin_port = htons(0); > memcpy(&from.sin_addr.s_addr, src, 4); > fprintf(stderr, > "bind:%d\n", > bind(s, (struct sockaddr*)&from, sizeof from)); > > memset(&to, 0, sizeof to); > to.sin_family = AF_INET; > to.sin_port = htons(port); > memcpy(&to.sin_addr.s_addr, dest, 4); > len = 58; > cnt = 0; > while (1) { > memset(data, cnt, len); > rc = sendto(s, data, len, 0, (struct sockaddr*)&to, sizeof to); > if (rc < 0) > perror(""); > fprintf(stderr, "%d %d\n", rc, cnt); > sleep(5); > ++cnt; > } > close(s); > > return 0; >} > >_______________________________________________ >freebsd-stable@freebsd.org mailing list >http://lists.freebsd.org/mailman/listinfo/freebsd-stable >To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org"