1 /* $FreeBSD$ */ 2 3 /* 4 * Copyright (C) 2012 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 * 8 * Added redirect stuff and a variety of bug fixes. (mcn@EnGarde.com) 9 */ 10 11 #include "ipf.h" 12 13 14 #if !defined(lint) 15 static const char rcsid[] = "@(#)$Id$"; 16 #endif 17 18 19 void 20 printactivenat(nat, opts, ticks) 21 nat_t *nat; 22 int opts; 23 u_long ticks; 24 { 25 26 PRINTF("%s", getnattype(nat)); 27 28 if (nat->nat_flags & SI_CLONE) 29 PRINTF(" CLONE"); 30 if (nat->nat_phnext[0] == NULL && nat->nat_phnext[1] == NULL) 31 PRINTF(" ORPHAN"); 32 33 putchar(' '); 34 if (nat->nat_redir & NAT_REWRITE) { 35 printactiveaddress(nat->nat_v[0], "%-15s", &nat->nat_osrc6, 36 nat->nat_ifnames[0]); 37 38 if ((nat->nat_flags & IPN_TCPUDP) != 0) 39 PRINTF(" %-5hu", ntohs(nat->nat_osport)); 40 41 putchar(' '); 42 printactiveaddress(nat->nat_v[0], "%-15s", &nat->nat_odst6, 43 nat->nat_ifnames[0]); 44 45 if ((nat->nat_flags & IPN_TCPUDP) != 0) 46 PRINTF(" %-5hu", ntohs(nat->nat_odport)); 47 48 PRINTF("<- -> "); 49 printactiveaddress(nat->nat_v[1], "%-15s", &nat->nat_nsrc6, 50 nat->nat_ifnames[0]); 51 52 if ((nat->nat_flags & IPN_TCPUDP) != 0) 53 PRINTF(" %-5hu", ntohs(nat->nat_nsport)); 54 55 putchar(' '); 56 printactiveaddress(nat->nat_v[1], "%-15s", &nat->nat_ndst6, 57 nat->nat_ifnames[0]); 58 if ((nat->nat_flags & IPN_TCPUDP) != 0) 59 PRINTF(" %-5hu", ntohs(nat->nat_ndport)); 60 61 } else if (nat->nat_dir == NAT_OUTBOUND) { 62 printactiveaddress(nat->nat_v[0], "%-15s", &nat->nat_osrc6, 63 nat->nat_ifnames[0]); 64 65 if ((nat->nat_flags & IPN_TCPUDP) != 0) 66 PRINTF(" %-5hu", ntohs(nat->nat_osport)); 67 68 PRINTF(" <- -> "); 69 printactiveaddress(nat->nat_v[1], "%-15s", &nat->nat_nsrc6, 70 nat->nat_ifnames[0]); 71 72 if ((nat->nat_flags & IPN_TCPUDP) != 0) 73 PRINTF(" %-5hu", ntohs(nat->nat_nsport)); 74 75 PRINTF(" ["); 76 printactiveaddress(nat->nat_v[0], "%s", &nat->nat_odst6, 77 nat->nat_ifnames[0]); 78 79 if ((nat->nat_flags & IPN_TCPUDP) != 0) 80 PRINTF(" %hu", ntohs(nat->nat_odport)); 81 PRINTF("]"); 82 } else { 83 printactiveaddress(nat->nat_v[1], "%-15s", &nat->nat_ndst6, 84 nat->nat_ifnames[0]); 85 86 if ((nat->nat_flags & IPN_TCPUDP) != 0) 87 PRINTF(" %-5hu", ntohs(nat->nat_ndport)); 88 89 PRINTF(" <- -> "); 90 printactiveaddress(nat->nat_v[0], "%-15s", &nat->nat_odst6, 91 nat->nat_ifnames[0]); 92 93 if ((nat->nat_flags & IPN_TCPUDP) != 0) 94 PRINTF(" %-5hu", ntohs(nat->nat_odport)); 95 96 PRINTF(" ["); 97 printactiveaddress(nat->nat_v[0], "%s", &nat->nat_osrc6, 98 nat->nat_ifnames[0]); 99 100 if ((nat->nat_flags & IPN_TCPUDP) != 0) 101 PRINTF(" %hu", ntohs(nat->nat_osport)); 102 PRINTF("]"); 103 } 104 105 if (opts & OPT_VERBOSE) { 106 PRINTF("\n\tttl %lu use %hu sumd %s/", 107 nat->nat_age - ticks, nat->nat_use, 108 getsumd(nat->nat_sumd[0])); 109 PRINTF("%s pr %u/%u hash %u/%u flags %x\n", 110 getsumd(nat->nat_sumd[1]), 111 nat->nat_pr[0], nat->nat_pr[1], 112 nat->nat_hv[0], nat->nat_hv[1], nat->nat_flags); 113 PRINTF("\tifp %s", getifname(nat->nat_ifps[0])); 114 PRINTF(",%s ", getifname(nat->nat_ifps[1])); 115 #ifdef USE_QUAD_T 116 PRINTF("bytes %"PRIu64"/%"PRIu64" pkts %"PRIu64"/%"PRIu64"", 117 (unsigned long long)nat->nat_bytes[0], 118 (unsigned long long)nat->nat_bytes[1], 119 (unsigned long long)nat->nat_pkts[0], 120 (unsigned long long)nat->nat_pkts[1]); 121 #else 122 PRINTF("bytes %lu/%lu pkts %lu/%lu", nat->nat_bytes[0], 123 nat->nat_bytes[1], nat->nat_pkts[0], nat->nat_pkts[1]); 124 #endif 125 PRINTF(" ipsumd %x", nat->nat_ipsumd); 126 } 127 128 if (opts & OPT_DEBUG) { 129 PRINTF("\n\tnat_next %p _pnext %p _hm %p\n", 130 nat->nat_next, nat->nat_pnext, nat->nat_hm); 131 PRINTF("\t_hnext %p/%p _phnext %p/%p\n", 132 nat->nat_hnext[0], nat->nat_hnext[1], 133 nat->nat_phnext[0], nat->nat_phnext[1]); 134 PRINTF("\t_data %p _me %p _state %p _aps %p\n", 135 nat->nat_data, nat->nat_me, nat->nat_state, 136 nat->nat_aps); 137 PRINTF("\tfr %p ptr %p ifps %p/%p sync %p\n", 138 nat->nat_fr, nat->nat_ptr, nat->nat_ifps[0], 139 nat->nat_ifps[1], nat->nat_sync); 140 PRINTF("\ttqe:pnext %p next %p ifq %p parent %p/%p\n", 141 nat->nat_tqe.tqe_pnext, nat->nat_tqe.tqe_next, 142 nat->nat_tqe.tqe_ifq, nat->nat_tqe.tqe_parent, nat); 143 PRINTF("\ttqe:die %d touched %d flags %x state %d/%d\n", 144 nat->nat_tqe.tqe_die, nat->nat_tqe.tqe_touched, 145 nat->nat_tqe.tqe_flags, nat->nat_tqe.tqe_state[0], 146 nat->nat_tqe.tqe_state[1]); 147 } 148 putchar('\n'); 149 } 150