use of org.onlab.packet.Ip4Address in project onos by opennetworkinglab.
the class BgpUpdate method parseAttributeTypeNextHop.
/**
* Parses BGP UPDATE Attribute Type NEXT_HOP.
*
* @param bgpSession the BGP Session to use
* @param ctx the Channel Handler Context
* @param attrTypeCode the attribute type code
* @param attrLen the attribute length (in octets)
* @param attrFlags the attribute flags
* @param message the message to parse
* @return the parsed NEXT_HOP value
* @throws BgpMessage.BgpParseException
*/
private static Ip4Address parseAttributeTypeNextHop(BgpSession bgpSession, ChannelHandlerContext ctx, int attrTypeCode, int attrLen, int attrFlags, ChannelBuffer message) throws BgpMessage.BgpParseException {
// Check the Attribute Length
if (attrLen != BgpConstants.Update.NextHop.LENGTH) {
// ERROR: Attribute Length Error
actionsBgpUpdateAttributeLengthError(bgpSession, ctx, attrTypeCode, attrLen, attrFlags, message);
String errorMsg = "Attribute Length Error";
throw new BgpMessage.BgpParseException(errorMsg);
}
message.markReaderIndex();
Ip4Address nextHopAddress = Ip4Address.valueOf((int) message.readUnsignedInt());
//
if (nextHopAddress.equals(bgpSession.localInfo().ip4Address())) {
// ERROR: Invalid NEXT_HOP Attribute
message.resetReaderIndex();
actionsBgpUpdateInvalidNextHopAttribute(bgpSession, ctx, attrTypeCode, attrLen, attrFlags, message, nextHopAddress);
String errorMsg = "Invalid NEXT_HOP Attribute: " + nextHopAddress;
throw new BgpMessage.BgpParseException(errorMsg);
}
return nextHopAddress;
}
use of org.onlab.packet.Ip4Address in project onos by opennetworkinglab.
the class BgpUpdate method parseAttributeTypeAggregator.
/**
* Parses BGP UPDATE Attribute Type AGGREGATOR.
*
* @param bgpSession the BGP Session to use
* @param ctx the Channel Handler Context
* @param attrTypeCode the attribute type code
* @param attrLen the attribute length (in octets)
* @param attrFlags the attribute flags
* @param message the message to parse
* @return the parsed AGGREGATOR value: a tuple of <AS-Number, IP-Address>
* @throws BgpMessage.BgpParseException
*/
private static Pair<Long, Ip4Address> parseAttributeTypeAggregator(BgpSession bgpSession, ChannelHandlerContext ctx, int attrTypeCode, int attrLen, int attrFlags, ChannelBuffer message) throws BgpMessage.BgpParseException {
int expectedAttrLen;
if (bgpSession.isAs4OctetCapable()) {
expectedAttrLen = BgpConstants.Update.Aggregator.AS4_LENGTH;
} else {
expectedAttrLen = BgpConstants.Update.Aggregator.AS2_LENGTH;
}
// Check the Attribute Length
if (attrLen != expectedAttrLen) {
// ERROR: Attribute Length Error
actionsBgpUpdateAttributeLengthError(bgpSession, ctx, attrTypeCode, attrLen, attrFlags, message);
String errorMsg = "Attribute Length Error";
throw new BgpMessage.BgpParseException(errorMsg);
}
// The AGGREGATOR AS number
long aggregatorAsNumber;
if (bgpSession.isAs4OctetCapable()) {
aggregatorAsNumber = message.readUnsignedInt();
} else {
aggregatorAsNumber = message.readUnsignedShort();
}
// The AGGREGATOR IP address
Ip4Address aggregatorIpAddress = Ip4Address.valueOf((int) message.readUnsignedInt());
Pair<Long, Ip4Address> aggregator = Pair.of(aggregatorAsNumber, aggregatorIpAddress);
return aggregator;
}
use of org.onlab.packet.Ip4Address in project onos by opennetworkinglab.
the class BgpRouteEntryTest method testIsLocalRoute.
/**
* Tests whether a BGP route entry is a local route.
*/
@Test
public void testIsLocalRoute() {
//
// Test non-local route
//
BgpRouteEntry bgpRouteEntry = generateBgpRouteEntry();
assertThat(bgpRouteEntry.isLocalRoute(), is(false));
//
// Test local route with AS Path that begins with AS_SET
//
Ip4Prefix prefix = Ip4Prefix.valueOf("1.2.3.0/24");
Ip4Address nextHop = Ip4Address.valueOf("5.6.7.8");
byte origin = BgpConstants.Update.Origin.IGP;
// Setup the AS Path
ArrayList<BgpRouteEntry.PathSegment> pathSegments = new ArrayList<>();
byte pathSegmentType1 = (byte) BgpConstants.Update.AsPath.AS_SET;
ArrayList<Long> segmentAsNumbers1 = new ArrayList<>();
segmentAsNumbers1.add(1L);
segmentAsNumbers1.add(2L);
segmentAsNumbers1.add(3L);
BgpRouteEntry.PathSegment pathSegment1 = new BgpRouteEntry.PathSegment(pathSegmentType1, segmentAsNumbers1);
pathSegments.add(pathSegment1);
//
byte pathSegmentType2 = (byte) BgpConstants.Update.AsPath.AS_SEQUENCE;
ArrayList<Long> segmentAsNumbers2 = new ArrayList<>();
segmentAsNumbers2.add(4L);
segmentAsNumbers2.add(5L);
segmentAsNumbers2.add(6L);
BgpRouteEntry.PathSegment pathSegment2 = new BgpRouteEntry.PathSegment(pathSegmentType2, segmentAsNumbers2);
pathSegments.add(pathSegment2);
//
BgpRouteEntry.AsPath asPath = new BgpRouteEntry.AsPath(pathSegments);
//
long localPref = 100;
long multiExitDisc = 20;
//
bgpRouteEntry = new BgpRouteEntry(bgpSession, prefix, nextHop, origin, asPath, localPref);
bgpRouteEntry.setMultiExitDisc(multiExitDisc);
assertThat(bgpRouteEntry.isLocalRoute(), is(true));
//
// Test local route with empty AS Path
//
pathSegments = new ArrayList<>();
asPath = new BgpRouteEntry.AsPath(pathSegments);
bgpRouteEntry = new BgpRouteEntry(bgpSession, prefix, nextHop, origin, asPath, localPref);
bgpRouteEntry.setMultiExitDisc(multiExitDisc);
assertThat(bgpRouteEntry.isLocalRoute(), is(true));
}
use of org.onlab.packet.Ip4Address in project onos by opennetworkinglab.
the class BgpRouteEntryTest method testInvalidConstructorNullAsPath.
/**
* Tests invalid class constructor for null AS Path.
*/
@Test(expected = NullPointerException.class)
public void testInvalidConstructorNullAsPath() {
Ip4Prefix prefix = Ip4Prefix.valueOf("1.2.3.0/24");
Ip4Address nextHop = Ip4Address.valueOf("5.6.7.8");
byte origin = BgpConstants.Update.Origin.IGP;
BgpRouteEntry.AsPath asPath = null;
long localPref = 100;
new BgpRouteEntry(bgpSession, prefix, nextHop, origin, asPath, localPref);
}
use of org.onlab.packet.Ip4Address in project onos by opennetworkinglab.
the class RouteEntryTest method testToString.
/**
* Tests object string representation.
*/
@Test
public void testToString() {
Ip4Prefix prefix = Ip4Prefix.valueOf("1.2.3.0/24");
Ip4Address nextHop = Ip4Address.valueOf("5.6.7.8");
RouteEntry routeEntry = new RouteEntry(prefix, nextHop);
assertThat(routeEntry.toString(), is("RouteEntry{prefix=1.2.3.0/24, nextHop=5.6.7.8}"));
Ip6Prefix prefix6 = Ip6Prefix.valueOf("1000::/64");
Ip6Address nextHop6 = Ip6Address.valueOf("2000::1");
RouteEntry routeEntry6 = new RouteEntry(prefix6, nextHop6);
assertThat(routeEntry6.toString(), is("RouteEntry{prefix=1000::/64, nextHop=2000::1}"));
}
Aggregations