Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/netstat Update for new pcb tailq's.
details: https://anonhg.NetBSD.org/src/rev/40a1e55dc1b8
branches: trunk
changeset: 791570:40a1e55dc1b8
user: christos <christos%NetBSD.org@localhost>
date: Sat Nov 23 22:01:12 2013 +0000
description:
Update for new pcb tailq's.
While here fix ipv6 pcb printing by making tcp6_dump with tcp.
XXX: Merge the inet and the inet6 code. It is silly to need to specify
-p tcp6 to print a tcp6 pcb, we already know what it is.
diffstat:
usr.bin/netstat/inet.c | 23 +++----
usr.bin/netstat/inet6.c | 124 +++++++++++++++++++++++++--------------------
usr.bin/netstat/main.c | 6 +-
usr.bin/netstat/netstat.h | 4 +-
4 files changed, 84 insertions(+), 73 deletions(-)
diffs (truncated from 336 to 300 lines):
diff -r f57adbd7a8fa -r 40a1e55dc1b8 usr.bin/netstat/inet.c
--- a/usr.bin/netstat/inet.c Sat Nov 23 21:53:27 2013 +0000
+++ b/usr.bin/netstat/inet.c Sat Nov 23 22:01:12 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: inet.c,v 1.103 2013/06/20 10:43:18 martin Exp $ */
+/* $NetBSD: inet.c,v 1.104 2013/11/23 22:01:12 christos 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.103 2013/06/20 10:43:18 martin Exp $");
+__RCSID("$NetBSD: inet.c,v 1.104 2013/11/23 22:01:12 christos Exp $");
#endif
#endif /* not lint */
@@ -265,7 +265,7 @@
static struct kinfo_pcb *
getpcblist_kmem(u_long off, const char *name, size_t *len) {
struct inpcbtable table;
- struct inpcb *head, *next, *prev;
+ struct inpcb_hdr *next, *prev;
struct inpcb inpcb;
struct tcpcb tcpcb;
struct socket sockb;
@@ -273,6 +273,7 @@
struct kinfo_pcb *pcblist;
size_t size = 100, i;
struct sockaddr_in sin;
+ struct inpcbqueue *head;
if (off == 0) {
*len = 0;
@@ -280,22 +281,18 @@
}
kread(off, (char *)&table, sizeof table);
- prev = head =
- (struct inpcb *)&((struct inpcbtable *)off)->inpt_queue.cqh_first;
- next = (struct inpcb *)table.inpt_queue.cqh_first;
+ head = &table.inpt_queue;
+ next = TAILQ_FIRST(head);
+ prev = TAILQ_END(head);
if ((pcblist = malloc(size)) == NULL)
err(1, "malloc");
i = 0;
- while (next != head) {
+ while (next != TAILQ_END(head)) {
kread((u_long)next, (char *)&inpcb, sizeof inpcb);
- if ((struct inpcb *)inpcb.inp_queue.cqe_prev != prev) {
- warnx("bad pcb");
- break;
- }
prev = next;
- next = (struct inpcb *)inpcb.inp_queue.cqe_next;
+ next = TAILQ_NEXT(&inpcb, inp_queue);
if (inpcb.inp_af != AF_INET)
continue;
@@ -305,7 +302,7 @@
kread((u_long)inpcb.inp_ppcb,
(char *)&tcpcb, sizeof (tcpcb));
}
- pcblist[i].ki_ppcbaddr =
+ pcblist[i].ki_ppcbaddr =
istcp ? (uintptr_t) inpcb.inp_ppcb : (uintptr_t) prev;
pcblist[i].ki_rcvq = (uint64_t)sockb.so_rcv.sb_cc;
pcblist[i].ki_sndq = (uint64_t)sockb.so_snd.sb_cc;
diff -r f57adbd7a8fa -r 40a1e55dc1b8 usr.bin/netstat/inet6.c
--- a/usr.bin/netstat/inet6.c Sat Nov 23 21:53:27 2013 +0000
+++ b/usr.bin/netstat/inet6.c Sat Nov 23 22:01:12 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: inet6.c,v 1.65 2013/10/19 15:56:06 christos Exp $ */
+/* $NetBSD: inet6.c,v 1.66 2013/11/23 22:01:12 christos Exp $ */
/* BSDI inet.c,v 2.3 1995/10/24 02:19:29 prb Exp */
/*
@@ -64,10 +64,12 @@
#if 0
static char sccsid[] = "@(#)inet.c 8.4 (Berkeley) 4/20/94";
#else
-__RCSID("$NetBSD: inet6.c,v 1.65 2013/10/19 15:56:06 christos Exp $");
+__RCSID("$NetBSD: inet6.c,v 1.66 2013/11/23 22:01:12 christos Exp $");
#endif
#endif /* not lint */
+#define _CALLOUT_PRIVATE
+
#include <sys/param.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
@@ -90,22 +92,26 @@
#include <netinet6/in6_pcb.h>
#include <netinet6/in6_var.h>
#ifdef TCP6
-#include <netinet6/tcp6.h>
-#include <netinet6/tcp6_seq.h>
+#include <netinet/tcp6.h>
+#include <netinet/tcp6_seq.h>
#define TCP6STATES
-#include <netinet6/tcp6_fsm.h>
+#include <netinet/tcp6_fsm.h>
#define TCP6TIMERS
-#include <netinet6/tcp6_timer.h>
-#include <netinet6/tcp6_var.h>
-#include <netinet6/tcp6_debug.h>
+#include <netinet/tcp6_timer.h>
+#include <netinet/tcp6_var.h>
+#include <netinet/tcp6_debug.h>
#else
+#define TCP6T_NTIMERS TCPT_NTIMERS
+#define tcp6timers tcptimers
+#define tcp6states tcpstates
+#define TCP6_NSTATES TCP_NSTATES
+#define tcp6cb tcpcb
#include <netinet/tcp.h>
#include <netinet/tcpip.h>
#include <netinet/tcp_seq.h>
-/*#define TCPSTATES*/
#include <netinet/tcp_fsm.h>
extern const char * const tcpstates[];
-/*#define TCPTIMERS*/
+extern const char * const tcptimers[];
#include <netinet/tcp_timer.h>
#include <netinet/tcp_var.h>
#include <netinet/tcp_debug.h>
@@ -280,33 +286,30 @@
getpcblist_kmem(u_long off, const char *name, size_t *len) {
struct inpcbtable table;
- struct in6pcb *head, *prev, *next;
+ struct inpcb_hdr *next, *prev;
int istcp = strcmp(name, "tcp6") == 0;
struct kinfo_pcb *pcblist;
size_t size = 100, i;
struct sockaddr_in6 sin6;
+ struct inpcbqueue *head;
if (off == 0) {
*len = 0;
return NULL;
}
kread(off, (char *)&table, sizeof (table));
- head = prev =
- (struct in6pcb *)&((struct inpcbtable *)off)->inpt_queue.cqh_first;
- next = (struct in6pcb *)table.inpt_queue.cqh_first;
+ head = &table.inpt_queue;
+ next = TAILQ_FIRST(head);
+ prev = TAILQ_END(head);
if ((pcblist = malloc(size)) == NULL)
err(1, "malloc");
i = 0;
- while (next != head) {
+ while (next != TAILQ_END(head)) {
kread((u_long)next, (char *)&in6pcb, sizeof in6pcb);
- if ((struct in6pcb *)in6pcb.in6p_queue.cqe_prev != prev) {
- warnx("bad pcb");
- break;
- }
+ next = TAILQ_NEXT(&in6pcb, in6p_queue);
prev = next;
- next = (struct in6pcb *)in6pcb.in6p_queue.cqe_next;
if (in6pcb.in6p_af != AF_INET6)
continue;
@@ -1430,17 +1433,20 @@
return (line);
}
-#ifdef TCP6
/*
* Dump the contents of a TCP6 PCB.
*/
void
-tcp6_dump(u_long pcbaddr)
- u_long pcbaddr;
+tcp6_dump(u_long off, const char *name, u_long pcbaddr)
{
- struct tcp6cb tcp6cb;
- int i;
+ callout_impl_t *ci;
+ int i, hardticks;
struct kinfo_pcb *pcblist;
+#ifdef TCP6
+#define mypcb tcp6cb
+#else
+#define mypcb tcpcb
+#endif
size_t j, len;
if (use_sysctl)
@@ -1456,55 +1462,63 @@
if (j == len)
errx(1, "0x%lx is not a valid pcb address", pcbaddr);
- kread(pcbaddr, (char *)&tcp6cb, sizeof(tcp6cb));
+ kread(pcbaddr, (char *)&mypcb, sizeof(mypcb));
+ hardticks = get_hardticks();
printf("TCP Protocol Control Block at 0x%08lx:\n\n", pcbaddr);
-
printf("Timers:\n");
- for (i = 0; i < TCP6T_NTIMERS; i++)
- printf("\t%s: %u", tcp6timers[i], tcp6cb.t_timer[i]);
+ for (i = 0; i < TCP6T_NTIMERS; i++) {
+ ci = (callout_impl_t *)&tcpcb.t_timer[i];
+ printf("\t%s: %d", tcptimers[i],
+ (ci->c_flags & CALLOUT_PENDING) ?
+ ci->c_time - hardticks : 0);
+ }
printf("\n\n");
- if (tcp6cb.t_state < 0 || tcp6cb.t_state >= TCP6_NSTATES)
- printf("State: %d", tcp6cb.t_state);
+ if (mypcb.t_state < 0 || mypcb.t_state >= TCP6_NSTATES)
+ printf("State: %d", mypcb.t_state);
else
- printf("State: %s", tcp6states[tcp6cb.t_state]);
- printf(", flags 0x%x, in6pcb 0x%lx\n\n", tcp6cb.t_flags,
- (u_long)tcp6cb.t_in6pcb);
+ printf("State: %s", tcp6states[mypcb.t_state]);
+ printf(", flags 0x%x, in6pcb 0x%lx\n\n", mypcb.t_flags,
+ (u_long)mypcb.t_in6pcb);
- printf("rxtshift %d, rxtcur %d, dupacks %d\n", tcp6cb.t_rxtshift,
- tcp6cb.t_rxtcur, tcp6cb.t_dupacks);
- printf("peermaxseg %u, maxseg %u, force %d\n\n", tcp6cb.t_peermaxseg,
- tcp6cb.t_maxseg, tcp6cb.t_force);
+ printf("rxtshift %d, rxtcur %d, dupacks %d\n", mypcb.t_rxtshift,
+ mypcb.t_rxtcur, mypcb.t_dupacks);
+#ifdef TCP6
+ printf("peermaxseg %u, maxseg %u, force %d\n\n", mypcb.t_peermaxseg,
+ mypcb.t_maxseg, mypcb.t_force);
+#endif
printf("snd_una %u, snd_nxt %u, snd_up %u\n",
- tcp6cb.snd_una, tcp6cb.snd_nxt, tcp6cb.snd_up);
+ mypcb.snd_una, mypcb.snd_nxt, mypcb.snd_up);
printf("snd_wl1 %u, snd_wl2 %u, iss %u, snd_wnd %llu\n\n",
- tcp6cb.snd_wl1, tcp6cb.snd_wl2, tcp6cb.iss,
- (unsigned long long)tcp6cb.snd_wnd);
+ mypcb.snd_wl1, mypcb.snd_wl2, mypcb.iss,
+ (unsigned long long)mypcb.snd_wnd);
printf("rcv_wnd %llu, rcv_nxt %u, rcv_up %u, irs %u\n\n",
- (unsigned long long)cp6cb.rcv_wnd, tcp6cb.rcv_nxt,
- tcp6cb.rcv_up, tcp6cb.irs);
+ (unsigned long long)mypcb.rcv_wnd, mypcb.rcv_nxt,
+ mypcb.rcv_up, mypcb.irs);
printf("rcv_adv %u, snd_max %u, snd_cwnd %llu, snd_ssthresh %llu\n",
- tcp6cb.rcv_adv, tcp6cb.snd_max, (unsigned long long)tcp6cb.snd_cwnd,
- (unsigned long long)tcp6cb.snd_ssthresh);
+ mypcb.rcv_adv, mypcb.snd_max, (unsigned long long)mypcb.snd_cwnd,
+ (unsigned long long)mypcb.snd_ssthresh);
- printf("idle %d, rtt %d, rtseq %u, srtt %d, rttvar %d, rttmin %d, "
- "max_sndwnd %llu\n\n", tcp6cb.t_idle, tcp6cb.t_rtt, tcp6cb.t_rtseq,
- tcp6cb.t_srtt, tcp6cb.t_rttvar, tcp6cb.t_rttmin,
- (unsigned long long)tcp6cb.max_sndwnd);
+#ifdef TCP6
+ printf("idle %d, rtt %d, " mypcb.t_idle, mypcb.t_rtt)
+#endif
+ printf("rtseq %u, srtt %d, rttvar %d, rttmin %d, "
+ "max_sndwnd %llu\n\n", mypcb.t_rtseq,
+ mypcb.t_srtt, mypcb.t_rttvar, mypcb.t_rttmin,
+ (unsigned long long)mypcb.max_sndwnd);
- printf("oobflags %d, iobc %d, softerror %d\n\n", tcp6cb.t_oobflags,
- tcp6cb.t_iobc, tcp6cb.t_softerror);
+ printf("oobflags %d, iobc %d, softerror %d\n\n", mypcb.t_oobflags,
+ mypcb.t_iobc, mypcb.t_softerror);
printf("snd_scale %d, rcv_scale %d, req_r_scale %d, req_s_scale %d\n",
- tcp6cb.snd_scale, tcp6cb.rcv_scale, tcp6cb.request_r_scale,
- tcp6cb.requested_s_scale);
+ mypcb.snd_scale, mypcb.rcv_scale, mypcb.request_r_scale,
+ mypcb.requested_s_scale);
printf("ts_recent %u, ts_regent_age %d, last_ack_sent %u\n",
- tcp6cb.ts_recent, tcp6cb.ts_recent_age, tcp6cb.last_ack_sent);
+ mypcb.ts_recent, mypcb.ts_recent_age, mypcb.last_ack_sent);
}
-#endif
#endif /*INET6*/
diff -r f57adbd7a8fa -r 40a1e55dc1b8 usr.bin/netstat/main.c
--- a/usr.bin/netstat/main.c Sat Nov 23 21:53:27 2013 +0000
+++ b/usr.bin/netstat/main.c Sat Nov 23 22:01:12 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.87 2013/10/18 22:18:14 bad Exp $ */
+/* $NetBSD: main.c,v 1.88 2013/11/23 22:01:12 christos Exp $ */
/*
* Copyright (c) 1983, 1988, 1993
Home |
Main Index |
Thread Index |
Old Index