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:
parent
84a821fc01
commit
20c15691a3
@ -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;
|
||||
|
@ -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);
|
||||
|
16
sys/net/nd.h
16
sys/net/nd.h
@ -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);
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user