blob: 4ea803c611a017d9ccbdfbeb902a56eea57d2221 [file] [log] [blame]
/*
* Copyright 2020-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.driver.traceable;
import org.onlab.packet.EthType;
import org.onlab.packet.IpPrefix;
import org.onlab.packet.MacAddress;
import org.onlab.packet.MplsLabel;
import org.onlab.packet.VlanId;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import org.onosproject.net.driver.DriverAdapter;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.TrafficSelector;
import static org.onlab.packet.EthType.EtherType.IPV4;
import static org.onlab.packet.EthType.EtherType.MPLS_UNICAST;
/**
* Helper class for objects related to the Traceable tests.
*/
final class TraceableTestObjects {
private TraceableTestObjects() {
// Banning construction
}
// Test drivers name
static final String OFDPA_DRIVER = "ofdpa";
static final String OVS_OFDPA_DRIVER = "ofdpa-ovs";
// Test device ids
static final DeviceId OFDPA_DEVICE = DeviceId.deviceId("ofdpaDevice");
// Input ports
static final PortNumber PORT = PortNumber.portNumber("1");
static final PortNumber OUT_PORT = PortNumber.portNumber("3");
static final PortNumber UP_PORT = PortNumber.portNumber("10");
static final PortNumber UP_PORT_1 = PortNumber.portNumber("11");
static final ConnectPoint OFDPA_CP = ConnectPoint.deviceConnectPoint(OFDPA_DEVICE + "/" + PORT.toLong());
static final ConnectPoint UP_OFDPA_CP = ConnectPoint.deviceConnectPoint(OFDPA_DEVICE + "/" + UP_PORT.toLong());
// Misc
static final VlanId HOST_VLAN = VlanId.vlanId((short) 100);
static final VlanId DEFAULT_VLAN = VlanId.vlanId((short) 4094);
static final IpPrefix IP_PUNT = IpPrefix.valueOf("10.0.2.254/32");
static final MacAddress HOST_MAC = MacAddress.valueOf("00:AA:00:00:00:02");
static final IpPrefix IP_DST = IpPrefix.valueOf("10.0.2.2/32");
static final IpPrefix IP_DST_1 = IpPrefix.valueOf("10.0.3.1/32");
static final MacAddress LEAF_MAC = MacAddress.valueOf("00:00:00:00:02:04");
static final IpPrefix PREFIX_DST = IpPrefix.valueOf("10.0.3.0/24");
static final MacAddress SPINE_MAC = MacAddress.valueOf("00:00:00:00:02:26");
static final MacAddress SPINE_MAC_1 = MacAddress.valueOf("00:00:00:00:02:26");
static final MplsLabel MPLS_LABEL = MplsLabel.mplsLabel(205);
// Input packets
static final TrafficSelector IN_PUNT_IP_PACKET = DefaultTrafficSelector.builder()
.matchInPort(OFDPA_CP.port())
.matchEthType(IPV4.ethType().toShort())
.matchVlanId(VlanId.NONE)
.matchIPDst(IP_PUNT)
.build();
static final TrafficSelector IN_ARP_PACKET = DefaultTrafficSelector.builder()
.matchInPort(OFDPA_CP.port())
.matchIPDst(IpPrefix.valueOf("255.255.255.255/32"))
.matchEthType(EthType.EtherType.ARP.ethType().toShort())
.matchVlanId(VlanId.NONE)
.build();
static final TrafficSelector IN_PUNT_LLDP_PACKET = DefaultTrafficSelector.builder()
.matchInPort(OFDPA_CP.port())
.matchEthType(EthType.EtherType.LLDP.ethType().toShort())
.matchVlanId(VlanId.NONE)
.build();
static final TrafficSelector IN_L2_BRIDG_UNTAG_PACKET = DefaultTrafficSelector.builder()
.matchInPort(OFDPA_CP.port())
.matchEthType(IPV4.ethType().toShort())
.matchVlanId(VlanId.NONE)
.matchEthDst(HOST_MAC)
.build();
static final TrafficSelector IN_L2_BROAD_UNTAG_PACKET = DefaultTrafficSelector.builder()
.matchInPort(OFDPA_CP.port())
.matchVlanId(VlanId.NONE)
.build();
static final TrafficSelector IN_L3_UCAST_UNTAG_PACKET = DefaultTrafficSelector.builder()
.matchInPort(UP_OFDPA_CP.port())
.matchEthDst(LEAF_MAC)
.matchEthType(IPV4.ethType().toShort())
.matchVlanId(VlanId.NONE)
.matchIPDst(IP_DST)
.build();
static final TrafficSelector IN_L3_ECMP_PACKET = DefaultTrafficSelector.builder()
.matchInPort(OFDPA_CP.port())
.matchEthDst(LEAF_MAC)
.matchEthType(IPV4.ethType().toShort())
.matchVlanId(VlanId.NONE)
.matchIPDst(IP_DST_1)
.build();
static final TrafficSelector IN_MPLS_ECMP_PACKET = DefaultTrafficSelector.builder()
.matchInPort(UP_OFDPA_CP.port())
.matchEthDst(LEAF_MAC)
.matchEthType(MPLS_UNICAST.ethType().toShort())
.matchVlanId(VlanId.NONE)
.matchIPDst(IP_DST_1)
.matchMplsLabel(MPLS_LABEL)
.matchMplsBos(true)
.build();
static final TrafficSelector IN_MPLS_ECMP_PACKET_OFDPA = DefaultTrafficSelector.builder()
.matchInPort(UP_OFDPA_CP.port())
.matchEthDst(LEAF_MAC)
.matchEthType(MPLS_UNICAST.ethType().toShort())
.matchVlanId(VlanId.NONE)
.matchIPDst(IP_DST_1)
.matchMplsLabel(MPLS_LABEL)
.matchMplsBos(true)
.matchMetadata(IPV4.ethType().toShort())
.build();
// Egress packets
static final TrafficSelector OUT_L3_UCAST_UNTAG_PACKET = DefaultTrafficSelector.builder(IN_L3_UCAST_UNTAG_PACKET)
.matchEthSrc(LEAF_MAC)
.matchEthDst(HOST_MAC)
.build();
static final TrafficSelector OUT_L3_ECMP_PACKET = DefaultTrafficSelector.builder(IN_L3_ECMP_PACKET)
.matchEthSrc(LEAF_MAC)
.matchEthDst(SPINE_MAC)
.matchEthType(MPLS_UNICAST.ethType().toShort())
.matchMplsLabel(MPLS_LABEL)
.matchMplsBos(true)
.build();
static final TrafficSelector OUT_L3_ECMP_PACKET_1 = DefaultTrafficSelector.builder(IN_L3_ECMP_PACKET)
.matchEthSrc(LEAF_MAC)
.matchEthDst(SPINE_MAC_1)
.matchEthType(MPLS_UNICAST.ethType().toShort())
.matchMplsLabel(MPLS_LABEL)
.matchMplsBos(true)
.build();
static final TrafficSelector OUT_L3_ECMP_PACKET_OFDPA = DefaultTrafficSelector.builder(IN_L3_ECMP_PACKET)
.matchEthSrc(LEAF_MAC)
.matchEthDst(SPINE_MAC)
.matchEthType(MPLS_UNICAST.ethType().toShort())
.matchMplsLabel(MPLS_LABEL)
.matchMplsBos(true)
.matchMetadata(IPV4.ethType().toShort())
.build();
static final TrafficSelector OUT_L3_ECMP_PACKET_OFDPA_1 = DefaultTrafficSelector.builder(IN_L3_ECMP_PACKET)
.matchEthSrc(LEAF_MAC)
.matchEthDst(SPINE_MAC_1)
.matchEthType(MPLS_UNICAST.ethType().toShort())
.matchMplsLabel(MPLS_LABEL)
.matchMplsBos(true)
.matchMetadata(IPV4.ethType().toShort())
.build();
static final TrafficSelector OUT_MPLS_ECMP_PACKET = DefaultTrafficSelector.builder()
.matchInPort(UP_OFDPA_CP.port())
.matchEthSrc(LEAF_MAC)
.matchEthDst(SPINE_MAC)
.matchEthType(IPV4.ethType().toShort())
.matchVlanId(VlanId.NONE)
.matchIPDst(IP_DST_1)
.build();
static final TrafficSelector OUT_L2_BROAD_EMPTY = DefaultTrafficSelector.builder()
.matchInPort(OFDPA_CP.port())
.matchVlanId(HOST_VLAN)
.build();
// Test cases
enum TraceableTest {
PUNT_IP_OFDPA,
PUNT_IP_OVS_OFDPA,
ARP_OFDPA,
ARP_OVS_OFDPA,
PUNT_LLDP_OFDPA,
PUNT_LLDP_OVS_OFDPA,
L2_BRIDG_UNTAG_OFDPA,
L2_BRIDG_UNTAG_OVS_OFDPA,
L2_BROAD_UNTAG_OFDPA,
L2_BROAD_UNTAG_OVS_OFDPA,
L3_UCAST_UNTAG_OFDPA,
L3_UCAST_UNTAG_OVS_OFDPA,
L3_ECMP_OFDPA,
L3_ECMP_OVS_OFDPA,
MPLS_ECMP_OFDPA,
MPLS_ECMP_OVS_OFDPA,
L2_BROAD_EMPTY_OFDPA,
L2_BROAD_EMPTY_OVS_OFDPA,
L2_BRIDG_NOT_ORDERED_OFDPA,
L2_BRIDG_NOT_ORDERED_OVS_OFDPA,
}
// Test driver class
static class TestDriver extends DriverAdapter {
private String name;
public TestDriver(String name) {
this.name = name;
}
@Override
public String name() {
return name;
}
}
}