Date: Wed, 13 Aug 1997 22:15:43 +0300 From: Danny Braniss <danny@cs.huji.ac.il> To: Jim Shankland <jas@flyingfox.com> Cc: hackers@FreeBSD.ORG Subject: Re: PROXY ARP Message-ID: <199708131915.WAA22897@sexta.cs.huji.ac.il> In-Reply-To: Your message of "Wed, 13 Aug 1997 10:06:39 PDT." <199708131706.KAA12621@biggusdiskus.flyingfox.com>
next in thread | previous in thread | raw e-mail | index | archive | help
In message <199708131706.KAA12621@biggusdiskus.flyingfox.com>you write: } }As Alex Trebek would say, "Can you be more specific?" Do you mean }the code isn't really there in FreeBSD? Or that ARP-level bridging }is inherently a bad idea? If the latter, why? } }Jim Shankland }Flying Fox Computer Systems, Inc. I think ARP-level bridging is not a bad idea in certain cases, and in my particular case the simplest one (if it would work :-), trying to link two dissimilar electronic networks with common protocol when of the shelf box is not available. (btw, gbt network, at least one product has a '12 port repeater if one 10/100mgb port). now back to bsd, in if_ether.c there is 'some' provision for proxying. actualy only some 4 lines of code. My guess is that it was put in specialy for p2p links, where the slip/ppp takes care of setting it up, and removing the proxy when the link goes down. Intranet +-------+ +--------------+ --------|Gateway|-------|Myrinet switch| (16 ports) 10/100ether +-------+ +--------------+ | | host-A host-X host-Y ... to simplify the test, hosts on the Myrinet side have a subnet of 255.255.240 and a default route to gateway, hence have no need for proxying - if they want to talk to hosts on the myrinet they send an arp, else the packets get routed to gateway. the problem is on the ethernet side, all hosts think the network is flat (no subnets, and they have a default route to a wan-router). so, by doing 'arp -s host-X mac-address-of-ether pub' the intranet was able to communicate with host-X. problem I: when host-Y wanted to talk with host-X, both the Gateway and host-X replied (forgot to mention, the gateway is running BSD/OS, there is not yet a driver for myrinet for FreeBSD), so i looked at FreeBSD and saw the fix i need, mainly not to respond to arp request to the 'wrong' interface. problem I solved. proble II: and this is true for FreeBSD too (as far as i can tell). the gateway will eventualy expire the myrinet-mac address of host-X, leaving only the proxy (permanet) entry. next time the gateway wants to talk to host-X it gets the proxy-mac, and sends the packet out through the ethernet! (there are more problems with expiration, but as they like to write in books: it's left to the reader to figure it out :-) problem III: i see sometimes, on hosts in the intranet, have the myrinet mac address of host-X! problem II & III are more difficult, im still trying to figure out rtalloc1(), which calls rn_match, but at first look, sin_other (which is set to PROXY) is not checked - don't know if it should. Am i being too specific? In any case, while i was doing all this, i was writing a user level program to add/delete proxy entries. it used bpf to filter arp requests on both interfaces, and when a request on the ether side is seen that has a match on the myrinet, it would tell the kernel about the proxy. but in a 'bold and recless' move, I decided to send an ARP (proxy) reply myself (not telling the kernel anything), and it seems to work! the program needs allot of polishing still, but it does prove a point. a side effect, is that, since the network is fully switched, broadcasts are slow, and my little gateway/user level program, adds no significant delay. danny Daniel Braniss e-mail: danny@cs.huji.ac.il Institute of Computer Science phone: +972 2 658 4385 The Hebrew University Fax: +972 2 561 7723 Jerusalem, Israel
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199708131915.WAA22897>