nd: Name l3addr union of llentry and use in-place of nd_addr.

Probably makes more sense and makes nd.h less messy.
This commit is contained in:
roy 2020-09-14 15:09:57 +00:00
parent 84a821fc01
commit 20c15691a3
5 changed files with 46 additions and 51 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_llatbl.h,v 1.17 2019/07/18 06:47:10 ozaki-r Exp $ */
/* $NetBSD: if_llatbl.h,v 1.18 2020/09/14 15:09:57 roy Exp $ */
/*
* Copyright (c) 2004 Luigi Rizzo, Alessandro Cerri. All rights reserved.
* Copyright (c) 2004-2008 Qing Li. All rights reserved.
@ -63,7 +63,7 @@ extern krwlock_t lltable_rwlock;
*/
struct llentry {
LIST_ENTRY(llentry) lle_next;
union {
union l3addr {
struct in_addr addr4;
struct in6_addr addr6;
} r_l3addr;
@ -86,7 +86,7 @@ struct llentry {
uint16_t la_asked;
uint16_t la_preempt;
uint16_t ln_byhint;
int16_t ln_state; /* IPv6 has ND6_LLINFO_NOSTATE == -2 */
int16_t ln_state; /* ND_LLINFO_NOSTATE == -2 */
uint16_t ln_router;
time_t ln_ntick;
int lle_refcnt;

View File

@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: nd.c,v 1.1 2020/09/11 14:59:22 roy Exp $");
__KERNEL_RCSID(0, "$NetBSD: nd.c,v 1.2 2020/09/14 15:09:57 roy Exp $");
#include <sys/callout.h>
#include <sys/mbuf.h>
@ -57,7 +57,7 @@ nd_timer(void *arg)
struct psref psref;
struct mbuf *m = NULL;
bool send_ns = false, missed = false;
union nd_addr taddr, *daddrp = NULL;
union l3addr taddr, *daddrp = NULL;
SOFTNET_KERNEL_LOCK_UNLESS_NET_MPSAFE();
LLE_WLOCK(ln);
@ -158,7 +158,7 @@ nd_timer(void *arg)
if (send_ns) {
uint8_t lladdr[255], *lladdrp;
union nd_addr src, *psrc;
union l3addr src, *psrc;
nd_set_timer(ln, ND_TIMER_RETRANS);
if (ln->ln_state > ND_LLINFO_INCOMPLETE &&
@ -353,7 +353,7 @@ nd_resolve(struct llentry *ln, const struct rtentry *rt, struct mbuf *m,
*/
if (!ND_IS_LLINFO_PERMANENT(ln) && ln->ln_asked == 0) {
struct psref psref;
union nd_addr dst, src, *psrc;
union l3addr dst, src, *psrc;
ln->ln_asked++;
nd_set_timer(ln, ND_TIMER_RETRANS);

View File

@ -1,4 +1,4 @@
/* $NetBSD: nd.h,v 1.1 2020/09/11 14:59:22 roy Exp $ */
/* $NetBSD: nd.h,v 1.2 2020/09/14 15:09:57 roy Exp $ */
/*
* Copyright (c) 2020 The NetBSD Foundation, Inc.
@ -65,12 +65,6 @@
((MIN_RANDOM_FACTOR * (x >> 10)) + (cprng_fast32() & \
((MAX_RANDOM_FACTOR - MIN_RANDOM_FACTOR) * (x >> 10))))
#include <netinet/in.h>
union nd_addr {
struct in_addr nd_addr4;
struct in6_addr nd_addr6;
};
struct nd_domain {
int nd_family;
int nd_delay; /* delay first probe time in seconds */
@ -81,10 +75,10 @@ struct nd_domain {
bool (*nd_nud_enabled)(struct ifnet *);
unsigned int (*nd_reachable)(struct ifnet *); /* msec */
unsigned int (*nd_retrans)(struct ifnet *); /* msec */
union nd_addr *(*nd_holdsrc)(struct llentry *, union nd_addr *);
void (*nd_output)(struct ifnet *, const union nd_addr *,
const union nd_addr *, const uint8_t *, const union nd_addr *);
void (*nd_missed)(struct ifnet *, const union nd_addr *, struct mbuf *);
union l3addr *(*nd_holdsrc)(struct llentry *, union l3addr *);
void (*nd_output)(struct ifnet *, const union l3addr *,
const union l3addr *, const uint8_t *, const union l3addr *);
void (*nd_missed)(struct ifnet *, const union l3addr *, struct mbuf *);
void (*nd_free)(struct llentry *, int);
};

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_arp.c,v 1.295 2020/09/11 15:16:00 roy Exp $ */
/* $NetBSD: if_arp.c,v 1.296 2020/09/14 15:09:57 roy 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.295 2020/09/11 15:16:00 roy Exp $");
__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.296 2020/09/14 15:09:57 roy Exp $");
#ifdef _KERNEL_OPT
#include "opt_ddb.h"
@ -141,10 +141,10 @@ static int arp_perform_nud = 1;
static bool arp_nud_enabled(struct ifnet *);
static unsigned int arp_llinfo_reachable(struct ifnet *);
static unsigned int arp_llinfo_retrans(struct ifnet *);
static union nd_addr *arp_llinfo_holdsrc(struct llentry *, union nd_addr *);
static void arp_llinfo_output(struct ifnet *, const union nd_addr *,
const union nd_addr *, const uint8_t *, const union nd_addr *);
static void arp_llinfo_missed(struct ifnet *, const union nd_addr *,
static union l3addr *arp_llinfo_holdsrc(struct llentry *, union l3addr *);
static void arp_llinfo_output(struct ifnet *, const union l3addr *,
const union l3addr *, const uint8_t *, const union l3addr *);
static void arp_llinfo_missed(struct ifnet *, const union l3addr *,
struct mbuf *);
static void arp_free(struct llentry *, int);
@ -1305,8 +1305,8 @@ arp_llinfo_retrans(__unused struct ifnet *ifp)
* and stores it in @src.
* Returns pointer to @src (if hold queue is not empty) or NULL.
*/
static union nd_addr *
arp_llinfo_holdsrc(struct llentry *ln, union nd_addr *src)
static union l3addr *
arp_llinfo_holdsrc(struct llentry *ln, union l3addr *src)
{
struct ip *ip;
@ -1319,7 +1319,7 @@ arp_llinfo_holdsrc(struct llentry *ln, union nd_addr *src)
ip = mtod(ln->ln_hold, struct ip *);
/* XXX pullup? */
if (sizeof(*ip) < ln->ln_hold->m_len)
src->nd_addr4 = ip->ip_src;
src->addr4 = ip->ip_src;
else
src = NULL;
@ -1327,20 +1327,20 @@ arp_llinfo_holdsrc(struct llentry *ln, union nd_addr *src)
}
static void
arp_llinfo_output(struct ifnet *ifp, __unused const union nd_addr *daddr,
const union nd_addr *taddr, const uint8_t *tlladdr,
const union nd_addr *hsrc)
arp_llinfo_output(struct ifnet *ifp, __unused const union l3addr *daddr,
const union l3addr *taddr, const uint8_t *tlladdr,
const union l3addr *hsrc)
{
struct in_addr tip = taddr->nd_addr4, sip = zeroin_addr;
struct in_addr tip = taddr->addr4, sip = zeroin_addr;
const uint8_t *slladdr = CLLADDR(ifp->if_sadl);
if (hsrc != NULL) {
struct in_ifaddr *ia;
struct psref psref;
ia = in_get_ia_on_iface_psref(hsrc->nd_addr4, ifp, &psref);
ia = in_get_ia_on_iface_psref(hsrc->addr4, ifp, &psref);
if (ia != NULL) {
sip = hsrc->nd_addr4;
sip = hsrc->addr4;
ia4_release(ia, &psref);
}
}
@ -1373,7 +1373,8 @@ arp_llinfo_output(struct ifnet *ifp, __unused const union nd_addr *daddr,
static void
arp_llinfo_missed(struct ifnet *ifp, const union nd_addr *taddr, struct mbuf *m)
arp_llinfo_missed(struct ifnet *ifp, const union l3addr *taddr,
struct mbuf *m)
{
struct in_addr mdaddr = zeroin_addr;
struct sockaddr_in dsin, tsin;
@ -1395,7 +1396,7 @@ arp_llinfo_missed(struct ifnet *ifp, const union nd_addr *taddr, struct mbuf *m)
} else
sa = NULL;
sockaddr_in_init(&tsin, &taddr->nd_addr4, 0);
sockaddr_in_init(&tsin, &taddr->addr4, 0);
rt_clonedmsg(RTM_MISS, sa, sintosa(&tsin), NULL, ifp);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: nd6.c,v 1.272 2020/09/11 15:03:33 roy Exp $ */
/* $NetBSD: nd6.c,v 1.273 2020/09/14 15:09:57 roy Exp $ */
/* $KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $ */
/*
@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.272 2020/09/11 15:03:33 roy Exp $");
__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.273 2020/09/14 15:09:57 roy Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@ -107,10 +107,10 @@ static void nd6_free(struct llentry *, int);
static bool nd6_nud_enabled(struct ifnet *);
static unsigned int nd6_llinfo_reachable(struct ifnet *);
static unsigned int nd6_llinfo_retrans(struct ifnet *);
static union nd_addr *nd6_llinfo_holdsrc(struct llentry *, union nd_addr *);
static void nd6_llinfo_output(struct ifnet *, const union nd_addr *,
const union nd_addr *, const uint8_t *, const union nd_addr *);
static void nd6_llinfo_missed(struct ifnet *, const union nd_addr *,
static union l3addr *nd6_llinfo_holdsrc(struct llentry *, union l3addr *);
static void nd6_llinfo_output(struct ifnet *, const union l3addr *,
const union l3addr *, const uint8_t *, const union l3addr *);
static void nd6_llinfo_missed(struct ifnet *, const union l3addr *,
struct mbuf *);
static void nd6_timer(void *);
static void nd6_timer_work(struct work *, void *);
@ -367,23 +367,23 @@ nd6_llinfo_get_holdsrc(struct llentry *ln, struct in6_addr *src)
return src;
}
static union nd_addr *
nd6_llinfo_holdsrc(struct llentry *ln, union nd_addr *src)
static union l3addr *
nd6_llinfo_holdsrc(struct llentry *ln, union l3addr *src)
{
if (nd6_llinfo_get_holdsrc(ln, &src->nd_addr6) == NULL)
if (nd6_llinfo_get_holdsrc(ln, &src->addr6) == NULL)
return NULL;
return src;
}
static void
nd6_llinfo_output(struct ifnet *ifp, const union nd_addr *daddr,
const union nd_addr *taddr, __unused const uint8_t *tlladdr,
const union nd_addr *hsrc)
nd6_llinfo_output(struct ifnet *ifp, const union l3addr *daddr,
const union l3addr *taddr, __unused const uint8_t *tlladdr,
const union l3addr *hsrc)
{
nd6_ns_output(ifp, &daddr->nd_addr6, &taddr->nd_addr6,
&hsrc->nd_addr6, NULL);
nd6_ns_output(ifp, &daddr->addr6, &taddr->addr6,
&hsrc->addr6, NULL);
}
static bool
@ -411,7 +411,7 @@ nd6_llinfo_retrans(struct ifnet *ifp)
}
static void
nd6_llinfo_missed(struct ifnet *ifp, const union nd_addr *taddr, struct mbuf *m)
nd6_llinfo_missed(struct ifnet *ifp, const union l3addr *taddr, struct mbuf *m)
{
struct in6_addr mdaddr6 = zeroin6_addr;
struct sockaddr_in6 dsin6, tsin6;
@ -426,7 +426,7 @@ nd6_llinfo_missed(struct ifnet *ifp, const union nd_addr *taddr, struct mbuf *m)
} else
sa = NULL;
sockaddr_in6_init(&tsin6, &taddr->nd_addr6, 0, 0, 0);
sockaddr_in6_init(&tsin6, &taddr->addr6, 0, 0, 0);
rt_clonedmsg(RTM_MISS, sa, sin6tosa(&tsin6), NULL, ifp);
}