Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 May 2016 11:22:09 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r300045 - head/sbin/ipfw
Message-ID:  <201605171122.u4HBM9sG007704@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Tue May 17 11:22:08 2016
New Revision: 300045
URL: https://svnweb.freebsd.org/changeset/base/300045

Log:
  Make `ipfw internal olist` output more user friendly.
  Print object type as string for known types.
  
  Obtained from:	Yandex LLC
  Sponsored by:	Yandex LLC

Modified:
  head/sbin/ipfw/ipfw2.c

Modified: head/sbin/ipfw/ipfw2.c
==============================================================================
--- head/sbin/ipfw/ipfw2.c	Tue May 17 11:10:44 2016	(r300044)
+++ head/sbin/ipfw/ipfw2.c	Tue May 17 11:22:08 2016	(r300045)
@@ -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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605171122.u4HBM9sG007704>