mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 11:01:48 +00:00
pbrd: PBR_FILTER_DSFIELD -> {PBR_FILTER_DSCP,PBR_FILTER_ECN}
DSCP and ECN matching are configured independently. Maintain these values in independent fields in pbrd, zapi, and zebra. Signed-off-by: G. Paul Ziemba <paulz@labn.net>
This commit is contained in:
parent
09262f1b72
commit
5572f45d51
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user