[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-alpha
Subject:    Re: arp_rtrequest: bad gateway value
From:       Ruslan Ermilov <ru () FreeBSD ! ORG>
Date:       2001-11-22 9:36:10
[Download RAW message or body]

On Wed, Nov 21, 2001 at 05:32:27PM -0800, Paul Herman wrote:
> Hi,
> 
> I'd like to pick some brains before I file a PR.
> 
There's already a PR open on this, kern/29170.

> I've got 4.4-RELEASE running on FreeBSD-alpha with more than one
> alias on my network interface.  I decided to try out routed, and
> started noticing gobs and gobs of messages:
> 
>   Nov 15 11:38:10 tick /kernel: arp_rtrequest: bad gateway value
>   Nov 15 11:43:10 tick /kernel: arp_rtrequest: bad gateway value
>   Nov 15 11:47:59 tick /kernel: arp_rtrequest: bad gateway value
>   Nov 15 11:58:02 tick last message repeated 2 times
>   Nov 15 12:08:10 tick last message repeated 2 times
>   Nov 15 12:18:10 tick last message repeated 2 times
> 
> It turns out, this is caused by a bad arp entry:
> 
>   17:21:33{{ttyq8}pherman@tick}~//> arp -a
>   ns1.sc.omation.com (192.168.128.1) at 0:0:0:0:0:0 permanent [ethernet] rt=200
>   tick.sc.omation.com (192.168.128.2) at 0:60:97:6e:6e:92 permanent [ethernet]
>   [...etc...]
> 
> Trying to delete the entry gives me "cannot locate 192.168.128.1",
> probably because the kernel thinks it doesn't exist becase the
> MAC addr == NULL... ...perhaps (?)  Whatever, it shouldn't be there
> in the first place.
> 
> So, I've narrowed this down to when routed it writes RTM_CHANGE
> of type RTF_HOST in sbin/routed/table.c:725
> 
>         if (mask == HOST_MASK) {
>                 w.w_rtm.rtm_flags |= RTF_HOST;
>                 w.w_rtm.rtm_msglen -= sizeof(w.w_mask);
>         } else {
>                 w.w_rtm.rtm_addrs |= RTA_NETMASK;
>                 w.w_mask.sin_addr.s_addr = htonl(mask);
> 
> Something is going haywire (64bit issues?) because when I change
> this to
> 
>         if (mask == HOST_MASK && 0) {
> 
> it works fine, but I'm sure I'm breaking something.  :-)  There
> *is* a sizeof(long) just after it on line 734 which should be a
> sizeof(u_int32_t), but that doesn't change anything in this case.
> This obviously works fine on 32-bit architectures, so I'm thinking
> it's some kind of alignment or sizeof problem, but I don't see it.
> 
> Can anyone comment on this?
> 
Please find attached a copy of my recent posting on this topic.
Hopefully, it exaplains the problem you observe in details.


Cheers,
-- 
Ruslan Ermilov		Oracle Developer/DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age


Date: Thu, 18 Oct 2001 17:39:35 +0300
From: Ruslan Ermilov <ru@FreeBSD.org>
To: Darren Henderson <darren@bmv.state.me.us>
Cc: stable@FreeBSD.ORG, net@FreeBSD.org
Subject: Re: /kernel: arp_rtrequest: bad gateway value
Message-ID: <20011018173935.A43019@sunbay.com>
References: <Pine.A41.4.21.0109251620020.25940-100000@katahdin.bmv.state.me.us> \
                <Pine.A41.4.21.0109261254580.32808-100000@katahdin.bmv.state.me.us>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5i
In-Reply-To: <Pine.A41.4.21.0109261254580.32808-100000@katahdin.bmv.state.me.us>; \
from darren@bmv.state.me.us on Wed, Sep 26, 2001 at 01:08:40PM -0400

On Wed, Sep 26, 2001 at 01:08:40PM -0400, Darren Henderson wrote:
> 
> Posted something similar the other day, but thought I would ask in a more
> general way....
> 
> What causes this error? Looking at the archives and source it appears to be
> related to aliases and if_inet.c
> 
> What has changed between 4.3 and 4.4 that would account for this error
> appearing under 4.4 but not appear under 4.3 on a system where the network
> configuration has not changed?
> 
> Everything appears to be working fine after the upgrade other then the
> appearance of this message numerous times during the day with no apparent
> pattern.
> 
> Any thoughts appreciated.
> 
There's the problem with routed(8).  It issues a command similar to
"route change ip ip" for each (but last) IP address of an interface
if the route already exists and is different.  This results in a
changed route with AF_INET gateway, but route's IFA still points to
Ethernet device and rt_ifa->ifa_rtrequest == arp_rtrequest.  This
results in this message as AF_INET != AF_LINK.  The message is
harmless.  This is also reproduceable on a 4.1-RELEASE machine.

How to repeat without routed(8):

1.  Add IP address to your Ethernet interface:
	ifconfig rl0 192.168.1.1 alias

2.  Create route for this address:
	ping -c1 192.168.1.1

3.  Verify that the route was created with gateway of type AF_LINK:
	route -vn get 192.168.1.1

4.  Change the route like routed(8) does:
	route change 192.168.1.1 192.168.1.1

5.  Watch the dmesg(8) output then repeat "route get" command to
    see route's gateway changed to AF_INET:
	route -vn get 192.168.1.1


Cheers,
-- 
Ruslan Ermilov		Oracle Developer/DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-alpha" in the body of the message

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic