Search in sources :

Example 76 with Ip4Address

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;
}
Also used : Ip4Address(org.onlab.packet.Ip4Address)

Example 77 with Ip4Address

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;
}
Also used : Ip4Address(org.onlab.packet.Ip4Address)

Example 78 with Ip4Address

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));
}
Also used : Ip4Address(org.onlab.packet.Ip4Address) ArrayList(java.util.ArrayList) Ip4Prefix(org.onlab.packet.Ip4Prefix) Test(org.junit.Test)

Example 79 with Ip4Address

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);
}
Also used : Ip4Address(org.onlab.packet.Ip4Address) Ip4Prefix(org.onlab.packet.Ip4Prefix) Test(org.junit.Test)

Example 80 with Ip4Address

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}"));
}
Also used : Ip6Prefix(org.onlab.packet.Ip6Prefix) Ip6Address(org.onlab.packet.Ip6Address) Ip4Address(org.onlab.packet.Ip4Address) Ip4Prefix(org.onlab.packet.Ip4Prefix) Test(org.junit.Test)

Aggregations

Ip4Address (org.onlab.packet.Ip4Address)98 Test (org.junit.Test)29 Ip4Prefix (org.onlab.packet.Ip4Prefix)20 ChannelBuffer (org.jboss.netty.buffer.ChannelBuffer)15 MacAddress (org.onlab.packet.MacAddress)15 ArrayList (java.util.ArrayList)14 Ip6Address (org.onlab.packet.Ip6Address)14 IpAddress (org.onlab.packet.IpAddress)13 LinkedList (java.util.LinkedList)12 Ethernet (org.onlab.packet.Ethernet)12 ProtocolType (org.onosproject.bgpio.protocol.linkstate.BgpNodeLSNlriVer4.ProtocolType)12 BgpPathAttributes (org.onosproject.bgpio.protocol.ver4.BgpPathAttributes)12 AsPath (org.onosproject.bgpio.types.AsPath)12 BgpHeader (org.onosproject.bgpio.types.BgpHeader)12 BgpValueType (org.onosproject.bgpio.types.BgpValueType)12 LinkStateAttributes (org.onosproject.bgpio.types.LinkStateAttributes)12 Med (org.onosproject.bgpio.types.Med)12 MpReachNlri (org.onosproject.bgpio.types.MpReachNlri)12 Origin (org.onosproject.bgpio.types.Origin)12 OriginType (org.onosproject.bgpio.types.Origin.OriginType)12