/** * This file is part of Path Computation Element Emulator (PCEE). * * PCEE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PCEE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PCEE. If not, see <http://www.gnu.org/licenses/>. */ package com.pcee.protocol.message.objectframe.impl; import com.pcee.protocol.message.PCEPComputationFactory; import com.pcee.protocol.message.PCEPConstantValues; import com.pcee.protocol.message.objectframe.PCEPCommonObjectHeader; import com.pcee.protocol.message.objectframe.PCEPObjectFrame; /** * <pre> * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Exclude-any | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Include-any | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Include-all | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Setup Prio | Holding Prio | Flags |L| Reserved | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | | * // Optional TLVs // * | | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * </pre> */ public class PCEPLabelSwitchedPathAttributesObject implements PCEPObjectFrame { private final String NAME = "Label Switched Path Attributes"; private String excludeAny; private String includeAny; private String includeAll; private String setupPrio; private String holdingPrio; private String reserved; private String flags; private PCEPCommonObjectHeader objectHeader; // private LinkedList<PCEPTLVObject> tlvList; private int excludeAnyStartBit = PCEPConstantValues.LSPA_OBJECT_EXCLUDE_ANY_START_BIT; private int excludeAnyEndBit = PCEPConstantValues.LSPA_OBJECT_EXCLUDE_ANY_END_BIT; private int excludeAnyLength = PCEPConstantValues.LSPA_OBJECT_EXCLUDE_ANY_LENGTH; private int includeAnyStartBit = PCEPConstantValues.LSPA_OBJECT_INCLUDE_ANY_START_BIT; private int includeAnyEndBit = PCEPConstantValues.LSPA_OBJECT_INCLUDE_ANY_END_BIT; private int includeAnyLength = PCEPConstantValues.LSPA_OBJECT_INCLUDE_ANY_LENGTH; private int includeAllStartBit = PCEPConstantValues.LSPA_OBJECT_INCLUDE_ALL_START_BIT; private int includeAllEndBit = PCEPConstantValues.LSPA_OBJECT_INCLUDE_ALL_END_BIT; private int includeAllLength = PCEPConstantValues.LSPA_OBJECT_INCLUDE_ALL_LENGTH; private int setupPrioStartBit = PCEPConstantValues.LSPA_OBJECT_SETUP_PRIO_START_BIT; private int setupPrioEndBit = PCEPConstantValues.LSPA_OBJECT_SETUP_PRIO_END_BIT; private int setupPrioLength = PCEPConstantValues.LSPA_OBJECT_SETUP_PRIO_LENGTH; private int holdingPrioStartBit = PCEPConstantValues.LSPA_OBJECT_HOLDING_PRIO_START_BIT; private int holdingPrioEndBit = PCEPConstantValues.LSPA_OBJECT_HOLDING_PRIO_END_BIT; private int holdingPrioLength = PCEPConstantValues.LSPA_OBJECT_HOLDING_PRIO_LENGTH; private int flagsStartBit = PCEPConstantValues.LSPA_OBJECT_FLAGS_START_BIT; private int flagsEndBit = PCEPConstantValues.LSPA_OBJECT_FLAGS_END_BIT; private int flagsLength = PCEPConstantValues.LSPA_OBJECT_FLAGS_LENGTH; private int lFlagStartBit = PCEPConstantValues.LSPA_OBJECT_FLAG_L_START_BIT; private int lFlagEndBit = PCEPConstantValues.LSPA_OBJECT_FLAG_L_END_BIT; private int lFlagLength = PCEPConstantValues.LSPA_OBJECT_FLAG_L_LENGTH; private int reservedStartBit = PCEPConstantValues.LSPA_OBJECT_RESERVED_START_BIT; private int reservedEndBit = PCEPConstantValues.LSPA_OBJECT_RESERVED_END_BIT; private int reservedLength = PCEPConstantValues.LSPA_OBJECT_RESERVED_LENGTH; public PCEPLabelSwitchedPathAttributesObject(PCEPCommonObjectHeader objectHeader, String binaryString) { this.setObjectHeader(objectHeader); this.setObjectBinaryString(binaryString); this.updateHeaderLength(); } public PCEPLabelSwitchedPathAttributesObject(PCEPCommonObjectHeader objectHeader, String excludeAny, String includeAny, String includeAll, int setupPrio, int holdingPrio, String lFlag) { this.setObjectHeader(objectHeader); this.setExcludeAnyBinaryString(excludeAny); this.setIncludeAnyBinaryString(includeAny); this.setIncludeAllBinaryString(includeAll); this.setSetupPrioDecimalValue(setupPrio); this.setHoldingPrioDecimalValue(holdingPrio); this.setFlagsBinaryString(PCEPComputationFactory.generateZeroString(flagsLength)); this.setLFlagBinaryString(lFlag); this.setReservedBinaryString(PCEPComputationFactory.generateZeroString(reservedLength)); this.updateHeaderLength(); } private void updateHeaderLength() { int objectFrameByteLength = this.getObjectFrameByteLength(); this.getObjectHeader().setLengthDecimalValue(objectFrameByteLength); } /** * Object */ public PCEPCommonObjectHeader getObjectHeader() { return objectHeader; } public void setObjectHeader(PCEPCommonObjectHeader objectHeader) { this.objectHeader = objectHeader; } public String getObjectBinaryString() { String binaryString = excludeAny + includeAny + includeAll + setupPrio + holdingPrio + flags + reserved; return binaryString; } public void setObjectBinaryString(String binaryString) { String excludeAnyBinaryString = binaryString.substring(excludeAnyStartBit, excludeAnyEndBit + 1); String includeAnyBinaryString = binaryString.substring(includeAnyStartBit, includeAnyEndBit + 1); String includeAllBinaryString = binaryString.substring(includeAllStartBit, includeAllEndBit + 1); String setupPrioBinaryString = binaryString.substring(setupPrioStartBit, setupPrioEndBit + 1); String holdingPrioBinaryString = binaryString.substring(holdingPrioStartBit, holdingPrioEndBit + 1); String flagsBinaryString = binaryString.substring(flagsStartBit, flagsEndBit + 1); String lFlagBinaryString = binaryString.substring(lFlagStartBit, lFlagEndBit + 1); String reservedBinaryString = binaryString.substring(reservedStartBit, reservedEndBit + 1); this.setExcludeAnyBinaryString(excludeAnyBinaryString); this.setIncludeAnyBinaryString(includeAnyBinaryString); this.setIncludeAllBinaryString(includeAllBinaryString); this.setSetupPrioBinaryString(setupPrioBinaryString); this.setHoldingPrioBinaryString(holdingPrioBinaryString); this.setFlagsBinaryString(flagsBinaryString); this.setLFlagBinaryString(lFlagBinaryString); this.setReservedBinaryString(reservedBinaryString); } public int getObjectFrameByteLength() { int objectLength = excludeAny.length() + includeAny.length() + includeAll.length() + setupPrio.length() + holdingPrio.length() + flags.length() + reserved.length(); int headerLength = PCEPConstantValues.COMMON_OBJECT_HEADER_LENGTH; int objectFrameByteLength = (objectLength + headerLength) / 8; return objectFrameByteLength; } public String getObjectFrameBinaryString() { String headerBinaryString = this.getObjectHeader().getHeaderBinaryString(); String objectBinaryString = this.getObjectBinaryString(); return headerBinaryString + objectBinaryString; } /** * excludeAny */ // public int getExcludeAnyDecimalValue() { // int decimalValue = (int) getDecimalValue(excludeAny); // return decimalValue; // } public String getExcludeAnyBinaryString() { return this.excludeAny; } // public void setExcludeAnyDecimalValue(int decimalValue) { // int binaryLength = excludeAnyLength; // int maxValue = (int) // PCEPConstantValues.MaxValueFabrication(binaryLength); // // this.excludeAny = this.setDecimalValue(decimalValue, maxValue, // binaryLength); // } public void setExcludeAnyBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, excludeAnyLength); this.excludeAny = checkedBinaryString; } public void setExcludeAnyBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(excludeAny, startingBit, binaryString, excludeAnyLength); this.excludeAny = checkedBinaryString; } /** * includeAny */ // public int getIncludeAnyDecimalValue() { // int decimalValue = (int) getDecimalValue(includeAny); // return decimalValue; // } public String getIncludeAnyBinaryString() { return this.includeAny; } // public void setIncludeAnyDecimalValue(int decimalValue) { // int binaryLength = includeAnyLength; // int maxValue = (int) // PCEPConstantValues.MaxValueFabrication(binaryLength); // // this.includeAny = this.setDecimalValue(decimalValue, maxValue, // binaryLength); // } public void setIncludeAnyBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, includeAnyLength); this.includeAny = checkedBinaryString; } public void setIncludeAnyBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(includeAny, startingBit, binaryString, includeAnyLength); this.includeAny = checkedBinaryString; } /** * includeAll */ // public int getIncludeAllDecimalValue() { // int decimalValue = (int) getDecimalValue(includeAll); // return decimalValue; // } public String getIncludeAllBinaryString() { return this.includeAll; } // public void setIncludeAllDecimalValue(int decimalValue) { // int binaryLength = includeAllLength; // int maxValue = (int) // PCEPConstantValues.MaxValueFabrication(binaryLength); // // this.includeAll = this.setDecimalValue(decimalValue, maxValue, // binaryLength); // } public void setIncludeAllBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, includeAllLength); this.includeAll = checkedBinaryString; } public void setIncludeAllBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(includeAll, startingBit, binaryString, includeAllLength); this.includeAll = checkedBinaryString; } /** * setupPrio */ public int getSetupPrioDecimalValue() { int decimalValue = (int) PCEPComputationFactory.getDecimalValue(setupPrio); return decimalValue; } public String getSetupPrioBinaryString() { return this.setupPrio; } public void setSetupPrioDecimalValue(int decimalValue) { int binaryLength = setupPrioLength; int maxValue = (int) PCEPComputationFactory.MaxValueFabrication(binaryLength); this.setupPrio = PCEPComputationFactory.setDecimalValue(decimalValue, maxValue, binaryLength); } public void setSetupPrioBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, setupPrioLength); this.setupPrio = checkedBinaryString; } public void setSetupPrioBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(setupPrio, startingBit, binaryString, setupPrioLength); this.setupPrio = checkedBinaryString; } /** * holdingPrio */ public int getHoldingPrioDecimalValue() { int decimalValue = (int) PCEPComputationFactory.getDecimalValue(holdingPrio); return decimalValue; } public String getHoldingPrioBinaryString() { return this.holdingPrio; } public void setHoldingPrioDecimalValue(int decimalValue) { int binaryLength = holdingPrioLength; int maxValue = (int) PCEPComputationFactory.MaxValueFabrication(binaryLength); this.holdingPrio = PCEPComputationFactory.setDecimalValue(decimalValue, maxValue, binaryLength); } public void setHoldingPrioBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, holdingPrioLength); this.holdingPrio = checkedBinaryString; } public void setHoldingPrioBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(holdingPrio, startingBit, binaryString, holdingPrioLength); this.holdingPrio = checkedBinaryString; } /** * reserved */ public int getReservedDecimalValue() { int decimalValue = (int) PCEPComputationFactory.getDecimalValue(reserved); return decimalValue; } public String getReservedBinaryString() { return this.reserved; } public void setReservedDecimalValue(int decimalValue) { int binaryLength = reservedLength; int maxValue = (int) PCEPComputationFactory.MaxValueFabrication(binaryLength); this.reserved = PCEPComputationFactory.setDecimalValue(decimalValue, maxValue, binaryLength); } public void setReservedBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, reservedLength); this.reserved = checkedBinaryString; } public void setReservedBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(reserved, startingBit, binaryString, reservedLength); this.reserved = checkedBinaryString; } /** * flags */ // public int getFlagsDecimalValue() { // int decimalValue = (int) getDecimalValue(flags); // return decimalValue; // } public String getFlagsBinaryString() { return this.flags; } // public void setFlagsDecimalValue(int decimalValue) { // int binaryLength = flagsLength; // int maxValue = (int) // PCEPConstantValues.MaxValueFabrication(binaryLength); // // this.flags = this.setDecimalValue(decimalValue, maxValue, binaryLength); // } public void setFlagsBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(binaryString, flagsLength); this.flags = checkedBinaryString; } public void setFlagsBinaryString(int startingBit, String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(flags, startingBit, binaryString, flagsLength); this.flags = checkedBinaryString; } /** * lFlag */ public int getLFlagDecimalValue() { int relativeStartBit = (lFlagStartBit - flagsStartBit); String flagString = flags.substring(relativeStartBit, relativeStartBit + lFlagLength); int decimalValue = (int) PCEPComputationFactory.getDecimalValue(flagString); return decimalValue; } public String getLFlagBinaryString() { String binaryString = flags.substring(0, (lFlagStartBit - flagsStartBit) + lFlagLength); return binaryString; } public void setLFlagBinaryString(String binaryString) { String checkedBinaryString = PCEPComputationFactory.setBinaryString(this.flags, (lFlagStartBit - flagsStartBit), binaryString, flagsLength); this.flags = checkedBinaryString; } public String toString() { String excludeAnyInfo = "ExcludeAny=" + this.getExcludeAnyBinaryString(); String includeAnyInfo = ",IncludeAny=" + this.getIncludeAnyBinaryString(); String includeAllInfo = ",IncludeAll=" + this.getIncludeAllBinaryString(); String setupPrioInfo = ",SetupPrio=" + this.getSetupPrioDecimalValue(); String holdingPrioInfo = ",HoldingPrio=" + this.getHoldingPrioDecimalValue(); String flagsInfo = ",Flags=" + this.getFlagsBinaryString(); String reservedInfo = ",Reserved=" + this.getReservedBinaryString(); String headerInfo = this.getObjectHeader().toString(); String objectInfo = "<LSPA:" + excludeAnyInfo + includeAnyInfo + includeAllInfo + setupPrioInfo + holdingPrioInfo + flagsInfo + reservedInfo + ">"; return headerInfo + objectInfo; } public String binaryInformation() { String excludeAnyBinaryInfo = getExcludeAnyBinaryString(); String includeAnyBinaryInfo = "'" + getIncludeAnyBinaryString(); String includeAllBinaryInfo = "'" + getIncludeAllBinaryString(); String setupPrioBinaryInfo = "'" + getSetupPrioBinaryString(); String holdingPrioBinaryInfo = "'" + getHoldingPrioBinaryString(); String flagsInfo = "'" + this.getFlagsBinaryString(); String reservedBinaryInfo = "'" + getReservedBinaryString(); String headerInfo = this.getObjectHeader().binaryInformation(); String objectInfo = "[" + excludeAnyBinaryInfo + includeAnyBinaryInfo + includeAllBinaryInfo + setupPrioBinaryInfo + holdingPrioBinaryInfo + flagsInfo + reservedBinaryInfo + "]"; return headerInfo + objectInfo; } public String contentInformation() { return "[" + NAME + "]"; } }