From daeb949506b51ea66e0e6f1ff34687f1ad0ba88b Mon Sep 17 00:00:00 2001 From: Rory Savage Date: Tue, 18 Feb 2020 14:35:50 -0500 Subject: [PATCH] Throw exception if dscp value is not byte. Change-Id: Iae005dda9f28fb28f1bcc9ea5de31f1bf2c65843 --- .../onosproject/net/flow/instructions/Instructions.java | 6 +++--- .../codec/impl/DecodeInstructionCodecHelper.java | 7 +++++++ .../codec/impl/EncodeInstructionCodecHelper.java | 6 ++++++ .../java/org/onosproject/codec/impl/InstructionCodec.java | 1 + 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java index e0c58d338a..d1fc61fd49 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java +++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java @@ -487,11 +487,11 @@ public final class Instructions { /** * Creates an IP DSCP modification. * - * @param dscpValue the DSCP value to modify to + * @param ipDscp the DSCP value to modify to * @return a L3 modification */ - public static Instruction modIpDscp(byte dscpValue) { - return new L3ModificationInstruction.ModDscpInstruction(L3SubType.IP_DSCP, dscpValue); + public static Instruction modIpDscp(byte ipDscp) { + return new L3ModificationInstruction.ModDscpInstruction(L3SubType.IP_DSCP, ipDscp); } /** diff --git a/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java b/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java index 2730c38a6a..8ad11f1582 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java @@ -178,6 +178,13 @@ public final class DecodeInstructionCodecHelper { return Instructions.copyTtlOut(); } else if (subType.equals(L3ModificationInstruction.L3SubType.DEC_TTL.name())) { return Instructions.decNwTtl(); + } else if (subType.equals(L3ModificationInstruction.L3SubType.IP_DSCP.name())) { + int ipDscp = nullIsIllegal(json.get(InstructionCodec.IP_DSCP), + InstructionCodec.IP_DSCP + InstructionCodec.MISSING_MEMBER_MESSAGE).asInt(); + if ((ipDscp < Byte.MIN_VALUE) || (ipDscp > Byte.MAX_VALUE)) { + throw new IllegalArgumentException("Value " + ipDscp + " must be single byte"); + } + return Instructions.modIpDscp((byte) ipDscp); } throw new IllegalArgumentException("L3 Instruction subtype " + subType + " is not supported"); diff --git a/core/common/src/main/java/org/onosproject/codec/impl/EncodeInstructionCodecHelper.java b/core/common/src/main/java/org/onosproject/codec/impl/EncodeInstructionCodecHelper.java index 0f3c125e2a..102b9cab55 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/EncodeInstructionCodecHelper.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/EncodeInstructionCodecHelper.java @@ -207,6 +207,12 @@ public final class EncodeInstructionCodecHelper { (L3ModificationInstruction.ModIPv6FlowLabelInstruction) l3Instruction; result.put(InstructionCodec.FLOW_LABEL, modFlowLabelInstruction.flowLabel()); break; + case IP_DSCP: + final L3ModificationInstruction.ModDscpInstruction + modDscpInstruction = + (L3ModificationInstruction.ModDscpInstruction) l3Instruction; + result.put(InstructionCodec.IP_DSCP, modDscpInstruction.dscp()); + break; case TTL_IN: case TTL_OUT: case DEC_TTL: diff --git a/core/common/src/main/java/org/onosproject/codec/impl/InstructionCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/InstructionCodec.java index df7ff1c642..ca2df491f3 100644 --- a/core/common/src/main/java/org/onosproject/codec/impl/InstructionCodec.java +++ b/core/common/src/main/java/org/onosproject/codec/impl/InstructionCodec.java @@ -40,6 +40,7 @@ public final class InstructionCodec extends JsonCodec { static final String MPLS_LABEL = "label"; static final String MPLS_BOS = "bos"; static final String IP = "ip"; + static final String IP_DSCP = "ipDscp"; static final String FLOW_LABEL = "flowLabel"; static final String LAMBDA = "lambda"; static final String GRID_TYPE = "gridType";