On 2011-08-01 17:03, Fabien Chouteau wrote: > On 30/07/2011 11:19, Jan Kiszka wrote: >> On 2011-07-30 11:09, Jan Kiszka wrote: >>> On 2011-07-29 19:34, Jan Kiszka wrote: >>>> On 2011-07-29 18:25, Fabien Chouteau wrote: >>>>> This patch adds a simple ARP table in Slirp and also adds handling of >>>>> gratuitous ARP requests. >>>>> >>>>> Signed-off-by: Fabien Chouteau <chout...@adacore.com> >>>>> --- >>>>> Makefile.objs | 2 +- >>>>> slirp/arp_table.c | 50 ++++++++++++++++++++++++++++++++++++++++++ >>>>> slirp/bootp.c | 23 ++++++++++++------ >>>>> slirp/slirp.c | 63 >>>>> +++++++++++++--------------------------------------- >>>>> slirp/slirp.h | 50 +++++++++++++++++++++++++++++++++++++++-- >>>>> 5 files changed, 129 insertions(+), 59 deletions(-) >>>>> create mode 100644 slirp/arp_table.c >>>>> >>>>> diff --git a/Makefile.objs b/Makefile.objs >>>>> index 6991a9f..0c10557 100644 >>>>> --- a/Makefile.objs >>>>> +++ b/Makefile.objs >>>>> @@ -151,7 +151,7 @@ common-obj-y += qemu-timer.o qemu-timer-common.o >>>>> >>>>> slirp-obj-y = cksum.o if.o ip_icmp.o ip_input.o ip_output.o >>>>> slirp-obj-y += slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o >>>>> tcp_output.o >>>>> -slirp-obj-y += tcp_subr.o tcp_timer.o udp.o bootp.o tftp.o >>>>> +slirp-obj-y += tcp_subr.o tcp_timer.o udp.o bootp.o tftp.o arp_table.o >>>>> common-obj-$(CONFIG_SLIRP) += $(addprefix slirp/, $(slirp-obj-y)) >>>>> >>>>> # xen backend driver support >>>>> diff --git a/slirp/arp_table.c b/slirp/arp_table.c >>>>> new file mode 100644 >>>>> index 0000000..5d7404b >>>>> --- /dev/null >>>>> +++ b/slirp/arp_table.c >>>>> @@ -0,0 +1,50 @@ >>>>> +#include "slirp.h" >>>>> + >>>>> +void arp_table_add(ArpTable *arptbl, >>>>> + int ip_addr, >>>>> + uint8_t ethaddr[ETH_ALEN]) >>>> >>>> I still prefer the condensed formatting, but that's a minor nit. > > OK I'll change it to keep consistent style. > > Unfortunately, there's nothing on this subject in the CODING_STYLE...
We should add a section on consistency - but I guess that will always remain a subjective matter. :) > >>>> >>>>> +{ >>>>> + int i; >>>>> + >>>>> + DEBUG_CALL("arp_table_add"); >>>>> + DEBUG_ARG("ip = 0x%x", ip_addr); >>>>> + DEBUG_ARGS((dfd, " hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n", >>>>> + ethaddr[0], ethaddr[1], ethaddr[2], >>>>> + ethaddr[3], ethaddr[4], ethaddr[5])); >>>>> + >>>>> + /* Search for an entry */ >>>>> + for (i = 0; i < ARP_TABLE_SIZE && arptbl->table[i].ar_sip != 0; i++) >>>>> { >>>> >>>> Missed that on round #1: Why treating 0.0.0.0 special? If ip_addr can be >>>> zero, the current logic will append every "update" of that address as a >>>> new entry. > > Isn't 0.0.0.0 a reserved address? I think it's safe to use it here. Actually, the whole 0.0.0.0/8 is source-only, ie. it should never show up in the ARP table. Jan
signature.asc
Description: OpenPGP digital signature