root/sbin/ipf/libipf/printstatefields.c
/*
 * Copyright (C) 2012 by Darren Reed.
 *
 * See the IPFILTER.LICENCE file for details on licencing.
 *
 * $Id: printstatefields.c,v 1.4.2.2 2012/01/26 05:44:26 darren_r Exp $
 */

#include "ipf.h"

wordtab_t statefields[] = {
        { "all",        -2 },
        { "ifp0",       1 },
        { "ifp1",       2 },
        { "ifp2",       3 },
        { "ifp3",       4 },
        { "ifname0",    5 },
        { "ifname1",    6 },
        { "ifname2",    7 },
        { "ifname3",    8 },
        { "pkts0",      9 },
        { "pkts1",      10 },
        { "pkts2",      11 },
        { "pkts3",      12 },
        { "bytes0",     13 },
        { "bytes1",     14 },
        { "bytes2",     15 },
        { "bytes3",     16 },
        { "state0",     17 },
        { "state1",     18 },
        { "age0",       19 },
        { "age1",       20 },
        { "ref",        21 },
        { "isn0",       22 },
        { "isn1",       23 },
        { "sumd0",      24 },
        { "sumd1",      25 },
        { "src",        26 },
        { "dst",        27 },
        { "sport",      28 },
        { "dport",      29 },
        { "icmptype",   30 },
        { "-",          31 },
        { "pass",       32 },
        { "proto",      33 },
        { "version",    34 },
        { "hash",       35 },
        { "tag",        36 },
        { "flags",      37 },
        { "rulen",      38 },
        { "group",      39 },
        { "flx0",       40 },
        { "flx1",       41 },
        { "flx2",       42 },
        { "flx3",       43 },
        { "opt0",       44 },
        { "opt1",       45 },
        { "optmsk0",    46 },
        { "optmsk1",    47 },
        { "sec",        48 },
        { "secmsk",     49 },
        { "auth",       50 },
        { "authmsk",    51 },
        { "icmppkts0",  52 },
        { "icmppkts1",  53 },
        { "icmppkts2",  54 },
        { "icmppkts3",  55 },
        { NULL, 0 }
};


void
printstatefield(ipstate_t *sp, int fieldnum)
{
        int i;

        switch (fieldnum)
        {
        case -2 :
                for (i = 1; statefields[i].w_word != NULL; i++) {
                        if (statefields[i].w_value > 0) {
                                printstatefield(sp, i);
                                if (statefields[i + 1].w_value > 0)
                                        putchar('\t');
                        }
                }
                break;

        case 1:
                PRINTF("%#lx", (u_long)sp->is_ifp[0]);
                break;

        case 2:
                PRINTF("%#lx", (u_long)sp->is_ifp[1]);
                break;

        case 3:
                PRINTF("%#lx", (u_long)sp->is_ifp[2]);
                break;

        case 4:
                PRINTF("%#lx", (u_long)sp->is_ifp[3]);
                break;

        case 5:
                PRINTF("%s", sp->is_ifname[0]);
                break;

        case 6:
                PRINTF("%s", sp->is_ifname[1]);
                break;

        case 7:
                PRINTF("%s", sp->is_ifname[2]);
                break;

        case 8:
                PRINTF("%s", sp->is_ifname[3]);
                break;

        case 9:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_pkts[0]);
#else
                PRINTF("%lu", sp->is_pkts[0]);
#endif
                break;

        case 10:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_pkts[1]);
#else
                PRINTF("%lu", sp->is_pkts[1]);
#endif
                break;

        case 11:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_pkts[2]);
#else
                PRINTF("%lu", sp->is_pkts[2]);
#endif
                break;

        case 12:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_pkts[3]);
#else
                PRINTF("%lu", sp->is_pkts[3]);
#endif
                break;

        case 13:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_bytes[0]);
#else
                PRINTF("%lu", sp->is_bytes[0]);
#endif
                break;

        case 14:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_bytes[1]);
#else
                PRINTF("%lu", sp->is_bytes[1]);
#endif
                break;

        case 15:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_bytes[2]);
#else
                PRINTF("%lu", sp->is_bytes[2]);
#endif
                break;

        case 16:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_bytes[3]);
#else
                PRINTF("%lu", sp->is_bytes[3]);
#endif
                break;

        case 17:
                PRINTF("%d", sp->is_state[0]);
                break;

        case 18:
                PRINTF("%d", sp->is_state[1]);
                break;

        case 19:
                PRINTF("%d", sp->is_frage[0]);
                break;

        case 20:
                PRINTF("%d", sp->is_frage[1]);
                break;

        case 21:
                PRINTF("%d", sp->is_ref);
                break;

        case 22:
                PRINTF("%d", sp->is_isninc[0]);
                break;

        case 23:
                PRINTF("%d", sp->is_isninc[1]);
                break;

        case 24:
                PRINTF("%hd", sp->is_sumd[0]);
                break;

        case 25:
                PRINTF("%hd", sp->is_sumd[1]);
                break;

        case 26:
                PRINTF("%s", hostname(sp->is_v, &sp->is_src.in4));
                break;

        case 27:
                PRINTF("%s", hostname(sp->is_v, &sp->is_dst.in4));
                break;

        case 28:
                PRINTF("%hu", ntohs(sp->is_sport));
                break;

        case 29:
                PRINTF("%hu", ntohs(sp->is_dport));
                break;

        case 30:
                PRINTF("%d", sp->is_type);
                break;

        case 32:
                PRINTF("%#x", sp->is_pass);
                break;

        case 33:
                PRINTF("%d", sp->is_p);
                break;

        case 34:
                PRINTF("%d", sp->is_v);
                break;

        case 35:
                PRINTF("%d", sp->is_hv);
                break;

        case 36:
                PRINTF("%d", sp->is_tag);
                break;

        case 37:
                PRINTF("%#x", sp->is_flags);
                break;

        case 38:
                PRINTF("%d", sp->is_rulen);
                break;

        case 39:
                PRINTF("%s", sp->is_group);
                break;

        case 40:
                PRINTF("%#x", sp->is_flx[0][0]);
                break;

        case 41:
                PRINTF("%#x", sp->is_flx[0][1]);
                break;

        case 42:
                PRINTF("%#x", sp->is_flx[1][0]);
                break;

        case 43:
                PRINTF("%#x", sp->is_flx[1][1]);
                break;

        case 44:
                PRINTF("%#x", sp->is_opt[0]);
                break;

        case 45:
                PRINTF("%#x", sp->is_opt[1]);
                break;

        case 46:
                PRINTF("%#x", sp->is_optmsk[0]);
                break;

        case 47:
                PRINTF("%#x", sp->is_optmsk[1]);
                break;

        case 48:
                PRINTF("%#x", sp->is_sec);
                break;

        case 49:
                PRINTF("%#x", sp->is_secmsk);
                break;

        case 50:
                PRINTF("%#x", sp->is_auth);
                break;

        case 51:
                PRINTF("%#x", sp->is_authmsk);
                break;

        case 52:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_icmppkts[0]);
#else
                PRINTF("%lu", sp->is_icmppkts[0]);
#endif
                break;

        case 53:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_icmppkts[1]);
#else
                PRINTF("%lu", sp->is_icmppkts[1]);
#endif
                break;

        case 54:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_icmppkts[2]);
#else
                PRINTF("%lu", sp->is_icmppkts[2]);
#endif
                break;

        case 55:
#ifdef USE_QUAD_T
                PRINTF("%"PRIu64"", sp->is_icmppkts[3]);
#else
                PRINTF("%lu", sp->is_icmppkts[3]);
#endif
                break;

        default:
                break;
        }
}