key_debug.c

来自「eCos操作系统源码」· C语言 代码 · 共 763 行 · 第 1/2 页

C
763
字号
	ipsec_hexdump((caddr_t)key + sizeof(struct sadb_key),	              key->sadb_key_bits >> 3);	printf(" }\n");	return;}static voidkdebug_sadb_x_sa2(ext)	struct sadb_ext *ext;{	struct sadb_x_sa2 *sa2 = (struct sadb_x_sa2 *)ext;	/* sanity check */	if (ext == NULL)		panic("kdebug_sadb_x_sa2: NULL pointer was passed.\n");	printf("sadb_x_sa2{ mode=%u reqid=%u\n",	    sa2->sadb_x_sa2_mode, sa2->sadb_x_sa2_reqid);	printf("  reserved1=%u reserved2=%u sequence=%u }\n",	    sa2->sadb_x_sa2_reserved1, sa2->sadb_x_sa2_reserved2,	    sa2->sadb_x_sa2_sequence);	return;}voidkdebug_sadb_x_policy(ext)	struct sadb_ext *ext;{	struct sadb_x_policy *xpl = (struct sadb_x_policy *)ext;	struct sockaddr *addr;	/* sanity check */	if (ext == NULL)		panic("kdebug_sadb_x_policy: NULL pointer was passed.\n");	printf("sadb_x_policy{ type=%u dir=%u id=%x }\n",		xpl->sadb_x_policy_type, xpl->sadb_x_policy_dir,		xpl->sadb_x_policy_id);	if (xpl->sadb_x_policy_type == IPSEC_POLICY_IPSEC) {		int tlen;		struct sadb_x_ipsecrequest *xisr;		tlen = PFKEY_UNUNIT64(xpl->sadb_x_policy_len) - sizeof(*xpl);		xisr = (struct sadb_x_ipsecrequest *)(xpl + 1);		while (tlen > 0) {			printf(" { len=%u proto=%u mode=%u level=%u reqid=%u\n",				xisr->sadb_x_ipsecrequest_len,				xisr->sadb_x_ipsecrequest_proto,				xisr->sadb_x_ipsecrequest_mode,				xisr->sadb_x_ipsecrequest_level,				xisr->sadb_x_ipsecrequest_reqid);			if (xisr->sadb_x_ipsecrequest_len > sizeof(*xisr)) {				addr = (struct sockaddr *)(xisr + 1);				kdebug_sockaddr(addr);				addr = (struct sockaddr *)((caddr_t)addr							+ addr->sa_len);				kdebug_sockaddr(addr);			}			printf(" }\n");			/* prevent infinite loop */			if (xisr->sadb_x_ipsecrequest_len <= 0) {				printf("kdebug_sadb_x_policy: wrong policy struct.\n");				return;			}			/* prevent overflow */			if (xisr->sadb_x_ipsecrequest_len > tlen) {				printf("invalid ipsec policy length\n");				return;			}			tlen -= xisr->sadb_x_ipsecrequest_len;			xisr = (struct sadb_x_ipsecrequest *)((caddr_t)xisr			                + xisr->sadb_x_ipsecrequest_len);		}		if (tlen != 0)			panic("kdebug_sadb_x_policy: wrong policy struct.\n");	}	return;}#ifdef _KERNEL/* %%%: about SPD and SAD */voidkdebug_secpolicy(sp)	struct secpolicy *sp;{	/* sanity check */	if (sp == NULL)		panic("kdebug_secpolicy: NULL pointer was passed.\n");	printf("secpolicy{ refcnt=%u state=%u policy=%u\n",		sp->refcnt, sp->state, sp->policy);	kdebug_secpolicyindex(&sp->spidx);	switch (sp->policy) {	case IPSEC_POLICY_DISCARD:		printf("  type=discard }\n");		break;	case IPSEC_POLICY_NONE:		printf("  type=none }\n");		break;	case IPSEC_POLICY_IPSEC:	    {		struct ipsecrequest *isr;		for (isr = sp->req; isr != NULL; isr = isr->next) {			printf("  level=%u\n", isr->level);			kdebug_secasindex(&isr->saidx);			if (isr->sav != NULL)				kdebug_secasv(isr->sav);		}		printf("  }\n");	    }		break;	case IPSEC_POLICY_BYPASS:		printf("  type=bypass }\n");		break;	case IPSEC_POLICY_ENTRUST:		printf("  type=entrust }\n");		break;	default:		printf("kdebug_secpolicy: Invalid policy found. %d\n",			sp->policy);		break;	}	return;}voidkdebug_secpolicyindex(spidx)	struct secpolicyindex *spidx;{	/* sanity check */	if (spidx == NULL)		panic("kdebug_secpolicyindex: NULL pointer was passed.\n");	printf("secpolicyindex{ dir=%u prefs=%u prefd=%u ul_proto=%u\n",		spidx->dir, spidx->prefs, spidx->prefd, spidx->ul_proto);	ipsec_hexdump((caddr_t)&spidx->src,		((struct sockaddr *)&spidx->src)->sa_len);	printf("\n");	ipsec_hexdump((caddr_t)&spidx->dst,		((struct sockaddr *)&spidx->dst)->sa_len);	printf("}\n");	return;}voidkdebug_secasindex(saidx)	struct secasindex *saidx;{	/* sanity check */	if (saidx == NULL)		panic("kdebug_secpolicyindex: NULL pointer was passed.\n");	printf("secasindex{ mode=%u proto=%u\n",		saidx->mode, saidx->proto);	ipsec_hexdump((caddr_t)&saidx->src,		((struct sockaddr *)&saidx->src)->sa_len);	printf("\n");	ipsec_hexdump((caddr_t)&saidx->dst,		((struct sockaddr *)&saidx->dst)->sa_len);	printf("\n");	return;}voidkdebug_secasv(sav)	struct secasvar *sav;{	/* sanity check */	if (sav == NULL)		panic("kdebug_secasv: NULL pointer was passed.\n");	printf("secas{");	kdebug_secasindex(&sav->sah->saidx);	printf("  refcnt=%u state=%u auth=%u enc=%u\n",	    sav->refcnt, sav->state, sav->alg_auth, sav->alg_enc);	printf("  spi=%u flags=%u\n",	    (u_int32_t)ntohl(sav->spi), sav->flags);	if (sav->key_auth != NULL)		kdebug_sadb_key((struct sadb_ext *)sav->key_auth);	if (sav->key_enc != NULL)		kdebug_sadb_key((struct sadb_ext *)sav->key_enc);	if (sav->iv != NULL) {		printf("  iv=");		ipsec_hexdump(sav->iv, sav->ivlen ? sav->ivlen : 8);		printf("\n");	}	if (sav->replay != NULL)		kdebug_secreplay(sav->replay);	if (sav->lft_c != NULL)		kdebug_sadb_lifetime((struct sadb_ext *)sav->lft_c);	if (sav->lft_h != NULL)		kdebug_sadb_lifetime((struct sadb_ext *)sav->lft_h);	if (sav->lft_s != NULL)		kdebug_sadb_lifetime((struct sadb_ext *)sav->lft_s);#if defined (notyet)	/* XXX: misc[123] ? */#endif	return;}static voidkdebug_secreplay(rpl)	struct secreplay *rpl;{	int len, l;	/* sanity check */	if (rpl == NULL)		panic("kdebug_secreplay: NULL pointer was passed.\n");	printf(" secreplay{ count=%u wsize=%u seq=%u lastseq=%u",	    rpl->count, rpl->wsize, rpl->seq, rpl->lastseq);	if (rpl->bitmap == NULL) {		printf(" }\n");		return;	}	printf("\n   bitmap { ");	for (len = 0; len < rpl->wsize; len++) {		for (l = 7; l >= 0; l--)			printf("%u", (((rpl->bitmap)[len] >> l) & 1) ? 1 : 0);	}	printf(" }\n");	return;}voidkdebug_mbufhdr(m)	struct mbuf *m;{	/* sanity check */	if (m == NULL)		return;	printf("mbuf(%p){ m_next:%p m_nextpkt:%p m_data:%p "	       "m_len:%d m_type:0x%02x m_flags:0x%02x }\n",		m, m->m_next, m->m_nextpkt, m->m_data,		m->m_len, m->m_type, m->m_flags);	if (m->m_flags & M_PKTHDR) {		printf("  m_pkthdr{ len:%d rcvif:%p }\n",		    m->m_pkthdr.len, m->m_pkthdr.rcvif);	}#ifdef __FreeBSD__	if (m->m_flags & M_EXT) {		printf("  m_ext{ ext_buf:%p ext_free:%p "		       "ext_size:%u ext_ref:%p }\n",			m->m_ext.ext_buf, m->m_ext.ext_free,			m->m_ext.ext_size, m->m_ext.ext_ref);	}#endif	return;}voidkdebug_mbuf(m0)	struct mbuf *m0;{	struct mbuf *m = m0;	int i, j;	for (j = 0; m; m = m->m_next) {		kdebug_mbufhdr(m);		printf("  m_data:\n");		for (i = 0; i < m->m_len; i++) {			if (i && i % 32 == 0)				printf("\n");			if (i % 4 == 0)				printf(" ");			printf("%02x", mtod(m, u_char *)[i]);			j++;		}		printf("\n");	}	return;}#endif /* _KERNEL */voidkdebug_sockaddr(addr)	struct sockaddr *addr;{	struct sockaddr_in *sin4;#ifdef INET6	struct sockaddr_in6 *sin6;#endif	/* sanity check */	if (addr == NULL)		panic("kdebug_sockaddr: NULL pointer was passed.\n");	/* NOTE: We deal with port number as host byte order. */	printf("sockaddr{ len=%u family=%u", addr->sa_len, addr->sa_family);	switch (addr->sa_family) {	case AF_INET:		sin4 = (struct sockaddr_in *)addr;		printf(" port=%u\n", ntohs(sin4->sin_port));		ipsec_hexdump((caddr_t)&sin4->sin_addr, sizeof(sin4->sin_addr));		break;#ifdef INET6	case AF_INET6:		sin6 = (struct sockaddr_in6 *)addr;		printf(" port=%u\n", ntohs(sin6->sin6_port));		printf("  flowinfo=0x%08x, scope_id=0x%08x\n",		    sin6->sin6_flowinfo, sin6->sin6_scope_id);		ipsec_hexdump((caddr_t)&sin6->sin6_addr,		    sizeof(sin6->sin6_addr));		break;#endif	}	printf("  }\n");	return;}voidipsec_bindump(buf, len)	caddr_t buf;	int len;{	int i;	for (i = 0; i < len; i++)		printf("%c", (unsigned char)buf[i]);	return;}voidipsec_hexdump(buf, len)	caddr_t buf;	int len;{	int i;	for (i = 0; i < len; i++) {		if (i != 0 && i % 32 == 0) printf("\n");		if (i % 4 == 0) printf(" ");		printf("%02x", (unsigned char)buf[i]);	}#if 0	if (i % 32 != 0) printf("\n");#endif	return;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?