Module Name: src
Committed By: dyoung
Date: Wed Aug 12 22:16:15 UTC 2009
Modified Files:
src/sys/netinet: if_arp.c
Log Message:
Don't require the gateway address to have room for both an interface
name and address. Room for an address will do. This should fix
a regression in 'arp -s ...' on interfaces such as xennet0 with
unusually long names.
I will request a pull-up to netbsd-5.
To generate a diff of this commit:
cvs rdiff -u -r1.145 -r1.146 src/sys/netinet/if_arp.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/netinet/if_arp.c
diff -u src/sys/netinet/if_arp.c:1.145 src/sys/netinet/if_arp.c:1.146
--- src/sys/netinet/if_arp.c:1.145 Sun Jan 11 02:45:54 2009
+++ src/sys/netinet/if_arp.c Wed Aug 12 22:16:15 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: if_arp.c,v 1.145 2009/01/11 02:45:54 christos Exp $ */
+/* $NetBSD: if_arp.c,v 1.146 2009/08/12 22:16:15 dyoung Exp $ */
/*-
* Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.145 2009/01/11 02:45:54 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.146 2009/08/12 22:16:15 dyoung Exp $");
#include "opt_ddb.h"
#include "opt_inet.h"
@@ -459,8 +459,6 @@
struct in_ifaddr *ia;
struct ifaddr *ifa;
struct ifnet *ifp = rt->rt_ifp;
- uint8_t namelen = strlen(ifp->if_xname);
- uint8_t addrlen = ifp->if_addrlen;
if (!arpinit_done) {
arpinit_done = 1;
@@ -581,7 +579,7 @@
/*FALLTHROUGH*/
case RTM_RESOLVE:
if (gate->sa_family != AF_LINK ||
- gate->sa_len < sockaddr_dl_measure(namelen, addrlen)) {
+ gate->sa_len < sockaddr_dl_measure(0, ifp->if_addrlen)) {
log(LOG_DEBUG, "arp_rtrequest: bad gateway value\n");
break;
}
@@ -593,7 +591,7 @@
* Case 2: This route may come from cloning, or a manual route
* add with a LL address.
*/
- switch (satocsdl(gate)->sdl_type) {
+ switch (ifp->if_type) {
#if NTOKEN > 0
case IFT_ISO88025:
allocsize = sizeof(*la) + sizeof(struct token_rif);
@@ -636,8 +634,12 @@
* interface.
*/
rt->rt_expire = 0;
- (void)sockaddr_dl_setaddr(satosdl(gate), gate->sa_len,
- CLLADDR(ifp->if_sadl), ifp->if_addrlen);
+ if (sockaddr_dl_init(satosdl(gate), gate->sa_len,
+ ifp->if_index, ifp->if_type, NULL, 0,
+ CLLADDR(ifp->if_sadl), ifp->if_addrlen) == NULL) {
+ panic("%s(%s): sockaddr_dl_init cannot fail",
+ __func__, ifp->if_xname);
+ }
if (useloopback)
ifp = rt->rt_ifp = lo0ifp;
/*