Make debug output produced by setkey -x command a more human readable.

Add text names of SADB message types and extension headers to the output.

Obtained from:	Yandex LLC
MFC after:	2 weeks
Sponsored by:	Yandex LLC
Differential Revision:	https://reviews.freebsd.org/D16036
This commit is contained in:
Andrey V. Elsukov 2018-06-29 13:59:33 +00:00
parent 1aabf3fd5e
commit 52b3619f45
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=335795

View File

@ -85,6 +85,85 @@ static void kdebug_sadb_x_natt(struct sadb_ext *);
/* NOTE: host byte order */
const char*
kdebug_sadb_type(uint8_t type)
{
#define SADB_NAME(n) case SADB_ ## n: return (#n)
switch (type) {
SADB_NAME(RESERVED);
SADB_NAME(GETSPI);
SADB_NAME(UPDATE);
SADB_NAME(ADD);
SADB_NAME(DELETE);
SADB_NAME(GET);
SADB_NAME(ACQUIRE);
SADB_NAME(REGISTER);
SADB_NAME(EXPIRE);
SADB_NAME(FLUSH);
SADB_NAME(DUMP);
SADB_NAME(X_PROMISC);
SADB_NAME(X_PCHANGE);
SADB_NAME(X_SPDUPDATE);
SADB_NAME(X_SPDADD);
SADB_NAME(X_SPDDELETE);
SADB_NAME(X_SPDGET);
SADB_NAME(X_SPDACQUIRE);
SADB_NAME(X_SPDDUMP);
SADB_NAME(X_SPDFLUSH);
SADB_NAME(X_SPDSETIDX);
SADB_NAME(X_SPDEXPIRE);
SADB_NAME(X_SPDDELETE2);
default:
return ("UNKNOWN");
}
#undef SADB_NAME
}
const char*
kdebug_sadb_exttype(uint16_t type)
{
#define EXT_NAME(n) case SADB_EXT_ ## n: return (#n)
#define X_NAME(n) case SADB_X_EXT_ ## n: return (#n)
switch (type) {
EXT_NAME(RESERVED);
EXT_NAME(SA);
EXT_NAME(LIFETIME_CURRENT);
EXT_NAME(LIFETIME_HARD);
EXT_NAME(LIFETIME_SOFT);
EXT_NAME(ADDRESS_SRC);
EXT_NAME(ADDRESS_DST);
EXT_NAME(ADDRESS_PROXY);
EXT_NAME(KEY_AUTH);
EXT_NAME(KEY_ENCRYPT);
EXT_NAME(IDENTITY_SRC);
EXT_NAME(IDENTITY_DST);
EXT_NAME(SENSITIVITY);
EXT_NAME(PROPOSAL);
EXT_NAME(SUPPORTED_AUTH);
EXT_NAME(SUPPORTED_ENCRYPT);
EXT_NAME(SPIRANGE);
X_NAME(KMPRIVATE);
X_NAME(POLICY);
X_NAME(SA2);
X_NAME(NAT_T_TYPE);
X_NAME(NAT_T_SPORT);
X_NAME(NAT_T_DPORT);
X_NAME(NAT_T_OAI);
X_NAME(NAT_T_OAR);
X_NAME(NAT_T_FRAG);
X_NAME(SA_REPLAY);
X_NAME(NEW_ADDRESS_SRC);
X_NAME(NEW_ADDRESS_DST);
default:
return ("UNKNOWN");
};
#undef EXT_NAME
#undef X_NAME
}
/* %%%: about struct sadb_msg */
void
kdebug_sadb(struct sadb_msg *base)
@ -96,8 +175,9 @@ kdebug_sadb(struct sadb_msg *base)
if (base == NULL)
panic("%s: NULL pointer was passed.\n", __func__);
printf("sadb_msg{ version=%u type=%u errno=%u satype=%u\n",
printf("sadb_msg{ version=%u type=%u(%s) errno=%u satype=%u\n",
base->sadb_msg_version, base->sadb_msg_type,
kdebug_sadb_type(base->sadb_msg_type),
base->sadb_msg_errno, base->sadb_msg_satype);
printf(" len=%u reserved=%u seq=%u pid=%u\n",
base->sadb_msg_len, base->sadb_msg_reserved,
@ -107,8 +187,9 @@ kdebug_sadb(struct sadb_msg *base)
ext = (struct sadb_ext *)((caddr_t)base + sizeof(struct sadb_msg));
while (tlen > 0) {
printf("sadb_ext{ len=%u type=%u }\n",
ext->sadb_ext_len, ext->sadb_ext_type);
printf("sadb_ext{ len=%u type=%u(%s) }\n",
ext->sadb_ext_len, ext->sadb_ext_type,
kdebug_sadb_exttype(ext->sadb_ext_type));
if (ext->sadb_ext_len == 0) {
printf("%s: invalid ext_len=0 was passed.\n", __func__);