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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to