IPv4 PIM support, from the submission of Pavlin Radoslavov on tech-net@
This commit is contained in:
parent
40c2c137db
commit
753bcaf581
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: inet.c,v 1.61 2004/05/18 14:44:41 itojun Exp $ */
|
||||
/* $NetBSD: inet.c,v 1.62 2004/09/04 23:35:43 manu Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1983, 1988, 1993
|
||||
|
@ -34,7 +34,7 @@
|
|||
#if 0
|
||||
static char sccsid[] = "from: @(#)inet.c 8.4 (Berkeley) 4/20/94";
|
||||
#else
|
||||
__RCSID("$NetBSD: inet.c,v 1.61 2004/05/18 14:44:41 itojun Exp $");
|
||||
__RCSID("$NetBSD: inet.c,v 1.62 2004/09/04 23:35:43 manu Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
|
@ -60,6 +60,7 @@ __RCSID("$NetBSD: inet.c,v 1.61 2004/05/18 14:44:41 itojun Exp $");
|
|||
#include <netinet/icmp_var.h>
|
||||
#include <netinet/igmp_var.h>
|
||||
#include <netinet/ip_var.h>
|
||||
#include <netinet/pim_var.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <netinet/tcpip.h>
|
||||
#include <netinet/tcp_seq.h>
|
||||
|
@ -514,6 +515,45 @@ igmp_stats(off, name)
|
|||
#undef py
|
||||
}
|
||||
|
||||
/*
|
||||
* Dump PIM statistics structure.
|
||||
*/
|
||||
void
|
||||
pim_stats(off, name)
|
||||
u_long off;
|
||||
char *name;
|
||||
{
|
||||
struct pimstat pimstat;
|
||||
|
||||
if (off == 0)
|
||||
return;
|
||||
if (kread(off, (char *)&pimstat, sizeof (pimstat)) != 0) {
|
||||
/* XXX: PIM is probably not enabled in the kernel */
|
||||
return;
|
||||
}
|
||||
|
||||
printf("%s:\n", name);
|
||||
|
||||
#define p(f, m) if (pimstat.f || sflag <= 1) \
|
||||
printf(m, pimstat.f, plural(pimstat.f))
|
||||
#define py(f, m) if (pimstat.f || sflag <= 1) \
|
||||
printf(m, pimstat.f, pimstat.f != 1 ? "ies" : "y")
|
||||
|
||||
p(pims_rcv_total_msgs, "\t%llu message%s received\n");
|
||||
p(pims_rcv_total_bytes, "\t%llu byte%s received\n");
|
||||
p(pims_rcv_tooshort, "\t%llu message%s received with too few bytes\n");
|
||||
p(pims_rcv_badsum, "\t%llu message%s received with bad checksum\n");
|
||||
p(pims_rcv_badversion, "\t%llu message%s received with bad version\n");
|
||||
p(pims_rcv_registers_msgs, "\t%llu data register message%s received\n");
|
||||
p(pims_rcv_registers_bytes, "\t%llu data register byte%s received\n");
|
||||
p(pims_rcv_registers_wrongiif, "\t%llu data register message%s received on wrong iif\n");
|
||||
p(pims_rcv_badregisters, "\t%llu bad register%s received\n");
|
||||
p(pims_snd_registers_msgs, "\t%llu data register message%s sent\n");
|
||||
p(pims_snd_registers_bytes, "\t%llu data register byte%s sent\n");
|
||||
#undef p
|
||||
#undef py
|
||||
}
|
||||
|
||||
/*
|
||||
* Dump the ARP statistics structure.
|
||||
*/
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: main.c,v 1.46 2004/06/27 01:10:54 jonathan Exp $ */
|
||||
/* $NetBSD: main.c,v 1.47 2004/09/04 23:35:43 manu Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1983, 1988, 1993
|
||||
|
@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 1988, 1993\n\
|
|||
#if 0
|
||||
static char sccsid[] = "from: @(#)main.c 8.4 (Berkeley) 3/1/94";
|
||||
#else
|
||||
__RCSID("$NetBSD: main.c,v 1.46 2004/06/27 01:10:54 jonathan Exp $");
|
||||
__RCSID("$NetBSD: main.c,v 1.47 2004/09/04 23:35:43 manu Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
|
@ -202,6 +202,8 @@ struct nlist nl[] = {
|
|||
{ "_pkintrq" },
|
||||
#define N_HARDCLOCK_TICKS 67
|
||||
{ "_hardclock_ticks" },
|
||||
#define N_PIMSTAT 68
|
||||
{ "_pimstat" },
|
||||
{ "" },
|
||||
};
|
||||
|
||||
|
@ -233,6 +235,8 @@ struct protox {
|
|||
{ -1, N_IPSECSTAT, 1, 0,
|
||||
ipsec_switch, NULL, 0, "ipsec" },
|
||||
#endif
|
||||
{ -1, N_PIMSTAT, 1, 0,
|
||||
pim_stats, NULL, 0, "pim" },
|
||||
{ -1, -1, 0, 0,
|
||||
0, NULL, 0, 0 }
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: mroute.c,v 1.17 2003/08/07 11:15:21 agc Exp $ */
|
||||
/* $NetBSD: mroute.c,v 1.18 2004/09/04 23:35:43 manu Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -76,12 +76,12 @@
|
|||
#if 0
|
||||
static char sccsid[] = "from: @(#)mroute.c 8.1 (Berkeley) 6/6/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: mroute.c,v 1.17 2003/08/07 11:15:21 agc Exp $");
|
||||
__RCSID("$NetBSD: mroute.c,v 1.18 2004/09/04 23:35:43 manu Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
* Print DVMRP multicast routing structures and statistics.
|
||||
* Print multicast routing structures and statistics.
|
||||
*
|
||||
* MROUTING 1.0
|
||||
*/
|
||||
|
@ -104,6 +104,7 @@ __RCSID("$NetBSD: mroute.c,v 1.17 2003/08/07 11:15:21 agc Exp $");
|
|||
#include "netstat.h"
|
||||
|
||||
static char *pktscale __P((u_long));
|
||||
static void print_bw_meter __P((struct bw_meter *, int *));
|
||||
|
||||
static char *
|
||||
pktscale(n)
|
||||
|
@ -232,6 +233,27 @@ mroutepr(mrpaddr, mfchashtbladdr, mfchashaddr, vifaddr)
|
|||
printf(" %u/%u", vifi, mfc.mfc_ttls[vifi]);
|
||||
|
||||
printf("\n");
|
||||
|
||||
/* Print the bw meter information */
|
||||
{
|
||||
struct bw_meter bw_meter, *bwm;
|
||||
int banner_printed2 = 0;
|
||||
|
||||
bwm = mfc.mfc_bw_meter;
|
||||
while (bwm) {
|
||||
kread((u_long)bwm,
|
||||
(char *)&bw_meter,
|
||||
sizeof bw_meter);
|
||||
print_bw_meter(&bw_meter,
|
||||
&banner_printed2);
|
||||
bwm = bw_meter.bm_mfc_next;
|
||||
}
|
||||
#if 0 /* Don't ever print it? */
|
||||
if (! banner_printed2)
|
||||
printf("\n No Bandwidth Meters\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
nmfc++;
|
||||
}
|
||||
}
|
||||
|
@ -244,6 +266,79 @@ mroutepr(mrpaddr, mfchashtbladdr, mfchashaddr, vifaddr)
|
|||
numeric_addr = saved_numeric_addr;
|
||||
}
|
||||
|
||||
static void
|
||||
print_bw_meter(bw_meter, banner_printed)
|
||||
struct bw_meter *bw_meter;
|
||||
int *banner_printed;
|
||||
{
|
||||
char s0[256], s1[256], s2[256], s3[256];
|
||||
struct timeval now, end, delta;
|
||||
|
||||
gettimeofday(&now, NULL);
|
||||
|
||||
if (! *banner_printed) {
|
||||
printf(" Bandwidth Meters\n");
|
||||
printf(" %-30s", "Measured(Start|Packets|Bytes)");
|
||||
printf(" %s", "Type");
|
||||
printf(" %-30s", "Thresh(Interval|Packets|Bytes)");
|
||||
printf(" Remain");
|
||||
printf("\n");
|
||||
*banner_printed = 1;
|
||||
}
|
||||
|
||||
/* The measured values */
|
||||
if (bw_meter->bm_flags & BW_METER_UNIT_PACKETS)
|
||||
sprintf(s1, "%llu", bw_meter->bm_measured.b_packets);
|
||||
else
|
||||
sprintf(s1, "?");
|
||||
if (bw_meter->bm_flags & BW_METER_UNIT_BYTES)
|
||||
sprintf(s2, "%llu", bw_meter->bm_measured.b_bytes);
|
||||
else
|
||||
sprintf(s2, "?");
|
||||
sprintf(s0, "%lu.%lu|%s|%s",
|
||||
bw_meter->bm_start_time.tv_sec,
|
||||
bw_meter->bm_start_time.tv_usec,
|
||||
s1, s2);
|
||||
printf(" %-30s", s0);
|
||||
|
||||
/* The type of entry */
|
||||
sprintf(s0, "%s", "?");
|
||||
if (bw_meter->bm_flags & BW_METER_GEQ)
|
||||
sprintf(s0, "%s", ">=");
|
||||
else if (bw_meter->bm_flags & BW_METER_LEQ)
|
||||
sprintf(s0, "%s", "<=");
|
||||
printf(" %-3s", s0);
|
||||
|
||||
/* The threshold values */
|
||||
if (bw_meter->bm_flags & BW_METER_UNIT_PACKETS)
|
||||
sprintf(s1, "%llu", bw_meter->bm_threshold.b_packets);
|
||||
else
|
||||
sprintf(s1, "?");
|
||||
if (bw_meter->bm_flags & BW_METER_UNIT_BYTES)
|
||||
sprintf(s2, "%llu", bw_meter->bm_threshold.b_bytes);
|
||||
else
|
||||
sprintf(s2, "?");
|
||||
sprintf(s0, "%lu.%lu|%s|%s",
|
||||
bw_meter->bm_threshold.b_time.tv_sec,
|
||||
bw_meter->bm_threshold.b_time.tv_usec,
|
||||
s1, s2);
|
||||
printf(" %-30s", s0);
|
||||
|
||||
/* Remaining time */
|
||||
timeradd(&bw_meter->bm_start_time,
|
||||
&bw_meter->bm_threshold.b_time, &end);
|
||||
if (timercmp(&now, &end, <=)) {
|
||||
timersub(&end, &now, &delta);
|
||||
sprintf(s3, "%lu.%lu", delta.tv_sec, delta.tv_usec);
|
||||
} else {
|
||||
/* Negative time */
|
||||
timersub(&now, &end, &delta);
|
||||
sprintf(s3, "-%lu.%lu", delta.tv_sec, delta.tv_usec);
|
||||
}
|
||||
printf(" %s", s3);
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void
|
||||
mrt_stats(mrpaddr, mstaddr)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: netstat.h,v 1.29 2004/05/07 00:55:15 jonathan Exp $ */
|
||||
/* $NetBSD: netstat.h,v 1.30 2004/09/04 23:35:43 manu Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -74,6 +74,7 @@ void udp_stats __P((u_long, char *));
|
|||
void ip_stats __P((u_long, char *));
|
||||
void icmp_stats __P((u_long, char *));
|
||||
void igmp_stats __P((u_long, char *));
|
||||
void pim_stats __P((u_long, char *));
|
||||
void arp_stats __P((u_long, char *));
|
||||
#ifdef IPSEC
|
||||
/* run-time selector for which implementation (KAME, FAST_IPSEC) to show */
|
||||
|
|
Loading…
Reference in New Issue