[ONOS-2613] Unit test the BGP Update message(LinkStateAttribute)
Change-Id: Id9545296612bed858459c8386368c66cb2159173
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BgpPathAttributes.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BgpPathAttributes.java
index 13e52ca..7189ef6 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BgpPathAttributes.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/ver4/BgpPathAttributes.java
@@ -24,6 +24,7 @@
import org.onosproject.bgpio.types.AsPath;
import org.onosproject.bgpio.types.BgpErrorType;
import org.onosproject.bgpio.types.BgpValueType;
+import org.onosproject.bgpio.types.LinkStateAttributes;
import org.onosproject.bgpio.types.LocalPref;
import org.onosproject.bgpio.types.Med;
import org.onosproject.bgpio.types.NextHop;
@@ -54,7 +55,7 @@
*/
protected static final Logger log = LoggerFactory.getLogger(BgpPathAttributes.class);
- public static final int LINK_STATE_ATTRIBUTE_TYPE = 50;
+ public static final int LINK_STATE_ATTRIBUTE_TYPE = 29;
public static final int MPREACHNLRI_TYPE = 14;
public static final int MPUNREACHNLRI_TYPE = 15;
@@ -139,7 +140,7 @@
.isMpUnReachNlriSet();
break;
case LINK_STATE_ATTRIBUTE_TYPE:
- //TODO: To be merged later
+ pathAttribute = LinkStateAttributes.read(cb);
break;
default:
//skip bytes for unsupported attribute types
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/LinkStateAttributes.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/LinkStateAttributes.java
index cdf6ebe..fc69cfc 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/LinkStateAttributes.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/LinkStateAttributes.java
@@ -89,7 +89,7 @@
public static final short ATTR_PREFIX_OSPF_FWD_ADDR = 1156;
public static final short ATTR_PREFIX_OPAQUE_ATTR = 1157;
- public static final byte LINKSTATE_ATTRIB_TYPE = 50;
+ public static final byte LINKSTATE_ATTRIB_TYPE = 29;
public static final byte TYPE_AND_LEN = 4;
private boolean isLinkStateAttribute = false;
private List<BgpValueType> linkStateAttribList;
@@ -139,14 +139,14 @@
public static LinkStateAttributes read(ChannelBuffer cb)
throws BgpParseException {
- ChannelBuffer tempBuf = cb;
+ ChannelBuffer tempBuf = cb.copy();
Validation parseFlags = Validation.parseAttributeHeader(cb);
int len = parseFlags.isShort() ? parseFlags.getLength() + TYPE_AND_LEN
: parseFlags.getLength() + 3;
ChannelBuffer data = tempBuf.readBytes(len);
- if (!parseFlags.getFirstBit() || parseFlags.getSecondBit()
- || parseFlags.getThirdBit()) {
+ if (!parseFlags.getFirstBit() && parseFlags.getSecondBit()
+ && parseFlags.getThirdBit()) {
throw new BgpParseException(BgpErrorType.UPDATE_MESSAGE_ERROR,
BgpErrorType.ATTRIBUTE_FLAGS_ERROR,
data);
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpAttrNodeFlagBitTlv.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpAttrNodeFlagBitTlv.java
old mode 100755
new mode 100644
index e0fef7c..7d4e22b
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpAttrNodeFlagBitTlv.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpAttrNodeFlagBitTlv.java
@@ -56,7 +56,7 @@
* @param bExternalBit External bit
* @param bAbrBit ABR Bit
*/
- private BgpAttrNodeFlagBitTlv(boolean bOverloadBit, boolean bAttachedBit,
+ public BgpAttrNodeFlagBitTlv(boolean bOverloadBit, boolean bAttachedBit,
boolean bExternalBit, boolean bAbrBit) {
this.bOverloadBit = bOverloadBit;
this.bAttachedBit = bAttachedBit;
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpLinkAttrProtectionType.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpLinkAttrProtectionType.java
index 59011d9..8882936 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpLinkAttrProtectionType.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpLinkAttrProtectionType.java
@@ -21,9 +21,8 @@
import org.onosproject.bgpio.exceptions.BgpParseException;
import org.onosproject.bgpio.types.BgpErrorType;
import org.onosproject.bgpio.types.BgpValueType;
+import org.onosproject.bgpio.util.Constants;
import org.onosproject.bgpio.util.Validation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.base.MoreObjects;
@@ -31,70 +30,55 @@
* Implements BGP link protection type attribute.
*/
public final class BgpLinkAttrProtectionType implements BgpValueType {
-
- protected static final Logger log = LoggerFactory
- .getLogger(BgpLinkAttrProtectionType.class);
-
public static final int ATTRLINK_PROTECTIONTYPE = 1093;
public static final int LINK_PROTECTION_LEN = 2;
- public static final int EXTRA_TRAFFIC = 0x01;
- public static final int UNPROTECTED = 0x02;
- public static final int SHARED = 0x04;
- public static final int DEDICATED_ONE_ISTO_ONE = 0x08;
- public static final int DEDICATED_ONE_PLUS_ONE = 0x10;
- public static final int ENHANCED = 0x20;
+ private byte linkProtectionType;
- /* Link Protection type flags */
- private final boolean bExtraTraffic;
- private final boolean bUnprotected;
- private final boolean bShared;
- private final boolean bDedOneIstoOne;
- private final boolean bDedOnePlusOne;
- private final boolean bEnhanced;
+ /**
+ * Enum to provide Link protection types.
+ */
+ public enum ProtectionType {
+ EXTRA_TRAFFIC(1), UNPROTECTED(2), SHARED(4), DEDICATED_ONE_ISTO_ONE(8),
+ DEDICATED_ONE_PLUS_ONE(0x10), ENHANCED(0x20), RESERVED(0x40);
+ int value;
+
+ /**
+ * Assign val with the value as the link protection type.
+ *
+ * @param val link protection
+ */
+ ProtectionType(int val) {
+ value = val;
+ }
+
+ /**
+ * Returns value of link protection type.
+ *
+ * @return link protection type
+ */
+ public byte type() {
+ return (byte) value;
+ }
+ }
/**
* Constructor to initialize the value.
*
- * @param bExtraTraffic Extra Traffic
- * @param bUnprotected Unprotected
- * @param bShared Shared
- * @param bDedOneIstoOne Dedicated 1:1
- * @param bDedOnePlusOne Dedicated 1+1
- * @param bEnhanced Enhanced
+ * @param linkProtectionType link protection type
*/
- private BgpLinkAttrProtectionType(boolean bExtraTraffic,
- boolean bUnprotected,
- boolean bShared, boolean bDedOneIstoOne,
- boolean bDedOnePlusOne, boolean bEnhanced) {
- this.bExtraTraffic = bExtraTraffic;
- this.bUnprotected = bUnprotected;
- this.bShared = bShared;
- this.bDedOneIstoOne = bDedOneIstoOne;
- this.bDedOnePlusOne = bDedOnePlusOne;
- this.bEnhanced = bEnhanced;
+ public BgpLinkAttrProtectionType(byte linkProtectionType) {
+ this.linkProtectionType = linkProtectionType;
}
/**
* Returns object of this class with specified values.
*
- * @param bExtraTraffic Extra Traffic
- * @param bUnprotected Unprotected
- * @param bShared Shared
- * @param bDedOneIstoOne Dedicated 1:1
- * @param bDedOnePlusOne Dedicated 1+1
- * @param bEnhanced Enhanced
+ * @param linkProtectionType link protection type
* @return object of BgpLinkAttrProtectionType
*/
- public static BgpLinkAttrProtectionType of(boolean bExtraTraffic,
- boolean bUnprotected,
- boolean bShared,
- boolean bDedOneIstoOne,
- boolean bDedOnePlusOne,
- boolean bEnhanced) {
- return new BgpLinkAttrProtectionType(bExtraTraffic, bUnprotected,
- bShared, bDedOneIstoOne,
- bDedOnePlusOne, bEnhanced);
+ public static BgpLinkAttrProtectionType of(byte linkProtectionType) {
+ return new BgpLinkAttrProtectionType(linkProtectionType);
}
/**
@@ -106,91 +90,43 @@
*/
public static BgpLinkAttrProtectionType read(ChannelBuffer cb)
throws BgpParseException {
- short linkProtectionType;
- byte higherByte;
short lsAttrLength = cb.readShort();
- boolean bExtraTraffic;
- boolean bUnprotected;
- boolean bShared;
- boolean bDedOneIstoOne;
- boolean bDedOnePlusOne;
- boolean bEnhanced;
-
- if ((lsAttrLength != LINK_PROTECTION_LEN)
- || (cb.readableBytes() < lsAttrLength)) {
- Validation.validateLen(BgpErrorType.UPDATE_MESSAGE_ERROR,
- BgpErrorType.ATTRIBUTE_LENGTH_ERROR,
- lsAttrLength);
+ if ((lsAttrLength != LINK_PROTECTION_LEN) || (cb.readableBytes() < lsAttrLength)) {
+ Validation
+ .validateLen(BgpErrorType.UPDATE_MESSAGE_ERROR, BgpErrorType.ATTRIBUTE_LENGTH_ERROR, lsAttrLength);
}
- linkProtectionType = cb.readShort();
- higherByte = (byte) (linkProtectionType >> 8);
+ byte linkProtectionType = cb.readByte();
+ byte reserved = cb.readByte();
- bExtraTraffic = ((higherByte & (byte) EXTRA_TRAFFIC) == EXTRA_TRAFFIC);
- bUnprotected = ((higherByte & (byte) UNPROTECTED) == UNPROTECTED);
- bShared = ((higherByte & (byte) SHARED) == SHARED);
- bDedOneIstoOne = ((higherByte & (byte) DEDICATED_ONE_ISTO_ONE) == DEDICATED_ONE_ISTO_ONE);
- bDedOnePlusOne = ((higherByte & (byte) DEDICATED_ONE_PLUS_ONE) == DEDICATED_ONE_PLUS_ONE);
- bEnhanced = ((higherByte & (byte) ENHANCED) == ENHANCED);
-
- return BgpLinkAttrProtectionType.of(bExtraTraffic, bUnprotected,
- bShared, bDedOneIstoOne,
- bDedOnePlusOne, bEnhanced);
+ return BgpLinkAttrProtectionType.of(linkProtectionType);
}
/**
- * Returns ExtraTraffic Bit.
+ * Returns Link Protection Type.
*
- * @return ExtraTraffic Bit
+ * @return Link Protection Type
*/
- public boolean extraTraffic() {
- return bExtraTraffic;
- }
-
- /**
- * Returns Unprotected Bit.
- *
- * @return Unprotected Bit
- */
- public boolean unprotected() {
- return bUnprotected;
- }
-
- /**
- * Returns Shared Bit.
- *
- * @return Shared Bit
- */
- public boolean shared() {
- return bShared;
- }
-
- /**
- * Returns DedOneIstoOne Bit.
- *
- * @return DedOneIstoOne Bit
- */
- public boolean dedOneIstoOne() {
- return bDedOneIstoOne;
- }
-
- /**
- * Returns DedOnePlusOne Bit.
- *
- * @return DedOnePlusOne Bit
- */
- public boolean dedOnePlusOne() {
- return bDedOnePlusOne;
- }
-
- /**
- * Returns Enhanced Bit.
- *
- * @return Enhanced Bit
- */
- public boolean enhanced() {
- return bEnhanced;
+ public ProtectionType protectionType() throws BgpParseException {
+ switch (linkProtectionType) {
+ case Constants.EXTRA_TRAFFIC:
+ return ProtectionType.EXTRA_TRAFFIC;
+ case Constants.UNPROTECTED:
+ return ProtectionType.UNPROTECTED;
+ case Constants.SHARED:
+ return ProtectionType.SHARED;
+ case Constants.DEDICATED_ONE_ISTO_ONE:
+ return ProtectionType.DEDICATED_ONE_ISTO_ONE;
+ case Constants.DEDICATED_ONE_PLUS_ONE:
+ return ProtectionType.DEDICATED_ONE_PLUS_ONE;
+ case Constants.ENHANCED:
+ return ProtectionType.ENHANCED;
+ case Constants.RESERVED:
+ return ProtectionType.RESERVED;
+ default:
+ throw new BgpParseException("Got another type " + linkProtectionType);
+ }
}
@Override
@@ -200,8 +136,7 @@
@Override
public int hashCode() {
- return Objects.hash(bExtraTraffic, bUnprotected, bShared,
- bDedOneIstoOne, bDedOnePlusOne, bEnhanced);
+ return Objects.hash(linkProtectionType);
}
@Override
@@ -212,12 +147,7 @@
if (obj instanceof BgpLinkAttrProtectionType) {
BgpLinkAttrProtectionType other = (BgpLinkAttrProtectionType) obj;
- return Objects.equals(bExtraTraffic, other.bExtraTraffic)
- && Objects.equals(bUnprotected, other.bUnprotected)
- && Objects.equals(bShared, other.bShared)
- && Objects.equals(bDedOneIstoOne, other.bDedOneIstoOne)
- && Objects.equals(bDedOnePlusOne, other.bDedOnePlusOne)
- && Objects.equals(bEnhanced, other.bEnhanced);
+ return Objects.equals(linkProtectionType, other.linkProtectionType);
}
return false;
}
@@ -231,11 +161,8 @@
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
- .add("bExtraTraffic", bExtraTraffic)
- .add("bUnprotected", bUnprotected).add("bShared", bShared)
- .add("bDedOneIstoOne", bDedOneIstoOne)
- .add("bDedOnePlusOne", bDedOnePlusOne)
- .add("bEnhanced", bEnhanced).toString();
+ .add("linkProtectionType", linkProtectionType)
+ .toString();
}
@Override
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpLinkAttrSrlg.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpLinkAttrSrlg.java
index 4a6f23f..e1be002 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpLinkAttrSrlg.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpLinkAttrSrlg.java
@@ -33,6 +33,7 @@
public class BgpLinkAttrSrlg implements BgpValueType {
public static final short ATTRNODE_SRLG = 1097;
+ public static final short SIZE = 4;
/* Shared Risk Link Group */
private List<Integer> sRlg = new ArrayList<Integer>();
@@ -69,7 +70,7 @@
ArrayList<Integer> sRlg = new ArrayList<Integer>();
short lsAttrLength = cb.readShort();
- int len = lsAttrLength / Integer.SIZE; // each element is of 4 octets
+ int len = lsAttrLength / SIZE; // each element is of 4 octets
if (cb.readableBytes() < lsAttrLength) {
Validation.validateLen(BgpErrorType.UPDATE_MESSAGE_ERROR,
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIgpFlags.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIgpFlags.java
index 4e84191..7f6f63f 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIgpFlags.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrIgpFlags.java
@@ -57,7 +57,7 @@
* @param bOspfLclAddrBit OSPF local address Bit
* @param bOspfNSSABit OSPF propagate NSSA Bit
*/
- BgpPrefixAttrIgpFlags(boolean bisisUpDownBit,
+ public BgpPrefixAttrIgpFlags(boolean bisisUpDownBit,
boolean bOspfNoUnicastBit,
boolean bOspfLclAddrBit, boolean bOspfNSSABit) {
this.bisisUpDownBit = bisisUpDownBit;
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrRouteTag.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrRouteTag.java
index 3894c00..ecfcb9e 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrRouteTag.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/attr/BgpPrefixAttrRouteTag.java
@@ -38,6 +38,7 @@
.getLogger(BgpPrefixAttrRouteTag.class);
public static final short ATTR_PREFIX_ROUTETAG = 1153;
+ public static final short SIZE = 4;
/* Prefix Route Tag */
private List<Integer> pfxRouteTag = new ArrayList<Integer>();
@@ -74,7 +75,7 @@
ArrayList<Integer> pfxRouteTag = new ArrayList<Integer>();
short lsAttrLength = cb.readShort();
- int len = lsAttrLength / Integer.SIZE;
+ int len = lsAttrLength / SIZE;
if (cb.readableBytes() < lsAttrLength) {
Validation.validateLen(BgpErrorType.UPDATE_MESSAGE_ERROR,
diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/util/Constants.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/util/Constants.java
index 9649bf1..ff660a7 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/util/Constants.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/util/Constants.java
@@ -34,4 +34,11 @@
public static final short AFI_VALUE = 16388;
public static final byte VPN_SAFI_VALUE = (byte) 0x80;
public static final byte SAFI_VALUE = 71;
+ public static final int EXTRA_TRAFFIC = 0x01;
+ public static final int UNPROTECTED = 0x02;
+ public static final int SHARED = 0x04;
+ public static final int DEDICATED_ONE_ISTO_ONE = 0x08;
+ public static final int DEDICATED_ONE_PLUS_ONE = 0x10;
+ public static final int ENHANCED = 0x20;
+ public static final int RESERVED = 0x40;
}
\ No newline at end of file