From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9004 invoked by alias); 17 Jun 2005 08:52:11 -0000 Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Received: (qmail 8975 invoked by uid 22791); 17 Jun 2005 08:52:03 -0000 Received: from prix.tandberg.no (HELO prix.tandberg.no) (194.196.35.10) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Fri, 17 Jun 2005 08:52:03 +0000 Received: from 47mail.eu.tandberg.int (47mail.eu.tandberg.int [10.0.0.25]) by prix.tandberg.no (8.12.10/8.12.10) with ESMTP id j5H8q04n029540 for ; Fri, 17 Jun 2005 10:52:00 +0200 Received: from EXMAIL.eu.tandberg.int ([194.196.35.11]) by 47mail.eu.tandberg.int with Microsoft SMTPSVC(6.0.3790.1830); Fri, 17 Jun 2005 10:52:00 +0200 Received: from [10.47.14.177] ([10.47.14.177]) by EXMAIL.eu.tandberg.int with Microsoft SMTPSVC(5.0.2195.6713); Fri, 17 Jun 2005 10:52:00 +0200 Message-ID: <42B28F30.1070905@tandberg.net> Date: Fri, 17 Jun 2005 08:52:00 -0000 From: Sturle Mastberg User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.2) Gecko/20040803 MIME-Version: 1.0 To: ecos-discuss@sources.redhat.com Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Subject: [ECOS] Possible fix for duplicated ARP entries in the FreeBSD stack X-SW-Source: 2005-06/txt/msg00132.txt.bz2 Hello, For some time I've had problem with duplicated ARP entries that have caused all sorts of problems. I searched the archive and discovered that the problem had been reported before: http://sourceware.org/ml/ecos-discuss/2004-11/msg00097.html My proposal to a fix is to make the sockaddr_inarp struct (include/netinet/if_ether.h) equal in size to the sockaddr struct by padding it at the end. This is exactly what is done to the sockaddr_in struct (include/netinet/in.h) for different reasons. I reached this conclusion after I discovered that two virutally identical calls to rtalloc1 (net/route.c) returned different results. The first instance appears in arplookup (netinet/if_ether.c) where the first parameter to rtalloc1 is a struct sockaddr_inarp cast to a struct sockaddr. The second instance appears in ip_output (netinet/ip_output) via rtalloc_ign (net/route.c) where the first parameter to rtalloc1 is an actual struct sockaddr. The rtalloc1 function does a radix tree search with a call to the rn_match function (net/radix.c). A closer look at this code reveals that it does indeed depend on the size of the supplied struct. The only conclusion a can draw from this is that the three structs: sockaddr, sockaddr_in and sockaddr_inarp must all be of equal size. I have checked the FreeBSD source repository that this is the case for the original code. While browsing the FreeBSD source repository I discovered that the sa_data character array member of the sockaddr struct was increased in size in the eCos FreeBSD stack. Does anyone know why this increase was introduced in eCos? Regards, SM -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss