summaryrefslogtreecommitdiff
path: root/pbrd
diff options
context:
space:
mode:
Diffstat (limited to 'pbrd')
-rw-r--r--pbrd/pbr_vty.c29
-rw-r--r--pbrd/pbr_zebra.c9
2 files changed, 23 insertions, 15 deletions
diff --git a/pbrd/pbr_vty.c b/pbrd/pbr_vty.c
index 71619b5177..1f1e42218f 100644
--- a/pbrd/pbr_vty.c
+++ b/pbrd/pbr_vty.c
@@ -442,18 +442,18 @@ DEFPY (pbr_map_match_dscp,
}
unsigned long ul_dscp;
- char *pend;
+ char *pend = NULL;
uint8_t raw_dscp;
assert(dscp);
- ul_dscp = strtol(dscp, &pend, 0);
- if (*pend)
+ ul_dscp = strtoul(dscp, &pend, 0);
+ if (pend && *pend)
raw_dscp = pbr_map_decode_dscp_enum(dscp);
else
raw_dscp = ul_dscp << 2;
if (raw_dscp > PBR_DSFIELD_DSCP) {
vty_out(vty, "Invalid dscp value: %s%s\n", dscp,
- (pend ? "" : " (numeric value must be in range 0-63)"));
+ ((pend && *pend) ? "" : " (numeric value must be in range 0-63)"));
return CMD_WARNING_CONFIG_FAILED;
}
@@ -791,6 +791,9 @@ DEFPY (pbr_map_action_src_port,
/* clang-format on */
struct pbr_map_sequence *pbrms = VTY_GET_CONTEXT(pbr_map_sequence);
+ if (!pbrms)
+ return CMD_WARNING_CONFIG_FAILED;
+
if (no) {
if (!CHECK_FLAG(pbrms->action_bm, PBR_ACTION_SRC_PORT))
return CMD_SUCCESS;
@@ -822,6 +825,9 @@ DEFPY (pbr_map_action_dst_port,
/* clang-format on */
struct pbr_map_sequence *pbrms = VTY_GET_CONTEXT(pbr_map_sequence);
+ if (!pbrms)
+ return CMD_WARNING_CONFIG_FAILED;
+
if (no) {
if (!CHECK_FLAG(pbrms->action_bm, PBR_ACTION_DST_PORT))
return CMD_SUCCESS;
@@ -852,6 +858,9 @@ DEFPY (pbr_map_action_dscp,
/* clang-format on */
struct pbr_map_sequence *pbrms = VTY_GET_CONTEXT(pbr_map_sequence);
+ if (!pbrms)
+ return CMD_WARNING_CONFIG_FAILED;
+
if (no) {
if (!CHECK_FLAG(pbrms->action_bm, PBR_ACTION_DSCP))
return CMD_SUCCESS;
@@ -860,19 +869,19 @@ DEFPY (pbr_map_action_dscp,
}
unsigned long ul_dscp;
- char *pend;
+ char *pend = NULL;
uint8_t raw_dscp;
assert(dscp);
- ul_dscp = strtol(dscp, &pend, 0);
- if (*pend)
+ ul_dscp = strtoul(dscp, &pend, 0);
+ if (pend && *pend)
raw_dscp = pbr_map_decode_dscp_enum(dscp);
else
raw_dscp = ul_dscp << 2;
if (raw_dscp > PBR_DSFIELD_DSCP) {
vty_out(vty, "Invalid dscp value: %s%s\n", dscp,
- (pend ? "" : " (numeric value must be in range 0-63)"));
+ ((pend && *pend) ? "" : " (numeric value must be in range 0-63)"));
return CMD_WARNING_CONFIG_FAILED;
}
if (CHECK_FLAG(pbrms->action_bm, PBR_ACTION_DSCP) &&
@@ -899,6 +908,9 @@ DEFPY (pbr_map_action_ecn,
/* clang-format on */
struct pbr_map_sequence *pbrms = VTY_GET_CONTEXT(pbr_map_sequence);
+ if (!pbrms)
+ return CMD_WARNING_CONFIG_FAILED;
+
if (no) {
if (!CHECK_FLAG(pbrms->action_bm, PBR_ACTION_ECN))
return CMD_SUCCESS;
@@ -1343,6 +1355,7 @@ DEFPY(pbr_map_vrf, pbr_map_vrf_cmd,
* If an equivalent set vrf * exists, just return success.
*/
if ((pbrms->forwarding_type == PBR_FT_SETVRF) &&
+ vrf_name &&
strncmp(pbrms->vrf_name, vrf_name, sizeof(pbrms->vrf_name)) == 0)
return CMD_SUCCESS;
else if (!vrf_name && (pbrms->forwarding_type == PBR_FT_VRF_UNCHANGED))
diff --git a/pbrd/pbr_zebra.c b/pbrd/pbr_zebra.c
index 35c771469c..ee17a193f4 100644
--- a/pbrd/pbr_zebra.c
+++ b/pbrd/pbr_zebra.c
@@ -568,15 +568,10 @@ static bool pbr_encode_pbr_map_sequence(struct stream *s,
/* actions */
- SET_FLAG(r.action.flags, PBR_ACTION_TABLE); /* always valid */
-
- /*
- * PBR should maintain its own set of action flags that we
- * can copy here instead of trying to infer from magic values.
- */
-
r.action.flags = pbrms->action_bm;
+ SET_FLAG(r.action.flags, PBR_ACTION_TABLE); /* always valid */
+
/*
* if the user does not use the command "set vrf name unchanged"
* then pbr_encode_pbr_map_sequence_vrf will not be called