Make ipfw internal olist output more user friendly.

Print object type as string for known types.

Obtained from:	Yandex LLC
Sponsored by:	Yandex LLC
This commit is contained in:
Andrey V. Elsukov 2016-05-17 11:22:08 +00:00
parent f41492b00f
commit 825f02a9ed
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=300045

View File

@ -5131,11 +5131,35 @@ static struct _s_x intcmds[] = {
{ NULL, 0 }
};
static struct _s_x otypes[] = {
{ "EACTION", IPFW_TLV_EACTION },
{ NULL, 0 }
};
static const char*
lookup_eaction_name(ipfw_obj_ntlv *ntlv, int cnt, uint16_t type)
{
const char *name;
int i;
name = NULL;
for (i = 0; i < cnt; i++) {
if (ntlv[i].head.type != IPFW_TLV_EACTION)
continue;
if (IPFW_TLV_EACTION_NAME(ntlv[i].idx) != type)
continue;
name = ntlv[i].name;
break;
}
return (name);
}
static void
ipfw_list_objects(int ac, char *av[])
{
ipfw_obj_lheader req, *olh;
ipfw_obj_ntlv *ntlv;
const char *name;
size_t sz;
int i;
@ -5161,8 +5185,17 @@ ipfw_list_objects(int ac, char *av[])
printf("There are no objects\n");
ntlv = (ipfw_obj_ntlv *)(olh + 1);
for (i = 0; i < olh->count; i++) {
printf(" kidx: %4d\ttype: %6d\tname: %s\n", ntlv->idx,
ntlv->head.type, ntlv->name);
name = match_value(otypes, ntlv->head.type);
if (name == NULL)
name = lookup_eaction_name(
(ipfw_obj_ntlv *)(olh + 1), olh->count,
ntlv->head.type);
if (name == NULL)
printf(" kidx: %4d\ttype: %10d\tname: %s\n",
ntlv->idx, ntlv->head.type, ntlv->name);
else
printf(" kidx: %4d\ttype: %10s\tname: %s\n",
ntlv->idx, name, ntlv->name);
ntlv++;
}
free(olh);