1 /* 2 * Copyright (C) 2012 by Darren Reed. 3 * 4 * See the IPFILTER.LICENCE file for details on licencing. 5 * 6 * $Id: printnatfield.c,v 1.6.2.2 2012/01/26 05:44:26 darren_r Exp $ 7 */ 8 9 #include "ipf.h" 10 11 wordtab_t natfields[] = { 12 { "all", -2 }, 13 { "ifp0", 1 }, 14 { "ifp1", 2 }, 15 { "mtu0", 3 }, 16 { "mtu1", 4 }, 17 { "ifname0", 5 }, 18 { "ifname1", 6 }, 19 { "sumd0", 7 }, 20 { "sumd1", 8 }, 21 { "pkts0", 9 }, 22 { "pkts1", 10 }, 23 { "bytes0", 11 }, 24 { "bytes1", 12 }, 25 { "proto0", 13 }, 26 { "proto1", 14 }, 27 { "hash0", 15 }, 28 { "hash1", 16 }, 29 { "ref", 17 }, 30 { "rev", 18 }, 31 { "v0", 19 }, 32 { "redir", 20 }, 33 { "use", 21 }, 34 { "ipsumd", 22 }, 35 { "dir", 23 }, 36 { "olddstip", 24 }, 37 { "oldsrcip", 25 }, 38 { "newdstip", 26 }, 39 { "newsrcip", 27 }, 40 { "olddport", 28 }, 41 { "oldsport", 29 }, 42 { "newdport", 30 }, 43 { "newsport", 31 }, 44 { "age", 32 }, 45 { "v1", 33 }, 46 { NULL, 0 } 47 }; 48 49 50 void 51 printnatfield(n, fieldnum) 52 nat_t *n; 53 int fieldnum; 54 { 55 int i; 56 57 switch (fieldnum) 58 { 59 case -2 : 60 for (i = 1; natfields[i].w_word != NULL; i++) { 61 if (natfields[i].w_value > 0) { 62 printnatfield(n, i); 63 if (natfields[i + 1].w_value > 0) 64 putchar('\t'); 65 } 66 } 67 break; 68 69 case 1: 70 PRINTF("%#lx", (u_long)n->nat_ifps[0]); 71 break; 72 73 case 2: 74 PRINTF("%#lx", (u_long)n->nat_ifps[1]); 75 break; 76 77 case 3: 78 PRINTF("%d", n->nat_mtu[0]); 79 break; 80 81 case 4: 82 PRINTF("%d", n->nat_mtu[1]); 83 break; 84 85 case 5: 86 PRINTF("%s", n->nat_ifnames[0]); 87 break; 88 89 case 6: 90 PRINTF("%s", n->nat_ifnames[1]); 91 break; 92 93 case 7: 94 PRINTF("%d", n->nat_sumd[0]); 95 break; 96 97 case 8: 98 PRINTF("%d", n->nat_sumd[1]); 99 break; 100 101 case 9: 102 #ifdef USE_QUAD_T 103 PRINTF("%"PRIu64"", n->nat_pkts[0]); 104 #else 105 PRINTF("%lu", n->nat_pkts[0]); 106 #endif 107 break; 108 109 case 10: 110 #ifdef USE_QUAD_T 111 PRINTF("%"PRIu64"", n->nat_pkts[1]); 112 #else 113 PRINTF("%lu", n->nat_pkts[1]); 114 #endif 115 break; 116 117 case 11: 118 #ifdef USE_QUAD_T 119 PRINTF("%"PRIu64"", n->nat_bytes[0]); 120 #else 121 PRINTF("%lu", n->nat_bytes[0]); 122 #endif 123 break; 124 125 case 12: 126 #ifdef USE_QUAD_T 127 PRINTF("%"PRIu64"", n->nat_bytes[1]); 128 #else 129 PRINTF("%lu", n->nat_bytes[1]); 130 #endif 131 break; 132 133 case 13: 134 PRINTF("%d", n->nat_pr[0]); 135 break; 136 137 case 14: 138 PRINTF("%d", n->nat_pr[1]); 139 break; 140 141 case 15: 142 PRINTF("%u", n->nat_hv[0]); 143 break; 144 145 case 16: 146 PRINTF("%u", n->nat_hv[1]); 147 break; 148 149 case 17: 150 PRINTF("%d", n->nat_ref); 151 break; 152 153 case 18: 154 PRINTF("%d", n->nat_rev); 155 break; 156 157 case 19: 158 PRINTF("%d", n->nat_v[0]); 159 break; 160 161 case 33: 162 PRINTF("%d", n->nat_v[0]); 163 break; 164 165 case 20: 166 PRINTF("%d", n->nat_redir); 167 break; 168 169 case 21: 170 PRINTF("%d", n->nat_use); 171 break; 172 173 case 22: 174 PRINTF("%u", n->nat_ipsumd); 175 break; 176 177 case 23: 178 PRINTF("%d", n->nat_dir); 179 break; 180 181 case 24: 182 PRINTF("%s", hostname(n->nat_v[0], &n->nat_odstip)); 183 break; 184 185 case 25: 186 PRINTF("%s", hostname(n->nat_v[0], &n->nat_osrcip)); 187 break; 188 189 case 26: 190 PRINTF("%s", hostname(n->nat_v[1], &n->nat_ndstip)); 191 break; 192 193 case 27: 194 PRINTF("%s", hostname(n->nat_v[1], &n->nat_nsrcip)); 195 break; 196 197 case 28: 198 PRINTF("%hu", ntohs(n->nat_odport)); 199 break; 200 201 case 29: 202 PRINTF("%hu", ntohs(n->nat_osport)); 203 break; 204 205 case 30: 206 PRINTF("%hu", ntohs(n->nat_ndport)); 207 break; 208 209 case 31: 210 PRINTF("%hu", ntohs(n->nat_nsport)); 211 break; 212 213 case 32: 214 PRINTF("%u", n->nat_age); 215 break; 216 217 default: 218 break; 219 } 220 } 221