mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 07:37:54 +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_IP_PROTOCOL (1 << 5)
|
||||||
#define PBR_FILTER_SRC_PORT_RANGE (1 << 6)
|
#define PBR_FILTER_SRC_PORT_RANGE (1 << 6)
|
||||||
#define PBR_FILTER_DST_PORT_RANGE (1 << 7)
|
#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_PCP (1 << 10)
|
||||||
#define PBR_FILTER_VLAN_FLAGS (1 << 11)
|
#define PBR_FILTER_VLAN_FLAGS (1 << 11)
|
||||||
#define PBR_FILTER_VLAN_ID (1 << 12)
|
#define PBR_FILTER_VLAN_ID (1 << 12)
|
||||||
|
@ -361,8 +361,10 @@ DEFPY (pbr_map_match_dscp,
|
|||||||
/* Set the DSCP bits of the DSField */
|
/* Set the DSCP bits of the DSField */
|
||||||
pbrms->dsfield =
|
pbrms->dsfield =
|
||||||
(pbrms->dsfield & ~PBR_DSFIELD_DSCP) | (rawDscp << 2);
|
(pbrms->dsfield & ~PBR_DSFIELD_DSCP) | (rawDscp << 2);
|
||||||
|
SET_FLAG(pbrms->filter_bm, PBR_FILTER_DSCP);
|
||||||
} else {
|
} else {
|
||||||
pbrms->dsfield &= ~PBR_DSFIELD_DSCP;
|
pbrms->dsfield &= ~PBR_DSFIELD_DSCP;
|
||||||
|
UNSET_FLAG(pbrms->filter_bm, PBR_FILTER_DSCP);
|
||||||
}
|
}
|
||||||
|
|
||||||
pbr_map_check(pbrms, true);
|
pbr_map_check(pbrms, true);
|
||||||
@ -391,8 +393,10 @@ DEFPY (pbr_map_match_ecn,
|
|||||||
|
|
||||||
/* Set the ECN bits of the DSField */
|
/* Set the ECN bits of the DSField */
|
||||||
pbrms->dsfield = (pbrms->dsfield & ~PBR_DSFIELD_ECN) | ecn;
|
pbrms->dsfield = (pbrms->dsfield & ~PBR_DSFIELD_ECN) | ecn;
|
||||||
|
SET_FLAG(pbrms->filter_bm, PBR_FILTER_ECN);
|
||||||
} else {
|
} else {
|
||||||
pbrms->dsfield &= ~PBR_DSFIELD_ECN;
|
pbrms->dsfield &= ~PBR_DSFIELD_ECN;
|
||||||
|
UNSET_FLAG(pbrms->filter_bm, PBR_FILTER_ECN);
|
||||||
}
|
}
|
||||||
|
|
||||||
pbr_map_check(pbrms, true);
|
pbr_map_check(pbrms, true);
|
||||||
|
@ -117,8 +117,8 @@ static ssize_t netlink_rule_msg_encode(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* dsfield, if specified; mask off the ECN bits */
|
/* dsfield, if specified; mask off the ECN bits */
|
||||||
if (filter_bm & PBR_FILTER_DSFIELD)
|
if (filter_bm & PBR_FILTER_DSCP)
|
||||||
req->frh.tos = dsfield & 0xfc;
|
req->frh.tos = dsfield & PBR_DSFIELD_DSCP;
|
||||||
|
|
||||||
/* protocol to match on */
|
/* protocol to match on */
|
||||||
if (filter_bm & PBR_FILTER_IP_PROTOCOL)
|
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)
|
if (prule->filter.filter_bm & PBR_FILTER_DST_PORT)
|
||||||
vty_out(vty, " DST Port Match: %u\n", prule->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",
|
vty_out(vty, " DSCP Match: %u\n",
|
||||||
(prule->filter.dsfield & PBR_DSFIELD_DSCP) >> 2);
|
(prule->filter.dsfield & PBR_DSFIELD_DSCP) >> 2);
|
||||||
|
if (prule->filter.filter_bm & PBR_FILTER_ECN)
|
||||||
vty_out(vty, " ECN Match: %u\n",
|
vty_out(vty, " ECN Match: %u\n",
|
||||||
prule->filter.dsfield & PBR_DSFIELD_ECN);
|
prule->filter.dsfield & PBR_DSFIELD_ECN);
|
||||||
}
|
|
||||||
|
|
||||||
if (prule->filter.filter_bm & PBR_FILTER_FWMARK)
|
if (prule->filter.filter_bm & PBR_FILTER_FWMARK)
|
||||||
vty_out(vty, " MARK Match: %u\n", prule->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)
|
(r->rule.filter.filter_bm & PBR_FILTER_SRC_PORT)
|
||||||
#define IS_RULE_FILTERING_ON_DST_PORT(r) \
|
#define IS_RULE_FILTERING_ON_DST_PORT(r) \
|
||||||
(r->rule.filter.filter_bm & PBR_FILTER_DST_PORT)
|
(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) \
|
#define IS_RULE_FILTERING_ON_FWMARK(r) \
|
||||||
(r->rule.filter.filter_bm & PBR_FILTER_FWMARK)
|
(r->rule.filter.filter_bm & PBR_FILTER_FWMARK)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user