Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ARP implementation

1 view
Skip to first unread message

Arvind

unread,
Jul 31, 2004, 11:12:36 AM7/31/04
to
I was going through the ARP implementation and i found that the design
as one shared cache for entire network interfaces. But the ARP
implementation seems quite contrary. As the ARP protocol is inside
the device driver and hence each device driver would contain a
seperate ARP cache and thus I don't see ARP cache as a global shared
memory. But this would have been possible had the ARP protocol reside
inside the IP process or ARP as a seperate process.

And I also don't see the ARP cache declared as global shared memory,
instead it is intialized in arpinit().

If i am wrong, please correct me.


Thanks
Arvind

Stanley Wileman

unread,
Aug 24, 2004, 4:49:27 PM8/24/04
to
ARP, of course, is a protocol, and as such, it makes no difference to the
user how it's implemented, as long as it works. The primary application for
ARP is to map an IP address into the corresponding physical address (in the
case of XINU, that probably means an Ethernet address). Network device
drivers (for example, Ethernet drivers) don't have anything to do with IP
addresses; they work exclusively with physical Ethernet addresses. So
putting ARP code into the network interface card driver on a per-driver
basis would be inappropriate.

Consider an example. Suppose I've got a process that wants to send a UDP
datagram to IP address 11.22.33.44. My process doesn't know where that host
is located, nor do I care, as long as the network subsystem can deliver my
datagram appropriately. Further suppose I'm connected to three different
networks through three different network cards. My application doesn't know
which of these network cards is appropriate for the network on which
11.22.33.44 is located. But if I've already had communication to/from that
IP address, its IP/EthernetAddress mapping will already appear in the single
system-wide cache. Thus it's not necessary to examine three different ARP
caches to find the mapping, but only one.

Although arptable (the arp cache) is declared and initialized in arpinit.c,
it is NOT declared inside a function, and thus it's a global name and is
accessible from code anywhere in the system.

Hope this helps.

--Stan Wileman

"Arvind" <arvi...@yahoo.com> wrote in message
news:9463cb26.04073...@posting.google.com...

0 new messages