<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Linux ARP code</title>
	<atom:link href="http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/</link>
	<description>by Mark Mayo</description>
	<pubDate>Wed,  7 Jan 2009 03:52:32 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
		<item>
		<title>By: rdoetjes</title>
		<link>http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-49160</link>
		<dc:creator>rdoetjes</dc:creator>
		<pubDate>Fri, 29 Dec 2006 17:00:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-49160</guid>
		<description>I agree the IP stack in Linux is generaly very dodgy. Specially since the 2.6 rewrite.
When looking through Linux code in comparison with BSD and Solaris you will be amazed about the inconsitencies in coding style, the "assumptions" that pointers will be created without proper checks. Really scary stuff!
Specially in kernel space my idea is: there are too many Linux kernel contributers and too little auditors which doesn't help the stability and future of the Linux kernel.</description>
		<content:encoded><![CDATA[<p>I agree the IP stack in Linux is generaly very dodgy. Specially since the 2.6 rewrite.<br />
When looking through Linux code in comparison with BSD and Solaris you will be amazed about the inconsitencies in coding style, the &#8220;assumptions&#8221; that pointers will be created without proper checks. Really scary stuff!<br />
Specially in kernel space my idea is: there are too many Linux kernel contributers and too little auditors which doesn&#8217;t help the stability and future of the Linux kernel.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: nhruby</title>
		<link>http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-45351</link>
		<dc:creator>nhruby</dc:creator>
		<pubDate>Fri, 08 Dec 2006 16:31:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-45351</guid>
		<description>Heh.  I could never get any of the arp sysctl tunables to do the right thing (at least on RHEL) when doing DSR.  

I got fed up and did it the ham fisted way with arptables (package name arptables_vj) and just discard all outbound ARPs for the VIP on the Real Servers.</description>
		<content:encoded><![CDATA[<p>Heh.  I could never get any of the arp sysctl tunables to do the right thing (at least on RHEL) when doing DSR.  </p>
<p>I got fed up and did it the ham fisted way with arptables (package name arptables_vj) and just discard all outbound ARPs for the VIP on the Real Servers.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mark</title>
		<link>http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-44816</link>
		<dc:creator>mark</dc:creator>
		<pubDate>Mon, 04 Dec 2006 22:40:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-44816</guid>
		<description>I should note that based on the docs, you'd think that setting arp_ignore=1 (via sysctl) would "correct" the behavior and you'd only get ARP replies on the interface you desire, but until I read the code it was unclear to me why I was still seeing ARPs coming from hosts with the source address set to an IP on one of the loopbacks. Now I know that you need arp_ignore=1 *and* arp_announce=2 to make a Linux host "do the right thing".

(where "right", as zdzichu pointed out, is open to interpretation)</description>
		<content:encoded><![CDATA[<p>I should note that based on the docs, you&#8217;d think that setting arp_ignore=1 (via sysctl) would &#8220;correct&#8221; the behavior and you&#8217;d only get ARP replies on the interface you desire, but until I read the code it was unclear to me why I was still seeing ARPs coming from hosts with the source address set to an IP on one of the loopbacks. Now I know that you need arp_ignore=1 *and* arp_announce=2 to make a Linux host &#8220;do the right thing&#8221;.</p>
<p>(where &#8220;right&#8221;, as zdzichu pointed out, is open to interpretation)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mark</title>
		<link>http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-44814</link>
		<dc:creator>mark</dc:creator>
		<pubDate>Mon, 04 Dec 2006 22:33:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-44814</guid>
		<description>You hit the problem with DSR (Direct Server Response) configs behind load balancers too, where the "Virtual" IP on the load balancer is configured on the loopback interface of each host in the pool. 

Understanding how Linux will behave in such an environment is a little tricky, since there are two tunables (IN_DEV_ARP_ANNOUNCE and IN_DEV_ARP_IGNORE) with somewhat overlapping agendas that dictate how ARP requests are handled.</description>
		<content:encoded><![CDATA[<p>You hit the problem with DSR (Direct Server Response) configs behind load balancers too, where the &#8220;Virtual&#8221; IP on the load balancer is configured on the loopback interface of each host in the pool. </p>
<p>Understanding how Linux will behave in such an environment is a little tricky, since there are two tunables (IN_DEV_ARP_ANNOUNCE and IN_DEV_ARP_IGNORE) with somewhat overlapping agendas that dictate how ARP requests are handled.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: adb</title>
		<link>http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-44771</link>
		<dc:creator>adb</dc:creator>
		<pubDate>Mon, 04 Dec 2006 13:45:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-44771</guid>
		<description>The other host shouldn't be ARPing for an address it didn't expect to find on the mutually-attached subnet, so normally you don't run into this behavior.  Cable into wrong interface at one end could certainly do it for you.  And a few years ago this was part of an issue with Linux hosts sharing multiple VLANs, especially when there were iptables rules prohibiting traffic arriving on the wrong one.</description>
		<content:encoded><![CDATA[<p>The other host shouldn&#8217;t be ARPing for an address it didn&#8217;t expect to find on the mutually-attached subnet, so normally you don&#8217;t run into this behavior.  Cable into wrong interface at one end could certainly do it for you.  And a few years ago this was part of an issue with Linux hosts sharing multiple VLANs, especially when there were iptables rules prohibiting traffic arriving on the wrong one.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: zdzichu</title>
		<link>http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-44590</link>
		<dc:creator>zdzichu</dc:creator>
		<pubDate>Sat, 02 Dec 2006 13:14:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.vmunix.com/mark/blog/archives/2006/12/02/linux-arp-code/#comment-44590</guid>
		<description>Because Linux treats IP addresses as host addresses, not interface addresses. It will answer for ARP question for any of host IP address on all interfaces, giving proper MAC.
That's why downed interface retain IP address and communication with this IP is still possible through other ifaces.
It's one of two valid interpretation of some RFC.</description>
		<content:encoded><![CDATA[<p>Because Linux treats IP addresses as host addresses, not interface addresses. It will answer for ARP question for any of host IP address on all interfaces, giving proper MAC.<br />
That&#8217;s why downed interface retain IP address and communication with this IP is still possible through other ifaces.<br />
It&#8217;s one of two valid interpretation of some RFC.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
