Date: Fri, 07 May 2004 14:53:10 -0400 From: Mike Tancsa <mike@sentex.net> To: freebsd-stable@freebsd.org Cc: current@freebsd.org Subject: Re: routing bug? Message-ID: <6.0.3.0.0.20040507145020.083d9210@64.7.153.2> In-Reply-To: <6.0.3.0.0.20040507143926.071d4bc0@64.7.153.2> References: <20040507135948.GA5726@vmunix.com> <6.0.3.0.0.20040507143926.071d4bc0@64.7.153.2>
next in thread | previous in thread | raw e-mail | index | archive | help
Whoops, spoke too soon. It actually still is fixed on current. I guess the question is, why the different behavior between how the program works below on STABLE and HEAD ? Oddly enough, OpenBSD has the same behavior as RELENG_4 does which seems somewhat broken no ? ---Mike At 02:41 PM 07/05/2004, Mike Tancsa wrote: >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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> 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 <full-duplex>) >> status: active >>ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 >>faith0: flags=8002<BROADCAST,MULTICAST> mtu 1500 >>ds0: flags=8008<LOOPBACK,MULTICAST> mtu 65532 >>lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 >> inet 172.16.24.33 netmask 0xffff0000 >> inet 172.0.0.1 netmask 0xffff0000 >>tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 >> >>=0= udp-test # cat udp-test.c >>#include <sys/types.h> >>#include <sys/time.h> >>#include <sys/socket.h> >>#include <netinet/in.h> >>#include <netdb.h> >>#include <unistd.h> >>#include <stdio.h> >>#include <stdlib.h> >>#include <string.h> >>#include <ctype.h> >> >>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 <source> <dest>:<port>\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 <source> <dest>:<port>\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" > >_______________________________________________ >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"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6.0.3.0.0.20040507145020.083d9210>