summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pbr.h3
-rw-r--r--pbrd/pbr_vty.c4
-rw-r--r--zebra/rule_netlink.c4
-rw-r--r--zebra/zebra_pbr.c4
-rw-r--r--zebra/zebra_pbr.h2
5 files changed, 10 insertions, 7 deletions
diff --git a/lib/pbr.h b/lib/pbr.h
index 5414e97446..1c89f2f552 100644
--- a/lib/pbr.h
+++ b/lib/pbr.h
@@ -37,7 +37,8 @@ struct pbr_filter {
#define PBR_FILTER_IP_PROTOCOL (1 << 5)
#define PBR_FILTER_SRC_PORT_RANGE (1 << 6)
#define PBR_FILTER_DST_PORT_RANGE (1 << 7)
-#define PBR_FILTER_DSFIELD (1 << 8)
+#define PBR_FILTER_DSCP (1 << 8)
+#define PBR_FILTER_ECN (1 << 9)
#define PBR_FILTER_PCP (1 << 10)
#define PBR_FILTER_VLAN_FLAGS (1 << 11)
#define PBR_FILTER_VLAN_ID (1 << 12)
diff --git a/pbrd/pbr_vty.c b/pbrd/pbr_vty.c
index 5ee262b9c7..cffd3794c2 100644
--- a/pbrd/pbr_vty.c
+++ b/pbrd/pbr_vty.c
@@ -361,8 +361,10 @@ DEFPY (pbr_map_match_dscp,
/* Set the DSCP bits of the DSField */
pbrms->dsfield =
(pbrms->dsfield & ~PBR_DSFIELD_DSCP) | (rawDscp << 2);
+ SET_FLAG(pbrms->filter_bm, PBR_FILTER_DSCP);
} else {
pbrms->dsfield &= ~PBR_DSFIELD_DSCP;
+ UNSET_FLAG(pbrms->filter_bm, PBR_FILTER_DSCP);
}
pbr_map_check(pbrms, true);
@@ -391,8 +393,10 @@ DEFPY (pbr_map_match_ecn,
/* Set the ECN bits of the DSField */
pbrms->dsfield = (pbrms->dsfield & ~PBR_DSFIELD_ECN) | ecn;
+ SET_FLAG(pbrms->filter_bm, PBR_FILTER_ECN);
} else {
pbrms->dsfield &= ~PBR_DSFIELD_ECN;
+ UNSET_FLAG(pbrms->filter_bm, PBR_FILTER_ECN);
}
pbr_map_check(pbrms, true);
diff --git a/zebra/rule_netlink.c b/zebra/rule_netlink.c
index 3bb4936b81..bc96e12902 100644
--- a/zebra/rule_netlink.c
+++ b/zebra/rule_netlink.c
@@ -117,8 +117,8 @@ static ssize_t netlink_rule_msg_encode(
}
/* dsfield, if specified; mask off the ECN bits */
- if (filter_bm & PBR_FILTER_DSFIELD)
- req->frh.tos = dsfield & 0xfc;
+ if (filter_bm & PBR_FILTER_DSCP)
+ req->frh.tos = dsfield & PBR_DSFIELD_DSCP;
/* protocol to match on */
if (filter_bm & PBR_FILTER_IP_PROTOCOL)
diff --git a/zebra/zebra_pbr.c b/zebra/zebra_pbr.c
index eac93dca41..7560071e59 100644
--- a/zebra/zebra_pbr.c
+++ b/zebra/zebra_pbr.c
@@ -522,12 +522,12 @@ void zebra_pbr_show_rule_unit(struct zebra_pbr_rule *rule, struct vty *vty)
if (prule->filter.filter_bm & PBR_FILTER_DST_PORT)
vty_out(vty, " DST Port Match: %u\n", prule->filter.dst_port);
- if (prule->filter.filter_bm & PBR_FILTER_DSFIELD) {
+ if (prule->filter.filter_bm & PBR_FILTER_DSCP)
vty_out(vty, " DSCP Match: %u\n",
(prule->filter.dsfield & PBR_DSFIELD_DSCP) >> 2);
+ if (prule->filter.filter_bm & PBR_FILTER_ECN)
vty_out(vty, " ECN Match: %u\n",
prule->filter.dsfield & PBR_DSFIELD_ECN);
- }
if (prule->filter.filter_bm & PBR_FILTER_FWMARK)
vty_out(vty, " MARK Match: %u\n", prule->filter.fwmark);
diff --git a/zebra/zebra_pbr.h b/zebra/zebra_pbr.h
index 15ad4e35cf..ddc1460d40 100644
--- a/zebra/zebra_pbr.h
+++ b/zebra/zebra_pbr.h
@@ -61,8 +61,6 @@ struct zebra_pbr_rule {
(r->rule.filter.filter_bm & PBR_FILTER_SRC_PORT)
#define IS_RULE_FILTERING_ON_DST_PORT(r) \
(r->rule.filter.filter_bm & PBR_FILTER_DST_PORT)
-#define IS_RULE_FILTERING_ON_DSFIELD(r) \
- (r->rule.filter.filter_bm & PBR_FILTER_DSFIELD)
#define IS_RULE_FILTERING_ON_FWMARK(r) \
(r->rule.filter.filter_bm & PBR_FILTER_FWMARK)