1#!/usr/bin/awk -f
2BEGIN{
3	sid=ENVIRON["server_sid"]
4	chain=ENVIRON["CHAIN"]
5}
6{
7# ============================
8# ====== Default Values ======
9# ============================
10
11on_link = "<td class=editdelete><a href='edit?"$1"@"chain"$"sid"' style='color:red'><img src='images/editor.png$"sid"' width=20 height=20 align=top border=0></a></td>";
12son_link = "<td class=editdelete><a href='javascript:del(\""chain"\",\""$1"\")' style='color:red'><img border=0 src='images/eraser.png$"sid"' width=20 height=20 align=top></a></td>";
13
14kuralno		= "<td align=right>"$1"</td>";
15paketsayisi	= "<td align=right>"$2"</td>";
16paketboyutu	= "<td align=right>"$3"</td>";
17if (length($5)>4) {
18	proto = "<td>"substr($5,1,length($5)-2)"</td>";
19	opt = "<td>"substr($5,length($5)-1,length($5))"</td>";
20	position=5;
21} else {
22	proto	= "<td>"$5"</td>";
23	opt	= "<td>"$6"</td>";
24	position=6
25}
26
27#====================
28#== Action Parsing ==
29#====================
30
31if ($4 == "ACCEPT") action = "<td><img src='images/action_allow.png$"sid"' width=32 height=32 align=absmiddle border=0>"$4"</td>"
32else if ($4 == "DROP") action = "<td><img src='images/action_deny.png$"sid"' width=32 height=32 align=absmiddle border=0>"$4"</td>"
33else if ($4 == "QUEUE") action = "<td><img src='images/action_pipequeue.png$"sid"' width=32 height=32 align=absmiddle border=0>"$4"</td>"
34else if ($4 == "REJECT") action = "<td><img src='images/action_unreach.png$"sid"' width=32 height=32 align=absmiddle border=0>"$4"</td>"
35else action = "<td>"$4"</td>"
36
37#=====================
38#== input interface ==
39#=====================
40if ($(position+1) == "*") $(position+1) = "any"
41if_in	= "<td>"$(position+1)"</td>";
42
43#======================
44#== output interface ==
45#======================
46
47if ($(position+2) == "*") $(position+2) = "any"
48if_out	= "<td>"$(position+2)"</td>";
49
50#=================
51#== Source Addr ==
52#=================
53if ($(position+3) == "0.0.0.0/0") $(position+3)="anywhere"
54src	= "<td>"$(position+3)"</td>";
55spt	= "<td> any</td>";
56if (proto == "<td>tcp</td>" || proto == "<td>udp</td>") {
57	if ($(position+6) ~ /^spt:/ || $(position+6) ~ /^spts:/) {
58		sub(/spt:/,"",$(position+6));
59		sub(/spts:/,"",$(position+6));
60		spt="<td>"$(position+6)"</td>";
61		$(position+6)="";
62		$(position+5)="";
63	}
64}
65
66#======================
67#== Destination Addr ==
68#======================
69if ($(position+4) == "0.0.0.0/0") $(position+4) = "anywhere"
70dst	= "<td>"$(position+4)"</td>";
71dpt	= "<td> any</td>";
72if (proto == "<td>tcp</td>" || proto == "<td>udp</td>") {
73	if ($12 ~ /^dpt:/ || $(position+6) ~ /^dpts:/) {
74		sub(/dpt:/,"",$(position+6));
75		sub(/dpts:/,"",$(position+6));
76		dpt="<td>"$(position+6)"</td>";
77		$(position+6)="";
78		$(position+5)="";
79	} else if ($(position+7) ~ /^dpt:/ || $(position+7) ~ /^dpts:/) {
80		sub(/dpt:/,"",$(position+7));
81		sub(/dpts:/,"",$(position+7));
82		dpt="<td>"$(position+7)"</td>";
83		$(position+7)="";
84		$(position+5)="";
85	}
86}
87
88
89#=======================
90#== Calculate Options ==
91#=======================
92eoption="";
93for (i=(position+5); i<=NF; i++) {
94	eoption=eoption" "$i;
95}
96if (eoption=="") eoption="<td>&nbsp;</td>";
97else eoption="<td>"eoption"</td>";
98
99#===========================
100#== Print Calculated Data ==
101#===========================
102if (NR %2 == 0) print "<tr class=a1>"
103else print "<tr class=a2>"
104print on_link,kuralno,paketsayisi,paketboyutu,proto,\
105      opt,if_in,if_out,src,spt,action,dst,dpt,eoption,son_link"</tr>\n"
106}
107