From owner-freebsd-current@FreeBSD.ORG Fri May 7 12:11:18 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 3759F16A4CE for ; Fri, 7 May 2004 12:11:18 -0700 (PDT) Received: from smtp3.sentex.ca (smtp3.sentex.ca [64.7.153.18]) by mx1.FreeBSD.org (Postfix) with ESMTP id B5EB443D2F for ; Fri, 7 May 2004 12:11:16 -0700 (PDT) (envelope-from mike@sentex.net) Received: from avscan2.sentex.ca (avscan2.sentex.ca [199.212.134.19]) by smtp3.sentex.ca (8.12.11/8.12.10) with ESMTP id i47JBCwF013092 for ; Fri, 7 May 2004 15:11:12 -0400 (EDT) (envelope-from mike@sentex.net) Received: from localhost (localhost [127.0.0.1]) by avscan2.sentex.ca (Postfix) with ESMTP id 3862959CB4 for ; Fri, 7 May 2004 15:11:16 -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 17888-09 for ; Fri, 7 May 2004 15:11:16 -0400 (EDT) Received: from lava.sentex.ca (pyroxene.sentex.ca [199.212.134.18]) by avscan2.sentex.ca (Postfix) with ESMTP id E217059CB2 for ; Fri, 7 May 2004 15:11:15 -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 i47JBFZs028165 for ; Fri, 7 May 2004 15:11:15 -0400 (EDT) (envelope-from mike@sentex.net) Message-Id: <6.0.3.0.0.20040507151017.08816e60@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 15:13:13 -0400 To: freebsd-current@freebsd.org From: Mike Tancsa 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 Subject: Re: routing bug? X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 May 2004 19:11:18 -0000 A follow up to the post below on stable. We tried the same program on OpenBSD, and it does the same thing as RELENG_4. However, HEAD as of yesterday and 5.2.1 do not show the same behaviour as RELENG_4. Does this ring a bell with anyone ? Ideally, we would like to see the same behaviour on RELENG_4 as it causes major grief for us with raccoon when dynamic interfaces come and go. ---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"