summaryrefslogtreecommitdiff
path: root/usr.sbin/ifmcstat
diff options
context:
space:
mode:
authorYoshinobu Inoue <shin@FreeBSD.org>2000-01-07 10:02:43 +0000
committerYoshinobu Inoue <shin@FreeBSD.org>2000-01-07 10:02:43 +0000
commit04e8772051398d25637351f794866c6084a47229 (patch)
tree7de3824c7e5e4ff27408fbfa784f341858ec8515 /usr.sbin/ifmcstat
parent2a6830d22ea207c075fa71d474166d79e4e41f9b (diff)
downloadsrc-test2-04e8772051398d25637351f794866c6084a47229.tar.gz
src-test2-04e8772051398d25637351f794866c6084a47229.zip
Notes
Diffstat (limited to 'usr.sbin/ifmcstat')
-rw-r--r--usr.sbin/ifmcstat/ifmcstat.c226
1 files changed, 44 insertions, 182 deletions
diff --git a/usr.sbin/ifmcstat/ifmcstat.c b/usr.sbin/ifmcstat/ifmcstat.c
index d5ffc1333ceb..9fe262f65623 100644
--- a/usr.sbin/ifmcstat/ifmcstat.c
+++ b/usr.sbin/ifmcstat/ifmcstat.c
@@ -40,23 +40,13 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-# include <net/if_var.h>
-#endif
+#include <net/if_var.h>
#include <net/if_types.h>
#include <net/if_dl.h>
#include <netinet/in.h>
-#ifndef __NetBSD__
-# ifdef __FreeBSD__
-# define _KERNEL
-# endif
-# include <netinet/if_ether.h>
-# ifdef __FreeBSD__
-# undef _KERNEL
-# endif
-#else
-# include <net/if_ether.h>
-#endif
+#define _KERNEL
+#include <netinet/if_ether.h>
+#undef _KERNEL
#include <netinet/in_var.h>
#include <arpa/inet.h>
@@ -72,21 +62,9 @@ const char *inet6_n2a __P((struct in6_addr *));
int main __P((void));
char *ifname __P((struct ifnet *));
void kread __P((u_long, void *, int));
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
-void acmc __P((struct ether_multi *));
-#endif
void if6_addrlist __P((struct ifaddr *));
void in6_multilist __P((struct in6_multi *));
-struct in6_multi * in6_multientry __P((struct in6_multi *));
-
-#if !defined(__NetBSD__) && !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(__OpenBSD__)
-#ifdef __bsdi__
-struct ether_addr {
- u_int8_t ether_addr_octet[6];
-};
-#endif
-static char *ether_ntoa __P((struct ether_addr *));
-#endif
+void in6_multientry __P((struct in6_multi *));
#define KREAD(addr, buf, type) \
kread((u_long)addr, (void *)buf, sizeof(type))
@@ -105,12 +83,7 @@ int main()
{
char buf[_POSIX2_LINE_MAX], ifname[IFNAMSIZ];
struct ifnet *ifp, *nifp, ifnet;
-#ifndef __NetBSD__
struct arpcom arpcom;
-#else
- struct ethercom ec;
- struct sockaddr_dl sdl;
-#endif
if ((kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, buf)) == NULL) {
perror("kvm_openfiles");
@@ -128,47 +101,8 @@ int main()
while (ifp) {
KREAD(ifp, &ifnet, struct ifnet);
printf("%s:\n", if_indextoname(ifnet.if_index, ifname));
-
-#if defined(__NetBSD__) || defined(__OpenBSD__)
- if6_addrlist(ifnet.if_addrlist.tqh_first);
- nifp = ifnet.if_list.tqe_next;
-#elif defined(__FreeBSD__) && __FreeBSD__ >= 3
if6_addrlist(TAILQ_FIRST(&ifnet.if_addrhead));
- nifp = ifnet.if_link.tqe_next;
-#else
- if6_addrlist(ifnet.if_addrlist);
- nifp = ifnet.if_next;
-#endif
-
-#ifdef __NetBSD__
- KREAD(ifnet.if_sadl, &sdl, struct sockaddr_dl);
- if (sdl.sdl_type == IFT_ETHER) {
- printf("\tenaddr %s",
- ether_ntoa((struct ether_addr *)LLADDR(&sdl)));
- KREAD(ifp, &ec, struct ethercom);
- printf(" multicnt %d", ec.ec_multicnt);
- acmc(ec.ec_multiaddrs.lh_first);
- printf("\n");
- }
-#elif defined(__FreeBSD__) && __FreeBSD__ >= 3
- /* not supported */
-#else
- if (ifnet.if_type == IFT_ETHER) {
- KREAD(ifp, &arpcom, struct arpcom);
- printf("\tenaddr %s",
- ether_ntoa((struct ether_addr *)arpcom.ac_enaddr));
- KREAD(ifp, &arpcom, struct arpcom);
- printf(" multicnt %d", arpcom.ac_multicnt);
-#ifdef __OpenBSD__
- acmc(arpcom.ac_multiaddrs.lh_first);
-#else
- acmc(arpcom.ac_multiaddrs);
-#endif
- printf("\n");
- }
-#endif
-
- ifp = nifp;
+ ifp = TAILQ_NEXT(&ifnet, if_link);
}
exit(0);
@@ -180,11 +114,7 @@ char *ifname(ifp)
{
static char buf[BUFSIZ];
-#if defined(__NetBSD__) || defined(__OpenBSD__)
- KREAD(ifp->if_xname, buf, IFNAMSIZ);
-#else
KREAD(ifp->if_name, buf, IFNAMSIZ);
-#endif
return buf;
}
@@ -199,107 +129,64 @@ void kread(addr, buf, len)
}
}
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
-void acmc(am)
- struct ether_multi *am;
-{
- struct ether_multi em;
-
- while (am) {
- KREAD(am, &em, struct ether_multi);
-
- printf("\n\t\t");
- printf("%s -- ", ether_ntoa((struct ether_addr *)em.enm_addrlo));
- printf("%s ", ether_ntoa((struct ether_addr *)&em.enm_addrhi));
- printf("%d", em.enm_refcount);
-#if !defined(__NetBSD__) && !defined(__OpenBSD__)
- am = em.enm_next;
-#else
- am = em.enm_list.le_next;
-#endif
- }
-}
-#endif
-
void
if6_addrlist(ifap)
struct ifaddr *ifap;
{
static char in6buf[BUFSIZ];
+ struct ifnet ifnet;
struct ifaddr ifa;
- struct sockaddr sa;
- struct in6_ifaddr if6a;
- struct in6_multi *mc = 0;
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
struct ifaddr *ifap0;
-#endif /* __FreeBSD__ >= 3 */
+ struct ifmultiaddr ifm, *ifmp = 0;
+ struct in6_ifaddr if6a;
+ struct in6_multi *mc = 0, in6m;
+ int in6_multilist_done = 0;
+ struct sockaddr sa;
+ struct sockaddr_in6 sin6;
+ struct sockaddr_dl sdl;
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
+ if (ifap == NULL)
+ return;
ifap0 = ifap;
-#endif /* __FreeBSD__ >= 3 */
- while (ifap) {
+
+ do {
KREAD(ifap, &ifa, struct ifaddr);
if (ifa.ifa_addr == NULL)
- goto nextifap;
+ continue;
KREAD(ifa.ifa_addr, &sa, struct sockaddr);
if (sa.sa_family != PF_INET6)
- goto nextifap;
+ continue;
KREAD(ifap, &if6a, struct in6_ifaddr);
printf("\tinet6 %s\n",
inet_ntop(AF_INET6,
(const void *)&if6a.ia_addr.sin6_addr,
in6buf, sizeof(in6buf)));
-#if !(defined(__FreeBSD__) && __FreeBSD__ >= 3)
- mc = mc ? mc : if6a.ia6_multiaddrs.lh_first;
-#endif
- nextifap:
-#if defined(__NetBSD__) || defined(__OpenBSD__)
- ifap = ifa.ifa_list.tqe_next;
-#elif defined(__FreeBSD__) && __FreeBSD__ >= 3
- ifap = ifa.ifa_link.tqe_next;
-#else
- ifap = ifa.ifa_next;
-#endif /* __FreeBSD__ >= 3 */
- }
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
- if (ifap0) {
- struct ifnet ifnet;
- struct ifmultiaddr ifm, *ifmp = 0;
- struct sockaddr_in6 sin6;
- struct in6_multi in6m;
- struct sockaddr_dl sdl;
- int in6_multilist_done = 0;
-
- KREAD(ifap0, &ifa, struct ifaddr);
- KREAD(ifa.ifa_ifp, &ifnet, struct ifnet);
- if (ifnet.if_multiaddrs.lh_first)
- ifmp = ifnet.if_multiaddrs.lh_first;
- while (ifmp) {
- KREAD(ifmp, &ifm, struct ifmultiaddr);
- if (ifm.ifma_addr == NULL)
- goto nextmulti;
- KREAD(ifm.ifma_addr, &sa, struct sockaddr);
- if (sa.sa_family != AF_INET6)
- goto nextmulti;
- (void)in6_multientry((struct in6_multi *)
- ifm.ifma_protospec);
- if (ifm.ifma_lladdr == 0)
- goto nextmulti;
- KREAD(ifm.ifma_lladdr, &sdl, struct sockaddr_dl);
- printf("\t\t\tmcast-macaddr %s multicnt %d\n",
- ether_ntoa((struct ether_addr *)LLADDR(&sdl)),
- ifm.ifma_refcount);
- nextmulti:
- ifmp = ifm.ifma_link.le_next;
- }
- }
-#else
- if (mc)
- in6_multilist(mc);
-#endif
+ } while ((ifap = TAILQ_NEXT(&ifa, ifa_link)) != NULL);
+
+ KREAD(ifap0, &ifa, struct ifaddr);
+ KREAD(ifa.ifa_ifp, &ifnet, struct ifnet);
+ if (ifnet.if_multiaddrs.lh_first)
+ ifmp = ifnet.if_multiaddrs.lh_first;
+ if (ifmp == NULL)
+ return;
+ do {
+ KREAD(ifmp, &ifm, struct ifmultiaddr);
+ if (ifm.ifma_addr == NULL)
+ continue;
+ KREAD(ifm.ifma_addr, &sa, struct sockaddr);
+ if (sa.sa_family != AF_INET6)
+ continue;
+ in6_multientry((struct in6_multi *)ifm.ifma_protospec);
+ if (ifm.ifma_lladdr == 0)
+ continue;
+ KREAD(ifm.ifma_lladdr, &sdl, struct sockaddr_dl);
+ printf("\t\t\tmcast-macaddr %s multicnt %d\n",
+ ether_ntoa((struct ether_addr *)LLADDR(&sdl)),
+ ifm.ifma_refcount);
+ } while ((ifmp = LIST_NEXT(&ifm, ifma_link)) != NULL);
}
-struct in6_multi *
+void
in6_multientry(mc)
struct in6_multi *mc;
{
@@ -310,29 +197,4 @@ in6_multientry(mc)
printf("\t\tgroup %s\n", inet_ntop(AF_INET6,
(const void *)&multi.in6m_addr,
mcbuf, sizeof(mcbuf)));
- return(multi.in6m_entry.le_next);
-}
-
-void
-in6_multilist(mc)
- struct in6_multi *mc;
-{
- while (mc)
- mc = in6_multientry(mc);
-}
-
-#if !defined(__NetBSD__) && !(defined(__FreeBSD__) && __FreeBSD__ >= 3) && !defined(__OpenBSD__)
-static char *
-ether_ntoa(e)
- struct ether_addr *e;
-{
- static char buf[20];
- u_char *p;
-
- p = (u_char *)e;
-
- snprintf(buf, sizeof(buf), "%02x:%02x:%02x:%02x:%02x:%02x",
- p[0], p[1], p[2], p[3], p[4], p[5]);
- return buf;
}
-#endif