Consider an interface with two (or more) IP addresses, connected to a LAN segment with two (or more) networks. In such a case the source IP is not unique, it should be chosen depending on the destionation IP. Under some circumstances this choice is incorrect. Consider the example (an interface in two networks, trying to reach "scope link" destinations):now we have two routes with preferred src specified Becasue of the preferred src, the actual source IP is chosen right. Now let's flush all the routes, and then add them manually. (Certainly such a usage is a corner case, but sometimes some admins prefer to set all the routes explicitly, rather than implicitly by "proto kernel" etc.) Now the same as above, but no more preferred src... right... Oops. Now wrong. ...and set up the test iface back: In summary: we have an interface with two IP: 192.168.0.1 and 172.18.0.1, and have: 172.18.0.0/24 scope link 192.168.0.0/24 scope link routes. The actual "src" is chosen wrong. The correspond kernel code fragment seems to be in net/ipv4/route.c:ip_route_output_slow(): http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.25.y.git;a=blob;f=net/ipv4/... The FIB_RES_PREFSR macro is: http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.25.y.git;a=blob;f=include/n... since preferred source is not set in the example above, the "fib_prefsrc" is zero, hence __fib_res_prefsrc() is called, which is actually: http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.25.y.git;a=blob;f=net/ipv4/... and since we worked with the "scope link" destinations and have not specified any "gateways" for it, the "FIB_RES_GW(*res)" is zero. When inet_select_addr(): http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.25.y.git;a=blob;f=net/ipv4/... is called with "dst == 0", it chose just the first IP seen on the interface (i.e. 192.168.0.1 in the example) ... Whether it is possible (and applicable) to change the code someway, to call inet_select_addr() with the proper destination IP ? Actually, it is a long standing issue (at least since 1999), probably it is even "feature" now :), but it seems strange that the kernel have all the data to make the right choice, but does not any attemptfor it... Regards, Dmitry Butskoy http://www.fedoraproject.org/wiki/DmitryButskoy -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| Karl Meyer | PROBLEM: 2.6.23-rc "NETDEV WATCHDOG: eth0: transmit timed out" |
| Justin Piszcz | Linux Software RAID 5 Performance Optimizations: 2.6.19.1: (211MB/s read & 195... |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| David P. Quigley | [RFC v3] Security Label Support for NFSv4 |
| YOSHIFUJI Hideaki / | [GIT PULL] [IPV6] COMPAT: Fix SSM applications on 64bit kernels. |
| Krzysztof Halasa | Re: [PATCH v2] Re: WAN: new PPP code for generic HDLC |
| Pavel Emelyanov | [PATCH][CAN]: Fix copy_from_user() results interpretation. |
| Roel Kluin | [PATCH 1] net: fix and typo's |
git: | |
| Peter Stahlir | Git as a filesystem |
| Miklos Vajna | [rfc] git submodules howto |
| Dan Zwell | $GIT_DIR usage |
| Wink Saville | Resolving conflicts |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Xavier Mertens | newfs: cg 0: bad magic number |
| Laurent CARON | IPSEC VPN between OpenBSD and Linux (OpenSwan) |
| Didier Wiroth | win32-codecs, avi and amd64 question |
| Netfilter kernel module | 8 hours ago | Linux kernel |
| serial driver xmit problem | 11 hours ago | Linux kernel |
| Why Windows is better than Linux | 11 hours ago | Linux general |
| How can I see my kernel messages in vt12? | 18 hours ago | Linux kernel |
| Grub | 1 day ago | Linux general |
| vmalloc_fault handling in x86_64 | 1 day ago | Linux kernel |
| epoll_wait()ing on epoll FD | 1 day ago | Linux kernel |
| Framebuffer in x86_64 causes problems to multiseat | 1 day ago | Linux kernel |
| Difference between 2.4 and 2.6 regarding thread creation | 1 day ago | Linux general |
| Compiling gfs2 on kernel 2.6.27 | 2 days ago | Linux kernel |
