View difference between Paste ID: 4QQf7EfY and 8gWySLGp
SHOW: | | - or go back to the newest paste.
1-
iff --git a/rules.c b/rules.c
1+
diff --git a/rules.c b/rules.c
2-
index 181c6b1..969c385 100644
2+
index 181c6b1..6dcdcef 100644
3
--- a/rules.c
4
+++ b/rules.c
5-
@@ -420,6 +420,7 @@ print_rule(struct fw3_ipt_handle *handle, struct fw3_state *state,
5+
@@ -420,6 +420,9 @@ print_rule(struct fw3_ipt_handle *handle, struct fw3_state *state,
6
            struct fw3_mac *mac, struct fw3_icmptype *icmptype)
7
 {
8
        struct fw3_ipt_rule *r;
9
+       struct fw3_device *idev, *odev;
10
+       struct list_head empty;
11
+       INIT_LIST_HEAD(&empty);
12
 
13-
@@ -471,6 +472,36 @@ print_rule(struct fw3_ipt_handle *handle, struct fw3_state *state,
13+
14
            !fw3_is_family(dip, handle->family))
15
@@ -471,6 +474,36 @@ print_rule(struct fw3_ipt_handle *handle, struct fw3_state *state,
16
                return;
17
        }
18-
+               fw3_foreach(idev, &rule->_src->devices)
18+
19-
+               fw3_foreach(odev, &rule->_dest->devices)
19+
20
+               fw3_foreach(idev, rule->_src ? &rule->_src->devices : &empty)
21
+               fw3_foreach(odev, rule->_dest ? &rule->_dest->devices : &empty)
22
+               {
23
+                       r = fw3_ipt_rule_create(handle, proto, idev, odev, sip, dip);
24
+                       fw3_ipt_rule_sport_dport(r, sport, dport);
25
+                       fw3_ipt_rule_device(r, rule->device, rule->direction_out);
26
+                       fw3_ipt_rule_icmptype(r, icmptype);
27
+                       fw3_ipt_rule_mac(r, mac);
28
+                       fw3_ipt_rule_ipset(r, &rule->ipset);
29
+                       fw3_ipt_rule_helper(r, &rule->helper);
30
+                       fw3_ipt_rule_limit(r, &rule->limit);
31
+                       fw3_ipt_rule_time(r, &rule->time);
32
+                       fw3_ipt_rule_mark(r, &rule->mark);
33
+                       fw3_ipt_rule_dscp(r, &rule->dscp);
34
+                       set_target(r, rule);
35
+                       fw3_ipt_rule_extra(r, rule->extra);
36-
+                       if (idev && odev)
36+
37
+
38-
+                       else if (odev)
38+
+                       if ((rule->src.any || rule->_src) && (rule->dest.any || rule->_dest))
39
+                               fw3_ipt_rule_append(r, "FORWARD");
40-
+                       else /* if (idev) */
40+
+                       else if (rule->dest.any || rule->_dest)
41
+                               fw3_ipt_rule_append(r, "POSTROUTING");
42
+                       else /* if (rule->src.any || rule->_src) */
43
+                               fw3_ipt_rule_append(r, "PREROUTING");
44
+               }
45
+
46
+               return;
47
+       }
48
+
49
        r = fw3_ipt_rule_create(handle, proto, NULL, NULL, sip, dip);
50
        fw3_ipt_rule_sport_dport(r, sport, dport);
51
        fw3_ipt_rule_device(r, rule->device, rule->direction_out);
52