bring in latest KAME tree. show kludge entry.

This commit is contained in:
itojun 2000-02-02 05:04:17 +00:00
parent a0de3d7fa5
commit 4d9ae69b8a
1 changed files with 44 additions and 6 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: ifmcstat.c,v 1.5 1999/12/09 15:34:19 itojun Exp $ */
/* $NetBSD: ifmcstat.c,v 1.6 2000/02/02 05:04:17 itojun Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@ -65,6 +65,10 @@ kvm_t *kvmd;
struct nlist nl[] = {
#define N_IFNET 0
{ "_ifnet" },
#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
#define N_IN6_MK 1
{ "_in6_mk" },
#endif
{ "" },
};
@ -91,6 +95,14 @@ static char *ether_ntoa __P((struct ether_addr *));
#define KREAD(addr, buf, type) \
kread((u_long)addr, (void *)buf, sizeof(type))
#ifdef N_IN6_MK
struct multi6_kludge {
LIST_ENTRY(multi6_kludge) mk_entry;
struct ifnet *mk_ifp;
struct in6_multihead mk_head;
};
#endif
const char *inet6_n2a(p)
struct in6_addr *p;
{
@ -179,9 +191,13 @@ char *ifname(ifp)
struct ifnet *ifp;
{
static char buf[BUFSIZ];
#if defined(__NetBSD__) || defined(__OpenBSD__)
struct ifnet ifnet;
#endif
#if defined(__NetBSD__) || defined(__OpenBSD__)
KREAD(ifp->if_xname, buf, IFNAMSIZ);
KREAD(ifp, &ifnet, struct ifnet);
strncpy(buf, ifnet.if_xname, BUFSIZ);
#else
KREAD(ifp->if_name, buf, IFNAMSIZ);
#endif
@ -230,13 +246,9 @@ if6_addrlist(ifap)
struct sockaddr sa;
struct in6_ifaddr if6a;
struct in6_multi *mc = 0;
#if defined(__FreeBSD__) && __FreeBSD__ >= 3
struct ifaddr *ifap0;
#endif /* __FreeBSD__ >= 3 */
#if defined(__FreeBSD__) && __FreeBSD__ >= 3
ifap0 = ifap;
#endif /* __FreeBSD__ >= 3 */
while (ifap) {
KREAD(ifap, &ifa, struct ifaddr);
if (ifa.ifa_addr == NULL)
@ -297,6 +309,32 @@ if6_addrlist(ifap)
if (mc)
in6_multilist(mc);
#endif
#ifdef N_IN6_MK
{
LIST_HEAD(in6_mktype, multi6_kludge) in6_mk;
struct multi6_kludge *mkp, mk;
char *nam;
if (nl[N_IN6_MK].n_value == 0) {
printf("symbol %s not found\n", nl[N_IN6_MK].n_name);
exit(1);
}
KREAD(nl[N_IN6_MK].n_value, &in6_mk, struct in6_mktype);
KREAD(ifap0, &ifa, struct ifaddr);
nam = strdup(ifname(ifa.ifa_ifp));
for (mkp = in6_mk.lh_first; mkp; mkp = mk.mk_entry.le_next) {
KREAD(mkp, &mk, struct multi6_kludge);
if (strcmp(nam, ifname(mk.mk_ifp)) == 0 && mk.mk_head.lh_first) {
printf(" (on kludge entry for %s)\n", nam);
in6_multilist(mk.mk_head.lh_first);
}
}
free(nam);
}
#endif
}
struct in6_multi *