summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/netinet6/debug_inet6.c121
-rw-r--r--sys/netinet6/debug_inet6.h25
2 files changed, 146 insertions, 0 deletions
diff --git a/sys/netinet6/debug_inet6.c b/sys/netinet6/debug_inet6.c
new file mode 100644
index 00000000000..e90b090c50d
--- /dev/null
+++ b/sys/netinet6/debug_inet6.c
@@ -0,0 +1,121 @@
+/*
+%%% copyright-nrl-95
+This software is Copyright 1995-1998 by Randall Atkinson, Ronald Lee,
+Daniel McDonald, Bao Phan, and Chris Winters. All Rights Reserved. All
+rights under this copyright have been assigned to the US Naval Research
+Laboratory (NRL). The NRL Copyright Notice and License Agreement Version
+1.1 (January 17, 1995) applies to this software.
+You should have received a copy of the license with this software. If you
+didn't get a copy, you may request one from <license@ipv6.nrl.navy.mil>.
+
+*/
+
+#include <sys/osdep.h>
+
+#ifdef OSDEP_BSD
+#include <netinet6/ipv6.h>
+#include <netinet6/ipv6_icmp.h>
+#endif /* OSDEP_BSD */
+
+#include <sys/debug.h>
+
+/*
+ * Globals
+ */
+
+/*----------------------------------------------------------------------
+ * Dump an IPv6 address. Don't compress 0's out because of debugging.
+ ----------------------------------------------------------------------*/
+void dump_in6_addr(struct in6_addr *in6_addr)
+{
+ uint16_t *p = (uint16_t *)in6_addr;
+ int i = 0;
+
+ if (!in6_addr) {
+ printf("Dereference a NULL in6_addr? I don't think so.\n");
+ return;
+ }
+
+ while (i++ < 7)
+ printf("%04x:", ntohs(*(p++)));
+ printf("%04x\n", ntohs(*p));
+}
+
+/*----------------------------------------------------------------------
+ * Dump an IPv6 socket address.
+ ----------------------------------------------------------------------*/
+void dump_sockaddr_in6(struct sockaddr_in6 *sin6)
+{
+ printf("sockaddr_in6 at %08x: ", OSDEP_PCAST(sin6));
+ if (!sin6)
+ goto ret;
+
+#if OSDEP_SALEN
+ printf("len=%d, ", sin6->sin6_len);
+#endif /* OSDEP_SALEN */
+ printf("family=%d, port=%d, flowinfo=%lx, addr=", sin6->sin6_family, ntohs(sin6->sin6_port), (unsigned long)ntohl(sin6->sin6_flowinfo));
+ dump_in6_addr(&sin6->sin6_addr);
+
+ret:
+ printf("\n");
+};
+
+#ifdef OSDEP_BSD
+/*----------------------------------------------------------------------
+ * Dump an IPv6 header.
+ ----------------------------------------------------------------------*/
+void dump_ipv6(struct ipv6 *ipv6)
+{
+ if (!ipv6) {
+ printf("Dereference a NULL ipv6? I don't think so.\n");
+ return;
+ }
+
+ printf("Vers & flow label (conv to host order) 0x%x\n",
+ (unsigned int)htonl(ipv6->ipv6_versfl));
+ printf("Length (conv) = %d, nexthdr = %d, hoplimit = %d.\n",
+ htons(ipv6->ipv6_length),ipv6->ipv6_nexthdr,ipv6->ipv6_hoplimit);
+ printf("Src: ");
+ dump_in6_addr(&ipv6->ipv6_src);
+ printf("Dst: ");
+ dump_in6_addr(&ipv6->ipv6_dst);
+}
+
+/*----------------------------------------------------------------------
+ * Dump an ICMPv6 header. This function is not very smart beyond the
+ * type, code, and checksum.
+ ----------------------------------------------------------------------*/
+void dump_ipv6_icmp(struct ipv6_icmp *icp)
+{
+ if (!icp) {
+ printf("Dereference a NULL ipv6_icmp? I don't think so.\n");
+ return;
+ }
+
+ printf("type %d, code %d, cksum (conv) = 0x%x\n",icp->icmp_type,
+ icp->icmp_code,htons(icp->icmp_cksum));
+ printf("First four bytes: 0x%x", (unsigned int)htonl(icp->icmp_unused));
+ printf("Next four bytes: 0x");
+ debug_dump_buf((void *)icp->icmp_echodata, 4);
+ printf("\n");
+}
+
+#ifdef KERNEL
+/*----------------------------------------------------------------------
+ * Dump an IPv6 discovery queue structure.
+ ----------------------------------------------------------------------*/
+void dump_discq(struct discq *dq)
+{
+ if (!dq) {
+ printf("Dereference a NULL discq? I don't think so.\n");
+ return;
+ }
+
+ printf("dq_next = 0x%lx, dq_prev = 0x%lx, dq_rt = 0x%lx,\n", (unsigned long)dq->dq_next,
+ (unsigned long)dq->dq_prev, (unsigned long)dq->dq_rt);
+ printf("dq_queue = 0x%lx.\n", (unsigned long)dq->dq_queue);
+ /* Dump first mbuf chain? */
+ /*printf("dq_expire = %d (0x%x).\n",dq->dq_expire,dq->dq_expire);*/
+}
+#endif /* KERNEL */
+#endif /* OSDEP_BSD */
diff --git a/sys/netinet6/debug_inet6.h b/sys/netinet6/debug_inet6.h
new file mode 100644
index 00000000000..b443db4ef70
--- /dev/null
+++ b/sys/netinet6/debug_inet6.h
@@ -0,0 +1,25 @@
+/*
+%%% copyright-nrl-95
+This software is Copyright 1995-1998 by Randall Atkinson, Ronald Lee,
+Daniel McDonald, Bao Phan, and Chris Winters. All Rights Reserved. All
+rights under this copyright have been assigned to the US Naval Research
+Laboratory (NRL). The NRL Copyright Notice and License Agreement Version
+1.1 (January 17, 1995) applies to this software.
+You should have received a copy of the license with this software. If you
+didn't get a copy, you may request one from <license@ipv6.nrl.navy.mil>.
+
+*/
+#ifndef _NETINET6_DEBUG_INET6_H
+#define _NETINET6_DEBUG_INET6_H 1
+
+struct in6_addr;
+void dump_in6_addr(struct in6_addr *);
+struct sockaddr_in6;
+void dump_sockaddr_in6(struct sockaddr_in6 *);
+struct ipv6;
+void dump_ipv6(struct ipv6 *ipv6);
+struct ipv6_icmp;
+void dump_ipv6_icmp(struct ipv6_icmp *icp);
+struct discq;
+void dump_discq(struct discq *dq);
+#endif /* _NETINET6_DEBUG_INET6_H */