summaryrefslogtreecommitdiffstats
path: root/extensions/libxt_ecn.c
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/libxt_ecn.c')
-rw-r--r--extensions/libxt_ecn.c49
1 files changed, 31 insertions, 18 deletions
diff --git a/extensions/libxt_ecn.c b/extensions/libxt_ecn.c
index aeba01b3..ad3c7a03 100644
--- a/extensions/libxt_ecn.c
+++ b/extensions/libxt_ecn.c
@@ -124,26 +124,39 @@ static int ecn_xlate(struct xt_xlate *xl,
const struct xt_ecn_info *einfo =
(const struct xt_ecn_info *)params->match->data;
- if (!(einfo->operation & XT_ECN_OP_MATCH_IP))
- return 0;
+ if (einfo->operation & XT_ECN_OP_MATCH_ECE) {
+ xt_xlate_add(xl, "tcp flags ");
+ if (einfo->invert)
+ xt_xlate_add(xl,"!= ");
+ xt_xlate_add(xl, "ecn");
+ }
- xt_xlate_add(xl, "ip ecn ");
- if (einfo->invert)
- xt_xlate_add(xl,"!= ");
+ if (einfo->operation & XT_ECN_OP_MATCH_CWR) {
+ xt_xlate_add(xl, "tcp flags ");
+ if (einfo->invert)
+ xt_xlate_add(xl,"!= ");
+ xt_xlate_add(xl, "cwr");
+ }
- switch (einfo->ip_ect) {
- case 0:
- xt_xlate_add(xl, "not-ect");
- break;
- case 1:
- xt_xlate_add(xl, "ect1");
- break;
- case 2:
- xt_xlate_add(xl, "ect0");
- break;
- case 3:
- xt_xlate_add(xl, "ce");
- break;
+ if (einfo->operation & XT_ECN_OP_MATCH_IP) {
+ xt_xlate_add(xl, "ip ecn ");
+ if (einfo->invert)
+ xt_xlate_add(xl,"!= ");
+
+ switch (einfo->ip_ect) {
+ case 0:
+ xt_xlate_add(xl, "not-ect");
+ break;
+ case 1:
+ xt_xlate_add(xl, "ect1");
+ break;
+ case 2:
+ xt_xlate_add(xl, "ect0");
+ break;
+ case 3:
+ xt_xlate_add(xl, "ce");
+ break;
+ }
}
return 1;
}