Add P4 info to java constant tool

Change-Id: I73a451404e8b657845bfc9b6a37abd824a10910e
This commit is contained in:
Yi Tseng 2018-04-12 16:37:34 +08:00 committed by Carmelo Cascone
parent 1e5734480f
commit 43ee7e8ea8
13 changed files with 509 additions and 319 deletions

View File

@ -32,192 +32,160 @@ public final class FabricConstants {
private FabricConstants() {
}
public static final String DOT = ".";
// Header IDs
public static final String HDR = "hdr";
public static final String STANDARD_METADATA = "standard_metadata";
public static final String MPLS = "mpls";
public static final String FABRIC_METADATA = "fabric_metadata";
public static final String IPV4 = "ipv4";
public static final String IPV6 = "ipv6";
public static final String ETHERNET = "ethernet";
public static final String VLAN_TAG = "vlan_tag";
public static final String ICMP = "icmp";
// Header field IDs
public static final PiMatchFieldId HF_FABRIC_METADATA_L4_SRC_PORT_ID =
buildPiMatchField(FABRIC_METADATA, "l4_src_port", false);
public static final PiMatchFieldId HF_IPV4_SRC_ADDR_ID =
buildPiMatchField(IPV4, "src_addr", true);
public static final PiMatchFieldId HF_VLAN_TAG_VLAN_ID_ID =
buildPiMatchField(VLAN_TAG, "vlan_id", true);
public static final PiMatchFieldId HF_MPLS_LABEL_ID =
buildPiMatchField(MPLS, "label", true);
public static final PiMatchFieldId HF_IPV6_DST_ADDR_ID =
buildPiMatchField(IPV6, "dst_addr", true);
public static final PiMatchFieldId HF_ETHERNET_SRC_ADDR_ID =
buildPiMatchField(ETHERNET, "src_addr", true);
public static final PiMatchFieldId HF_ICMP_ICMP_TYPE_ID =
buildPiMatchField(ICMP, "icmp_type", true);
public static final PiMatchFieldId HF_STANDARD_METADATA_EGRESS_PORT_ID =
buildPiMatchField(STANDARD_METADATA, "egress_port", false);
public static final PiMatchFieldId HF_FABRIC_METADATA_NEXT_ID_ID =
buildPiMatchField(FABRIC_METADATA, "next_id", false);
public static final PiMatchFieldId HF_FABRIC_METADATA_L4_DST_PORT_ID =
buildPiMatchField(FABRIC_METADATA, "l4_dst_port", false);
public static final PiMatchFieldId HF_STANDARD_METADATA_INGRESS_PORT_ID =
buildPiMatchField(STANDARD_METADATA, "ingress_port", false);
public static final PiMatchFieldId HF_FABRIC_METADATA_ORIGINAL_ETHER_TYPE_ID =
buildPiMatchField(FABRIC_METADATA, "original_ether_type", false);
public static final PiMatchFieldId HF_IPV4_DST_ADDR_ID =
buildPiMatchField(IPV4, "dst_addr", true);
public static final PiMatchFieldId HF_VLAN_TAG_IS_VALID_ID =
buildPiMatchField(VLAN_TAG, "is_valid", true);
public static final PiMatchFieldId HF_FABRIC_METADATA_IP_PROTO_ID =
buildPiMatchField(FABRIC_METADATA, "ip_proto", false);
public static final PiMatchFieldId HF_ETHERNET_DST_ADDR_ID =
buildPiMatchField(ETHERNET, "dst_addr", true);
public static final PiMatchFieldId HF_ICMP_ICMP_CODE_ID =
buildPiMatchField(ICMP, "icmp_code", true);
private static PiMatchFieldId buildPiMatchField(String header, String field, boolean withHdrPrefix) {
if (withHdrPrefix) {
return PiMatchFieldId.of(HDR + DOT + header + DOT + field);
} else {
return PiMatchFieldId.of(header + DOT + field);
}
}
public static final PiMatchFieldId FABRIC_METADATA_L4_SRC_PORT =
PiMatchFieldId.of("fabric_metadata.l4_src_port");
public static final PiMatchFieldId HDR_IPV4_SRC_ADDR =
PiMatchFieldId.of("hdr.ipv4.src_addr");
public static final PiMatchFieldId HDR_VLAN_TAG_VLAN_ID =
PiMatchFieldId.of("hdr.vlan_tag.vlan_id");
public static final PiMatchFieldId HDR_MPLS_LABEL =
PiMatchFieldId.of("hdr.mpls.label");
public static final PiMatchFieldId HDR_IPV6_DST_ADDR =
PiMatchFieldId.of("hdr.ipv6.dst_addr");
public static final PiMatchFieldId HDR_ETHERNET_SRC_ADDR =
PiMatchFieldId.of("hdr.ethernet.src_addr");
public static final PiMatchFieldId HDR_ICMP_ICMP_TYPE =
PiMatchFieldId.of("hdr.icmp.icmp_type");
public static final PiMatchFieldId STANDARD_METADATA_EGRESS_PORT =
PiMatchFieldId.of("standard_metadata.egress_port");
public static final PiMatchFieldId FABRIC_METADATA_NEXT_ID =
PiMatchFieldId.of("fabric_metadata.next_id");
public static final PiMatchFieldId FABRIC_METADATA_L4_DST_PORT =
PiMatchFieldId.of("fabric_metadata.l4_dst_port");
public static final PiMatchFieldId STANDARD_METADATA_INGRESS_PORT =
PiMatchFieldId.of("standard_metadata.ingress_port");
public static final PiMatchFieldId FABRIC_METADATA_ORIGINAL_ETHER_TYPE =
PiMatchFieldId.of("fabric_metadata.original_ether_type");
public static final PiMatchFieldId HDR_IPV4_DST_ADDR =
PiMatchFieldId.of("hdr.ipv4.dst_addr");
public static final PiMatchFieldId HDR_VLAN_TAG_IS_VALID =
PiMatchFieldId.of("hdr.vlan_tag.is_valid");
public static final PiMatchFieldId FABRIC_METADATA_IP_PROTO =
PiMatchFieldId.of("fabric_metadata.ip_proto");
public static final PiMatchFieldId HDR_ETHERNET_DST_ADDR =
PiMatchFieldId.of("hdr.ethernet.dst_addr");
public static final PiMatchFieldId HDR_ICMP_ICMP_CODE =
PiMatchFieldId.of("hdr.icmp.icmp_code");
// Table IDs
public static final PiTableId TBL_ACL_ID =
public static final PiTableId FABRIC_INGRESS_FORWARDING_ACL =
PiTableId.of("FabricIngress.forwarding.acl");
public static final PiTableId TBL_HASHED_ID =
public static final PiTableId FABRIC_INGRESS_NEXT_HASHED =
PiTableId.of("FabricIngress.next.hashed");
public static final PiTableId TBL_EGRESS_VLAN_ID =
public static final PiTableId FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN =
PiTableId.of("FabricEgress.egress_next.egress_vlan");
public static final PiTableId TBL_MPLS_ID =
public static final PiTableId FABRIC_INGRESS_FORWARDING_MPLS =
PiTableId.of("FabricIngress.forwarding.mpls");
public static final PiTableId TBL_MULTICAST_ID =
public static final PiTableId FABRIC_INGRESS_NEXT_MULTICAST =
PiTableId.of("FabricIngress.next.multicast");
public static final PiTableId TBL_MULTICAST_V4_ID =
public static final PiTableId FABRIC_INGRESS_FORWARDING_MULTICAST_V4 =
PiTableId.of("FabricIngress.forwarding.multicast_v4");
public static final PiTableId TBL_MULTICAST_V6_ID =
public static final PiTableId FABRIC_INGRESS_FORWARDING_MULTICAST_V6 =
PiTableId.of("FabricIngress.forwarding.multicast_v6");
public static final PiTableId TBL_UNICAST_V4_ID =
public static final PiTableId FABRIC_INGRESS_FORWARDING_UNICAST_V4 =
PiTableId.of("FabricIngress.forwarding.unicast_v4");
public static final PiTableId TBL_FWD_CLASSIFIER_ID =
public static final PiTableId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER =
PiTableId.of("FabricIngress.filtering.fwd_classifier");
public static final PiTableId TBL_BRIDGING_ID =
public static final PiTableId FABRIC_INGRESS_FORWARDING_BRIDGING =
PiTableId.of("FabricIngress.forwarding.bridging");
public static final PiTableId TBL_SIMPLE_ID =
public static final PiTableId FABRIC_INGRESS_NEXT_SIMPLE =
PiTableId.of("FabricIngress.next.simple");
public static final PiTableId TBL_INGRESS_PORT_VLAN_ID =
public static final PiTableId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN =
PiTableId.of("FabricIngress.filtering.ingress_port_vlan");
public static final PiTableId TBL_UNICAST_V6_ID =
public static final PiTableId FABRIC_INGRESS_FORWARDING_UNICAST_V6 =
PiTableId.of("FabricIngress.forwarding.unicast_v6");
public static final PiTableId TBL_VLAN_META_ID =
public static final PiTableId FABRIC_INGRESS_NEXT_VLAN_META =
PiTableId.of("FabricIngress.next.vlan_meta");
// Indirect Counter IDs
public static final PiCounterId CNT_EGRESS_PORT_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER =
PiCounterId.of("FabricIngress.port_counters_control.egress_port_counter");
public static final PiCounterId CNT_INGRESS_PORT_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_INGRESS_PORT_COUNTER =
PiCounterId.of("FabricIngress.port_counters_control.ingress_port_counter");
// Direct Counter IDs
public static final PiCounterId CNT_ACL_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FORWARDING_ACL_COUNTER =
PiCounterId.of("FabricIngress.forwarding.acl_counter");
public static final PiCounterId CNT_MULTICAST_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_NEXT_MULTICAST_COUNTER =
PiCounterId.of("FabricIngress.next.multicast_counter");
public static final PiCounterId CNT_VLAN_META_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_NEXT_VLAN_META_COUNTER =
PiCounterId.of("FabricIngress.next.vlan_meta_counter");
public static final PiCounterId CNT_FWD_CLASSIFIER_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER_COUNTER =
PiCounterId.of("FabricIngress.filtering.fwd_classifier_counter");
public static final PiCounterId CNT_BRIDGING_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FORWARDING_BRIDGING_COUNTER =
PiCounterId.of("FabricIngress.forwarding.bridging_counter");
public static final PiCounterId CNT_MULTICAST_V6_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FORWARDING_MULTICAST_V6_COUNTER =
PiCounterId.of("FabricIngress.forwarding.multicast_v6_counter");
public static final PiCounterId CNT_MULTICAST_V4_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FORWARDING_MULTICAST_V4_COUNTER =
PiCounterId.of("FabricIngress.forwarding.multicast_v4_counter");
public static final PiCounterId CNT_UNICAST_V6_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FORWARDING_UNICAST_V6_COUNTER =
PiCounterId.of("FabricIngress.forwarding.unicast_v6_counter");
public static final PiCounterId CNT_UNICAST_V4_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FORWARDING_UNICAST_V4_COUNTER =
PiCounterId.of("FabricIngress.forwarding.unicast_v4_counter");
public static final PiCounterId CNT_SIMPLE_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_NEXT_SIMPLE_COUNTER =
PiCounterId.of("FabricIngress.next.simple_counter");
public static final PiCounterId CNT_INGRESS_PORT_VLAN_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN_COUNTER =
PiCounterId.of("FabricIngress.filtering.ingress_port_vlan_counter");
public static final PiCounterId CNT_MPLS_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_FORWARDING_MPLS_COUNTER =
PiCounterId.of("FabricIngress.forwarding.mpls_counter");
public static final PiCounterId CNT_HASHED_COUNTER_ID =
public static final PiCounterId FABRIC_INGRESS_NEXT_HASHED_COUNTER =
PiCounterId.of("FabricIngress.next.hashed_counter");
// Action IDs
public static final PiActionId ACT_FABRICINGRESS_FILTERING_DROP_ID =
public static final PiActionId FABRIC_INGRESS_FILTERING_DROP =
PiActionId.of("FabricIngress.filtering.drop");
public static final PiActionId ACT_FABRICINGRESS_NEXT_SET_VLAN_ID =
public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN =
PiActionId.of("FabricIngress.next.set_vlan");
public static final PiActionId ACT_FABRICINGRESS_FORWARDING_POP_MPLS_AND_NEXT_ID =
public static final PiActionId FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT =
PiActionId.of("FabricIngress.forwarding.pop_mpls_and_next");
public static final PiActionId ACT_FABRICEGRESS_EGRESS_NEXT_POP_VLAN_ID =
public static final PiActionId FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN =
PiActionId.of("FabricEgress.egress_next.pop_vlan");
public static final PiActionId ACT_FABRICINGRESS_FILTERING_SET_FORWARDING_TYPE_ID =
public static final PiActionId FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE =
PiActionId.of("FabricIngress.filtering.set_forwarding_type");
public static final PiActionId ACT_NOP_ID = PiActionId.of("nop");
public static final PiActionId ACT_FABRICINGRESS_FILTERING_SET_VLAN_ID =
public static final PiActionId NOP = PiActionId.of("nop");
public static final PiActionId FABRIC_INGRESS_FILTERING_SET_VLAN =
PiActionId.of("FabricIngress.filtering.set_vlan");
public static final PiActionId ACT_FABRICINGRESS_NEXT_MPLS_ROUTING_V6_ID =
public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V6 =
PiActionId.of("FabricIngress.next.mpls_routing_v6");
public static final PiActionId ACT_FABRICEGRESS_PKT_IO_EGRESS_POP_VLAN_ID =
public static final PiActionId FABRIC_EGRESS_PKT_IO_EGRESS_POP_VLAN =
PiActionId.of("FabricEgress.pkt_io_egress.pop_vlan");
public static final PiActionId ACT_FABRICINGRESS_NEXT_L3_ROUTING_VLAN_ID =
public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN =
PiActionId.of("FabricIngress.next.l3_routing_vlan");
public static final PiActionId ACT_NOACTION_ID = PiActionId.of("NoAction");
public static final PiActionId ACT_FABRICINGRESS_NEXT_SET_MCAST_GROUP_ID =
public static final PiActionId NO_ACTION = PiActionId.of("NoAction");
public static final PiActionId FABRIC_INGRESS_NEXT_SET_MCAST_GROUP =
PiActionId.of("FabricIngress.next.set_mcast_group");
public static final PiActionId ACT_FABRICINGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER_ID =
public static final PiActionId FABRIC_INGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER =
PiActionId.of("FabricIngress.forwarding.duplicate_to_controller");
public static final PiActionId ACT_FABRICINGRESS_NEXT_L3_ROUTING_ID =
public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING =
PiActionId.of("FabricIngress.next.l3_routing");
public static final PiActionId ACT_FABRICINGRESS_NEXT_MPLS_ROUTING_V4_ID =
public static final PiActionId FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4 =
PiActionId.of("FabricIngress.next.mpls_routing_v4");
public static final PiActionId ACT_FABRICINGRESS_NEXT_SET_VLAN_OUTPUT_ID =
public static final PiActionId FABRIC_INGRESS_NEXT_SET_VLAN_OUTPUT =
PiActionId.of("FabricIngress.next.set_vlan_output");
public static final PiActionId ACT_FABRICINGRESS_FORWARDING_SET_NEXT_ID_ID =
public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID =
PiActionId.of("FabricIngress.forwarding.set_next_id");
public static final PiActionId ACT_FABRICINGRESS_FILTERING_PUSH_INTERNAL_VLAN_ID =
public static final PiActionId FABRIC_INGRESS_FILTERING_PUSH_INTERNAL_VLAN =
PiActionId.of("FabricIngress.filtering.push_internal_vlan");
public static final PiActionId ACT_FABRICINGRESS_FORWARDING_DROP_ID =
public static final PiActionId FABRIC_INGRESS_FORWARDING_DROP =
PiActionId.of("FabricIngress.forwarding.drop");
public static final PiActionId ACT_FABRICINGRESS_NEXT_OUTPUT_ID =
public static final PiActionId FABRIC_INGRESS_NEXT_OUTPUT =
PiActionId.of("FabricIngress.next.output");
// Action Param IDs
public static final PiActionParamId ACT_PRM_DMAC_ID =
PiActionParamId.of("dmac");
public static final PiActionParamId ACT_PRM_PORT_NUM_ID =
public static final PiActionParamId DMAC = PiActionParamId.of("dmac");
public static final PiActionParamId PORT_NUM =
PiActionParamId.of("port_num");
public static final PiActionParamId ACT_PRM_LABEL_ID =
PiActionParamId.of("label");
public static final PiActionParamId ACT_PRM_SMAC_ID =
PiActionParamId.of("smac");
public static final PiActionParamId ACT_PRM_GID_ID =
PiActionParamId.of("gid");
public static final PiActionParamId ACT_PRM_NEW_VLAN_ID_ID =
public static final PiActionParamId LABEL = PiActionParamId.of("label");
public static final PiActionParamId SMAC = PiActionParamId.of("smac");
public static final PiActionParamId GID = PiActionParamId.of("gid");
public static final PiActionParamId NEW_VLAN_ID =
PiActionParamId.of("new_vlan_id");
public static final PiActionParamId ACT_PRM_FWD_TYPE_ID =
public static final PiActionParamId FWD_TYPE =
PiActionParamId.of("fwd_type");
public static final PiActionParamId ACT_PRM_NEXT_ID_ID =
PiActionParamId.of("next_id");
public static final PiActionParamId NEXT_ID = PiActionParamId.of("next_id");
// Action Profile IDs
public static final PiActionProfileId ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID =
public static final PiActionProfileId FABRIC_INGRESS_NEXT_ECMP_SELECTOR =
PiActionProfileId.of("FabricIngress.next.ecmp_selector");
// Packet Metadata IDs
public static final PiControlMetadataId CTRL_META_INGRESS_PORT_ID =
public static final PiControlMetadataId INGRESS_PORT =
PiControlMetadataId.of("ingress_port");
public static final PiControlMetadataId CTRL_META_EGRESS_PORT_ID =
public static final PiControlMetadataId EGRESS_PORT =
PiControlMetadataId.of("egress_port");
public static final int PORT_BITWIDTH = 9;
}
}

View File

@ -63,75 +63,79 @@ public class FabricInterpreter extends AbstractHandlerBehaviour
private static final ImmutableBiMap<Integer, PiTableId> TABLE_ID_MAP =
ImmutableBiMap.<Integer, PiTableId>builder()
// Filtering
.put(0, FabricConstants.TBL_INGRESS_PORT_VLAN_ID)
.put(1, FabricConstants.TBL_FWD_CLASSIFIER_ID)
.put(0, FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)
.put(1, FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER)
// Forwarding
.put(2, FabricConstants.TBL_MPLS_ID)
.put(3, FabricConstants.TBL_UNICAST_V4_ID)
.put(4, FabricConstants.TBL_UNICAST_V6_ID)
.put(5, FabricConstants.TBL_MULTICAST_V4_ID)
.put(6, FabricConstants.TBL_MULTICAST_V6_ID)
.put(7, FabricConstants.TBL_BRIDGING_ID)
.put(8, FabricConstants.TBL_ACL_ID)
.put(2, FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS)
.put(3, FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4)
.put(4, FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V6)
.put(5, FabricConstants.FABRIC_INGRESS_FORWARDING_MULTICAST_V4)
.put(6, FabricConstants.FABRIC_INGRESS_FORWARDING_MULTICAST_V6)
.put(7, FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING)
.put(8, FabricConstants.FABRIC_INGRESS_FORWARDING_ACL)
// Next
.put(9, FabricConstants.TBL_SIMPLE_ID)
.put(10, FabricConstants.TBL_HASHED_ID)
.put(11, FabricConstants.TBL_MULTICAST_ID)
.put(9, FabricConstants.FABRIC_INGRESS_NEXT_VLAN_META)
.put(10, FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE)
.put(11, FabricConstants.FABRIC_INGRESS_NEXT_HASHED)
.put(12, FabricConstants.FABRIC_INGRESS_NEXT_MULTICAST)
.put(13, FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN)
.build();
private static final Set<PiTableId> FILTERING_CTRL_TBLS = ImmutableSet.of(FabricConstants.TBL_INGRESS_PORT_VLAN_ID,
FabricConstants.TBL_FWD_CLASSIFIER_ID);
private static final Set<PiTableId> FORWARDING_CTRL_TBLS = ImmutableSet.of(FabricConstants.TBL_MPLS_ID,
FabricConstants.TBL_UNICAST_V4_ID,
FabricConstants.TBL_UNICAST_V6_ID,
FabricConstants.TBL_MULTICAST_V4_ID,
FabricConstants.TBL_MULTICAST_V6_ID,
FabricConstants.TBL_BRIDGING_ID,
FabricConstants.TBL_ACL_ID);
private static final Set<PiTableId> NEXT_CTRL_TBLS = ImmutableSet.of(FabricConstants.TBL_SIMPLE_ID,
FabricConstants.TBL_HASHED_ID,
FabricConstants.TBL_MULTICAST_ID,
FabricConstants.TBL_VLAN_META_ID);
private static final Set<PiTableId> E_NEXT_CTRL_TBLS = ImmutableSet.of(FabricConstants.TBL_EGRESS_VLAN_ID);
private static final Set<PiTableId> FILTERING_CTRL_TBLS =
ImmutableSet.of(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN,
FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER);
private static final Set<PiTableId> FORWARDING_CTRL_TBLS =
ImmutableSet.of(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4,
FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V6,
FabricConstants.FABRIC_INGRESS_FORWARDING_MULTICAST_V4,
FabricConstants.FABRIC_INGRESS_FORWARDING_MULTICAST_V6,
FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
FabricConstants.FABRIC_INGRESS_FORWARDING_ACL);
private static final Set<PiTableId> NEXT_CTRL_TBLS =
ImmutableSet.of(FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE,
FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
FabricConstants.FABRIC_INGRESS_NEXT_MULTICAST);
private static final Set<PiTableId> E_NEXT_CTRL_TBLS =
ImmutableSet.of(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN);
private static final ImmutableMap<Criterion.Type, PiMatchFieldId> CRITERION_MAP =
ImmutableMap.<Criterion.Type, PiMatchFieldId>builder()
.put(Criterion.Type.IN_PORT, FabricConstants.HF_STANDARD_METADATA_INGRESS_PORT_ID)
.put(Criterion.Type.ETH_DST, FabricConstants.HF_ETHERNET_DST_ADDR_ID)
.put(Criterion.Type.ETH_SRC, FabricConstants.HF_ETHERNET_SRC_ADDR_ID)
.put(Criterion.Type.ETH_TYPE, FabricConstants.HF_FABRIC_METADATA_ORIGINAL_ETHER_TYPE_ID)
.put(Criterion.Type.MPLS_LABEL, FabricConstants.HF_MPLS_LABEL_ID)
.put(Criterion.Type.VLAN_VID, FabricConstants.HF_VLAN_TAG_VLAN_ID_ID)
.put(Criterion.Type.IPV4_DST, FabricConstants.HF_IPV4_DST_ADDR_ID)
.put(Criterion.Type.IPV4_SRC, FabricConstants.HF_IPV4_SRC_ADDR_ID)
.put(Criterion.Type.IPV6_DST, FabricConstants.HF_IPV6_DST_ADDR_ID)
.put(Criterion.Type.TCP_SRC, FabricConstants.HF_FABRIC_METADATA_L4_SRC_PORT_ID)
.put(Criterion.Type.TCP_DST, FabricConstants.HF_FABRIC_METADATA_L4_DST_PORT_ID)
.put(Criterion.Type.UDP_SRC, FabricConstants.HF_FABRIC_METADATA_L4_SRC_PORT_ID)
.put(Criterion.Type.UDP_DST, FabricConstants.HF_FABRIC_METADATA_L4_DST_PORT_ID)
.put(Criterion.Type.IP_PROTO, FabricConstants.HF_FABRIC_METADATA_IP_PROTO_ID)
.put(Criterion.Type.ICMPV6_TYPE, FabricConstants.HF_ICMP_ICMP_TYPE_ID)
.put(Criterion.Type.ICMPV6_CODE, FabricConstants.HF_ICMP_ICMP_CODE_ID)
.put(Criterion.Type.IN_PORT, FabricConstants.STANDARD_METADATA_INGRESS_PORT)
.put(Criterion.Type.ETH_DST, FabricConstants.HDR_ETHERNET_DST_ADDR)
.put(Criterion.Type.ETH_SRC, FabricConstants.HDR_ETHERNET_SRC_ADDR)
.put(Criterion.Type.ETH_TYPE, FabricConstants.FABRIC_METADATA_ORIGINAL_ETHER_TYPE)
.put(Criterion.Type.MPLS_LABEL, FabricConstants.HDR_MPLS_LABEL)
.put(Criterion.Type.VLAN_VID, FabricConstants.HDR_VLAN_TAG_VLAN_ID)
.put(Criterion.Type.IPV4_DST, FabricConstants.HDR_IPV4_DST_ADDR)
.put(Criterion.Type.IPV4_SRC, FabricConstants.HDR_IPV4_SRC_ADDR)
.put(Criterion.Type.IPV6_DST, FabricConstants.HDR_IPV6_DST_ADDR)
.put(Criterion.Type.TCP_SRC, FabricConstants.FABRIC_METADATA_L4_SRC_PORT)
.put(Criterion.Type.TCP_DST, FabricConstants.FABRIC_METADATA_L4_DST_PORT)
.put(Criterion.Type.UDP_SRC, FabricConstants.FABRIC_METADATA_L4_SRC_PORT)
.put(Criterion.Type.UDP_DST, FabricConstants.FABRIC_METADATA_L4_DST_PORT)
.put(Criterion.Type.IP_PROTO, FabricConstants.FABRIC_METADATA_IP_PROTO)
.put(Criterion.Type.ICMPV6_TYPE, FabricConstants.HDR_ICMP_ICMP_TYPE)
.put(Criterion.Type.ICMPV6_CODE, FabricConstants.HDR_ICMP_ICMP_CODE)
.build();
private static final ImmutableMap<PiMatchFieldId, Criterion.Type> INVERSE_CRITERION_MAP =
ImmutableMap.<PiMatchFieldId, Criterion.Type>builder()
.put(FabricConstants.HF_STANDARD_METADATA_INGRESS_PORT_ID, Criterion.Type.IN_PORT)
.put(FabricConstants.HF_ETHERNET_DST_ADDR_ID, Criterion.Type.ETH_DST)
.put(FabricConstants.HF_ETHERNET_SRC_ADDR_ID, Criterion.Type.ETH_SRC)
.put(FabricConstants.HF_FABRIC_METADATA_ORIGINAL_ETHER_TYPE_ID, Criterion.Type.ETH_TYPE)
.put(FabricConstants.HF_MPLS_LABEL_ID, Criterion.Type.MPLS_LABEL)
.put(FabricConstants.HF_VLAN_TAG_VLAN_ID_ID, Criterion.Type.VLAN_VID)
.put(FabricConstants.HF_IPV4_DST_ADDR_ID, Criterion.Type.IPV4_DST)
.put(FabricConstants.HF_IPV4_SRC_ADDR_ID, Criterion.Type.IPV4_SRC)
.put(FabricConstants.HF_IPV6_DST_ADDR_ID, Criterion.Type.IPV6_DST)
.put(FabricConstants.STANDARD_METADATA_INGRESS_PORT, Criterion.Type.IN_PORT)
.put(FabricConstants.HDR_ETHERNET_DST_ADDR, Criterion.Type.ETH_DST)
.put(FabricConstants.HDR_ETHERNET_SRC_ADDR, Criterion.Type.ETH_SRC)
.put(FabricConstants.FABRIC_METADATA_ORIGINAL_ETHER_TYPE, Criterion.Type.ETH_TYPE)
.put(FabricConstants.HDR_MPLS_LABEL, Criterion.Type.MPLS_LABEL)
.put(FabricConstants.HDR_VLAN_TAG_VLAN_ID, Criterion.Type.VLAN_VID)
.put(FabricConstants.HDR_IPV4_DST_ADDR, Criterion.Type.IPV4_DST)
.put(FabricConstants.HDR_IPV4_SRC_ADDR, Criterion.Type.IPV4_SRC)
.put(FabricConstants.HDR_IPV6_DST_ADDR, Criterion.Type.IPV6_DST)
// FIXME: might be incorrect if we inverse the map....
.put(FabricConstants.HF_FABRIC_METADATA_L4_SRC_PORT_ID, Criterion.Type.UDP_SRC)
.put(FabricConstants.HF_FABRIC_METADATA_L4_DST_PORT_ID, Criterion.Type.UDP_DST)
.put(FabricConstants.HF_FABRIC_METADATA_IP_PROTO_ID, Criterion.Type.IP_PROTO)
.put(FabricConstants.HF_ICMP_ICMP_TYPE_ID, Criterion.Type.ICMPV6_TYPE)
.put(FabricConstants.HF_ICMP_ICMP_CODE_ID, Criterion.Type.ICMPV6_CODE)
.put(FabricConstants.FABRIC_METADATA_L4_SRC_PORT, Criterion.Type.UDP_SRC)
.put(FabricConstants.FABRIC_METADATA_L4_DST_PORT, Criterion.Type.UDP_DST)
.put(FabricConstants.FABRIC_METADATA_IP_PROTO, Criterion.Type.IP_PROTO)
.put(FabricConstants.HDR_ICMP_ICMP_TYPE, Criterion.Type.ICMPV6_TYPE)
.put(FabricConstants.HDR_ICMP_ICMP_CODE, Criterion.Type.ICMPV6_CODE)
.build();
@Override
@ -185,7 +189,7 @@ public class FabricInterpreter extends AbstractHandlerBehaviour
private PiControlMetadata createPacketMetadata(long portNumber) throws PiInterpreterException {
try {
return PiControlMetadata.builder()
.withId(FabricConstants.CTRL_META_EGRESS_PORT_ID)
.withId(FabricConstants.EGRESS_PORT)
.withValue(copyFrom(portNumber).fit(FabricConstants.PORT_BITWIDTH))
.build();
} catch (ImmutableByteSequence.ByteSequenceTrimException e) {
@ -247,7 +251,7 @@ public class FabricInterpreter extends AbstractHandlerBehaviour
// Returns the ingress port packet metadata.
Optional<PiControlMetadata> packetMetadata = packetIn.metadatas()
.stream().filter(m -> m.id().equals(FabricConstants.CTRL_META_INGRESS_PORT_ID))
.stream().filter(m -> m.id().equals(FabricConstants.INGRESS_PORT))
.findFirst();
if (packetMetadata.isPresent()) {
@ -259,7 +263,7 @@ public class FabricInterpreter extends AbstractHandlerBehaviour
} else {
throw new PiInterpreterException(format(
"Missing metadata '%s' in packet-in received from '%s': %s",
FabricConstants.CTRL_META_INGRESS_PORT_ID, deviceId, packetIn));
FabricConstants.INGRESS_PORT, deviceId, packetIn));
}
}
}

View File

@ -32,7 +32,7 @@ public class FabricPortStatisticsDiscovery extends PortStatisticsDiscoveryImpl {
*/
@Override
public PiCounterId ingressCounterId() {
return FabricConstants.CNT_INGRESS_PORT_COUNTER_ID;
return FabricConstants.FABRIC_INGRESS_PORT_COUNTERS_CONTROL_INGRESS_PORT_COUNTER;
}
/**
@ -42,6 +42,6 @@ public class FabricPortStatisticsDiscovery extends PortStatisticsDiscoveryImpl {
*/
@Override
public PiCounterId egressCounterId() {
return FabricConstants.CNT_EGRESS_PORT_COUNTER_ID;
return FabricConstants.FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER;
}
}

View File

@ -51,11 +51,11 @@ final class FabricTreatmentInterpreter {
private static final Logger log = getLogger(FabricTreatmentInterpreter.class);
private static final String INVALID_TREATMENT = "Invalid treatment for %s block: %s";
private static final PiAction NOP = PiAction.builder()
.withId(FabricConstants.ACT_NOP_ID)
.withId(FabricConstants.NOP)
.build();
private static final PiAction POP_VLAN = PiAction.builder()
.withId(FabricConstants.ACT_FABRICEGRESS_EGRESS_NEXT_POP_VLAN_ID)
.withId(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_POP_VLAN)
.build();
// Hide default constructor
@ -103,14 +103,14 @@ final class FabricTreatmentInterpreter {
}
VlanId vlanId = setVlanInst.vlanId();
PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
PiActionParam param = new PiActionParam(FabricConstants.NEW_VLAN_ID,
ImmutableByteSequence.copyFrom(vlanId.toShort()));
PiActionId actionId;
if (pushVlanInst != null) {
// push_internal_vlan
actionId = FabricConstants.ACT_FABRICINGRESS_FILTERING_PUSH_INTERNAL_VLAN_ID;
actionId = FabricConstants.FABRIC_INGRESS_FILTERING_PUSH_INTERNAL_VLAN;
} else {
actionId = FabricConstants.ACT_FABRICINGRESS_FILTERING_SET_VLAN_ID;
actionId = FabricConstants.FABRIC_INGRESS_FILTERING_SET_VLAN;
}
// set_vlan
@ -155,7 +155,7 @@ final class FabricTreatmentInterpreter {
}
return PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER_ID)
.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER)
.build();
}
@ -219,11 +219,10 @@ final class FabricTreatmentInterpreter {
// set_vlan
VlanId vlanId = modVlanIdInst.vlanId();
PiActionParam newVlanParam =
new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
new PiActionParam(FabricConstants.NEW_VLAN_ID,
ImmutableByteSequence.copyFrom(vlanId.toShort()));
// set_vlan_output
return PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_SET_VLAN_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN)
.withParameter(newVlanParam)
.build();
} else {
@ -232,23 +231,23 @@ final class FabricTreatmentInterpreter {
}
short portNum = (short) outInst.port().toLong();
PiActionParam portNumParam = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
PiActionParam portNumParam = new PiActionParam(FabricConstants.PORT_NUM,
ImmutableByteSequence.copyFrom(portNum));
if (modEthDstInst == null && modEthSrcInst == null) {
if (modVlanIdInst != null) {
VlanId vlanId = modVlanIdInst.vlanId();
PiActionParam vlanParam =
new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
new PiActionParam(FabricConstants.NEW_VLAN_ID,
ImmutableByteSequence.copyFrom(vlanId.toShort()));
// set_vlan_output
return PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_SET_VLAN_OUTPUT_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN_OUTPUT)
.withParameters(ImmutableList.of(portNumParam, vlanParam))
.build();
} else {
// output
return PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_OUTPUT_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT)
.withParameter(portNumParam)
.build();
}
@ -257,9 +256,9 @@ final class FabricTreatmentInterpreter {
if (modEthDstInst != null && modEthSrcInst != null) {
MacAddress srcMac = modEthSrcInst.mac();
MacAddress dstMac = modEthDstInst.mac();
PiActionParam srcMacParam = new PiActionParam(FabricConstants.ACT_PRM_SMAC_ID,
PiActionParam srcMacParam = new PiActionParam(FabricConstants.SMAC,
ImmutableByteSequence.copyFrom(srcMac.toBytes()));
PiActionParam dstMacParam = new PiActionParam(FabricConstants.ACT_PRM_DMAC_ID,
PiActionParam dstMacParam = new PiActionParam(FabricConstants.DMAC,
ImmutableByteSequence.copyFrom(dstMac.toBytes()));
if (modMplsInst != null) {
@ -268,10 +267,10 @@ final class FabricTreatmentInterpreter {
try {
ImmutableByteSequence mplsValue =
ImmutableByteSequence.copyFrom(mplsLabel.toInt()).fit(20);
PiActionParam mplsParam = new PiActionParam(FabricConstants.ACT_PRM_LABEL_ID, mplsValue);
PiActionParam mplsParam = new PiActionParam(FabricConstants.LABEL, mplsValue);
return PiAction.builder()
// FIXME: fins a way to determine v4 or v6
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_MPLS_ROUTING_V4_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4)
.withParameters(ImmutableList.of(portNumParam,
srcMacParam,
dstMacParam,
@ -287,17 +286,17 @@ final class FabricTreatmentInterpreter {
if (modVlanIdInst != null) {
VlanId vlanId = modVlanIdInst.vlanId();
PiActionParam vlanParam =
new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
new PiActionParam(FabricConstants.NEW_VLAN_ID,
ImmutableByteSequence.copyFrom(vlanId.toShort()));
// L3 routing and set VLAN
return PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_L3_ROUTING_VLAN_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN)
.withParameters(ImmutableList.of(srcMacParam, dstMacParam, portNumParam, vlanParam))
.build();
} else {
// L3 routing
return PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_L3_ROUTING_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_L3_ROUTING)
.withParameters(ImmutableList.of(portNumParam,
srcMacParam,
dstMacParam))

View File

@ -58,10 +58,10 @@ public class FabricFilteringPipeliner {
private static final byte FWD_IPV6_UNICAST = 4;
private static final byte FWD_IPV6_MULTICAST = 5;
private static final PiCriterion VLAN_VALID = PiCriterion.builder()
.matchExact(FabricConstants.HF_VLAN_TAG_IS_VALID_ID, new byte[]{1})
.matchExact(FabricConstants.HDR_VLAN_TAG_IS_VALID, new byte[]{1})
.build();
private static final PiCriterion VLAN_INVALID = PiCriterion.builder()
.matchExact(FabricConstants.HF_VLAN_TAG_IS_VALID_ID, new byte[]{0})
.matchExact(FabricConstants.HDR_VLAN_TAG_IS_VALID, new byte[]{0})
.build();
protected DeviceId deviceId;
@ -147,7 +147,7 @@ public class FabricFilteringPipeliner {
.withSelector(selector.build())
.withTreatment(treatment)
.withPriority(filterObjective.priority())
.forTable(FabricConstants.TBL_INGRESS_PORT_VLAN_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN)
.forDevice(deviceId)
.makePermanent()
.build();
@ -225,15 +225,15 @@ public class FabricFilteringPipeliner {
.withPriority(filterObjective.priority())
.forDevice(deviceId)
.makePermanent()
.forTable(FabricConstants.TBL_FWD_CLASSIFIER_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER)
.build();
}
private TrafficTreatment createFwdClassifierTreatment(byte fwdType) {
PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_FWD_TYPE_ID,
PiActionParam param = new PiActionParam(FabricConstants.FWD_TYPE,
ImmutableByteSequence.copyFrom(fwdType));
PiAction action = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FILTERING_SET_FORWARDING_TYPE_ID)
.withId(FabricConstants.FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE)
.withParameter(param)
.build();
return DefaultTrafficTreatment.builder()

View File

@ -84,7 +84,7 @@ public class FabricForwardingPipeliner {
FlowRule flowRule = DefaultFlowRule.builder()
.withSelector(fwd.selector())
.withTreatment(fwd.treatment())
.forTable(FabricConstants.TBL_ACL_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_ACL)
.withPriority(fwd.priority())
.forDevice(deviceId)
.makePermanent()
@ -188,7 +188,7 @@ public class FabricForwardingPipeliner {
.withPriority(fwd.priority())
.makePermanent()
.forDevice(deviceId)
.forTable(FabricConstants.TBL_BRIDGING_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING)
.build();
resultBuilder.addFlowRule(flowRule);
@ -215,7 +215,7 @@ public class FabricForwardingPipeliner {
.withPriority(fwd.priority())
.makePermanent()
.forDevice(deviceId)
.forTable(FabricConstants.TBL_BRIDGING_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING)
.build();
resultBuilder.addFlowRule(flowRule);
@ -238,7 +238,7 @@ public class FabricForwardingPipeliner {
.withPriority(fwd.priority())
.makePermanent()
.forDevice(deviceId)
.forTable(FabricConstants.TBL_UNICAST_V4_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4)
.build();
resultBuilder.addFlowRule(flowRule);
@ -251,10 +251,10 @@ public class FabricForwardingPipeliner {
treatment = fwd.treatment();
if (fwd.nextId() != null) {
PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID,
ImmutableByteSequence.copyFrom(fwd.nextId().byteValue()));
PiAction nextIdAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_POP_MPLS_AND_NEXT_ID)
.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT)
.withParameter(nextIdParam)
.build();
treatment = DefaultTrafficTreatment.builder()
@ -273,7 +273,7 @@ public class FabricForwardingPipeliner {
.withPriority(fwd.priority())
.makePermanent()
.forDevice(deviceId)
.forTable(FabricConstants.TBL_MPLS_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS)
.build();
resultBuilder.addFlowRule(flowRule);
@ -287,10 +287,10 @@ public class FabricForwardingPipeliner {
* @return treatment with set_next_id action; empty treatment if next id is null
*/
private static TrafficTreatment buildSetNextIdTreatment(Integer nextId) {
PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID,
ImmutableByteSequence.copyFrom(nextId.byteValue()));
PiAction nextIdAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_SET_NEXT_ID_ID)
.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID)
.withParameter(nextIdParam)
.build();

View File

@ -42,18 +42,12 @@ import org.onosproject.net.group.GroupBuckets;
import org.onosproject.net.group.GroupDescription;
import org.onosproject.net.pi.runtime.PiActionGroupId;
import org.onosproject.net.pi.runtime.PiGroupKey;
import org.onosproject.pipelines.fabric.FabricConstants;
import org.slf4j.Logger;
import java.util.List;
import java.util.stream.Collectors;
import static org.onosproject.pipelines.fabric.FabricConstants.ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID;
import static org.onosproject.pipelines.fabric.FabricConstants.HF_FABRIC_METADATA_NEXT_ID_ID;
import static org.onosproject.pipelines.fabric.FabricConstants.HF_STANDARD_METADATA_EGRESS_PORT_ID;
import static org.onosproject.pipelines.fabric.FabricConstants.TBL_EGRESS_VLAN_ID;
import static org.onosproject.pipelines.fabric.FabricConstants.TBL_HASHED_ID;
import static org.onosproject.pipelines.fabric.FabricConstants.TBL_SIMPLE_ID;
import static org.onosproject.pipelines.fabric.FabricConstants.TBL_VLAN_META_ID;
import static org.slf4j.LoggerFactory.getLogger;
/**
@ -116,7 +110,7 @@ public class FabricNextPipeliner {
resultBuilder.addFlowRule(DefaultFlowRule.builder()
.withSelector(selector)
.withTreatment(treatment)
.forTable(TBL_VLAN_META_ID)
.forTable(FabricConstants.FABRIC_INGRESS_NEXT_VLAN_META)
.makePermanent()
.withPriority(next.priority())
.forDevice(deviceId)
@ -146,7 +140,7 @@ public class FabricNextPipeliner {
resultBuilder.addFlowRule(DefaultFlowRule.builder()
.withSelector(selector)
.withTreatment(treatment)
.forTable(TBL_SIMPLE_ID)
.forTable(FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE)
.makePermanent()
.withPriority(next.priority())
.forDevice(deviceId)
@ -184,7 +178,7 @@ public class FabricNextPipeliner {
VlanId vlanId = vlanIdCriterion.vlanId();
PiCriterion egressVlanTableMatch = PiCriterion.builder()
.matchExact(HF_STANDARD_METADATA_EGRESS_PORT_ID,
.matchExact(FabricConstants.STANDARD_METADATA_EGRESS_PORT,
(short) port.toLong())
.build();
// Add VLAN pop rule to egress pipeline table
@ -198,7 +192,7 @@ public class FabricNextPipeliner {
resultBuilder.addFlowRule(DefaultFlowRule.builder()
.withSelector(selector)
.withTreatment(treatment)
.forTable(TBL_EGRESS_VLAN_ID)
.forTable(FabricConstants.FABRIC_EGRESS_EGRESS_NEXT_EGRESS_VLAN)
.makePermanent()
.withPriority(next.priority())
.forDevice(deviceId)
@ -256,8 +250,8 @@ public class FabricNextPipeliner {
}
GroupBuckets buckets = new GroupBuckets(bucketList);
PiGroupKey groupKey = new PiGroupKey(TBL_HASHED_ID,
ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID,
PiGroupKey groupKey = new PiGroupKey(FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
FabricConstants.FABRIC_INGRESS_NEXT_ECMP_SELECTOR,
groupId);
resultBuilder.addGroup(new DefaultGroupDescription(deviceId,
@ -282,7 +276,7 @@ public class FabricNextPipeliner {
resultBuilder.addFlowRule(DefaultFlowRule.builder()
.withSelector(selector)
.withTreatment(treatment)
.forTable(TBL_HASHED_ID)
.forTable(FabricConstants.FABRIC_INGRESS_NEXT_HASHED)
.makePermanent()
.withPriority(next.priority())
.forDevice(deviceId)
@ -292,7 +286,7 @@ public class FabricNextPipeliner {
private TrafficSelector buildNextIdSelector(int nextId) {
PiCriterion nextIdCriterion = PiCriterion.builder()
.matchExact(HF_FABRIC_METADATA_NEXT_ID_ID, nextId)
.matchExact(FabricConstants.FABRIC_METADATA_NEXT_ID, nextId)
.build();
return DefaultTrafficSelector.builder()
.matchPi(nextIdCriterion)

View File

@ -61,11 +61,11 @@ public class FabricInterpreterTest {
.setVlanId(VLAN_100)
.build();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
PiActionParam param = new PiActionParam(FabricConstants.NEW_VLAN_ID,
ImmutableByteSequence.copyFrom(VLAN_100.toShort()));
PiAction expectedAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FILTERING_PUSH_INTERNAL_VLAN_ID)
.withId(FabricConstants.FABRIC_INGRESS_FILTERING_PUSH_INTERNAL_VLAN)
.withParameter(param)
.build();
@ -81,11 +81,11 @@ public class FabricInterpreterTest {
.setVlanId(VLAN_100)
.build();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
PiActionParam param = new PiActionParam(FabricConstants.NEW_VLAN_ID,
ImmutableByteSequence.copyFrom(VLAN_100.toShort()));
PiAction expectedAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FILTERING_SET_VLAN_ID)
.withId(FabricConstants.FABRIC_INGRESS_FILTERING_SET_VLAN)
.withParameter(param)
.build();
@ -99,9 +99,9 @@ public class FabricInterpreterTest {
public void testFilteringTreatment3() throws Exception {
TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
PiAction expectedAction = PiAction.builder()
.withId(FabricConstants.ACT_NOP_ID)
.withId(FabricConstants.NOP)
.build();
assertEquals(expectedAction, mappedAction);
@ -118,9 +118,9 @@ public class FabricInterpreterTest {
.punt()
.build();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_ACL_ID);
FabricConstants.FABRIC_INGRESS_FORWARDING_ACL);
PiAction expectedAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER_ID)
.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_DUPLICATE_TO_CONTROLLER)
.build();
assertEquals(expectedAction, mappedAction);
@ -133,7 +133,7 @@ public class FabricInterpreterTest {
public void testEmptyForwardingTreatment() throws Exception {
TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_UNICAST_V4_ID);
FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4);
assertNull(mappedAction);
}
@ -148,12 +148,12 @@ public class FabricInterpreterTest {
.setOutput(PORT_1)
.build();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_SIMPLE_ID);
FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE);
short portNumVal = (short) PORT_1.toLong();
PiActionParam param = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
PiActionParam param = new PiActionParam(FabricConstants.PORT_NUM,
ImmutableByteSequence.copyFrom(portNumVal));
PiAction expectedAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_OUTPUT_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_OUTPUT)
.withParameter(param)
.build();
@ -171,16 +171,16 @@ public class FabricInterpreterTest {
.setOutput(PORT_1)
.build();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_HASHED_ID);
FabricConstants.FABRIC_INGRESS_NEXT_HASHED);
short portNumVal = (short) PORT_1.toLong();
PiActionParam ethSrcParam = new PiActionParam(FabricConstants.ACT_PRM_SMAC_ID,
PiActionParam ethSrcParam = new PiActionParam(FabricConstants.SMAC,
ImmutableByteSequence.copyFrom(SRC_MAC.toBytes()));
PiActionParam ethDstParam = new PiActionParam(FabricConstants.ACT_PRM_DMAC_ID,
PiActionParam ethDstParam = new PiActionParam(FabricConstants.DMAC,
ImmutableByteSequence.copyFrom(DST_MAC.toBytes()));
PiActionParam portParam = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM,
ImmutableByteSequence.copyFrom(portNumVal));
PiAction expectedAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_L3_ROUTING_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_L3_ROUTING)
.withParameters(ImmutableList.of(ethSrcParam, ethDstParam, portParam))
.build();
@ -197,16 +197,16 @@ public class FabricInterpreterTest {
.setOutput(PORT_1)
.build();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_SIMPLE_ID);
FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE);
short portNumVal = (short) PORT_1.toLong();
PiActionParam portParam = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM,
ImmutableByteSequence.copyFrom(portNumVal));
short vlanVal = VLAN_100.toShort();
PiActionParam vlanParam = new PiActionParam(FabricConstants.ACT_PRM_NEW_VLAN_ID_ID,
PiActionParam vlanParam = new PiActionParam(FabricConstants.NEW_VLAN_ID,
ImmutableByteSequence.copyFrom(vlanVal));
PiAction expectedAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_SET_VLAN_OUTPUT_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_SET_VLAN_OUTPUT)
.withParameters(ImmutableList.of(vlanParam, portParam))
.build();
@ -224,19 +224,19 @@ public class FabricInterpreterTest {
.setOutput(PORT_1)
.build();
PiAction mappedAction = interpreter.mapTreatment(treatment,
FabricConstants.TBL_HASHED_ID);
FabricConstants.FABRIC_INGRESS_NEXT_HASHED);
short portNumVal = (short) PORT_1.toLong();
PiActionParam ethSrcParam = new PiActionParam(FabricConstants.ACT_PRM_SMAC_ID,
PiActionParam ethSrcParam = new PiActionParam(FabricConstants.SMAC,
ImmutableByteSequence.copyFrom(SRC_MAC.toBytes()));
PiActionParam ethDstParam = new PiActionParam(FabricConstants.ACT_PRM_DMAC_ID,
PiActionParam ethDstParam = new PiActionParam(FabricConstants.DMAC,
ImmutableByteSequence.copyFrom(DST_MAC.toBytes()));
PiActionParam portParam = new PiActionParam(FabricConstants.ACT_PRM_PORT_NUM_ID,
PiActionParam portParam = new PiActionParam(FabricConstants.PORT_NUM,
ImmutableByteSequence.copyFrom(portNumVal));
ImmutableByteSequence mplsVal =
ImmutableByteSequence.copyFrom(MPLS_10.toInt()).fit(20);
PiActionParam mplsParam = new PiActionParam(FabricConstants.ACT_PRM_LABEL_ID, mplsVal);
PiActionParam mplsParam = new PiActionParam(FabricConstants.LABEL, mplsVal);
PiAction expectedAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_NEXT_MPLS_ROUTING_V4_ID)
.withId(FabricConstants.FABRIC_INGRESS_NEXT_MPLS_ROUTING_V4)
.withParameters(ImmutableList.of(ethSrcParam, ethDstParam, portParam, mplsParam))
.build();
assertEquals(expectedAction, mappedAction);

View File

@ -65,10 +65,11 @@ public class FabricFilteringPipelinerTest extends FabricPipelinerTest {
// in port vlan flow rule
FlowRule actualFlowRule = flowRulesInstalled.get(0);
FlowRule flowRuleExpected = buildExpectedVlanInPortRule(PORT_1,
VlanId.NONE,
VLAN_100,
FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
FlowRule flowRuleExpected =
buildExpectedVlanInPortRule(PORT_1,
VlanId.NONE,
VLAN_100,
FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
assertTrue(flowRuleExpected.exactMatch(actualFlowRule));
// forwarding classifier ipv4
@ -125,10 +126,11 @@ public class FabricFilteringPipelinerTest extends FabricPipelinerTest {
// in port vlan flow rule
FlowRule actualFlowRule = flowRulesInstalled.get(0);
FlowRule flowRuleExpected = buildExpectedVlanInPortRule(PORT_1,
VlanId.NONE,
VLAN_100,
FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
FlowRule flowRuleExpected =
buildExpectedVlanInPortRule(PORT_1,
VlanId.NONE,
VLAN_100,
FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
assertTrue(flowRuleExpected.exactMatch(actualFlowRule));
// forwarding classifier
@ -169,10 +171,11 @@ public class FabricFilteringPipelinerTest extends FabricPipelinerTest {
// in port vlan flow rule
FlowRule actualFlowRule = flowRulesInstalled.get(0);
FlowRule flowRuleExpected = buildExpectedVlanInPortRule(PORT_1,
VlanId.NONE,
VLAN_100,
FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
FlowRule flowRuleExpected =
buildExpectedVlanInPortRule(PORT_1,
VlanId.NONE,
VLAN_100,
FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
assertTrue(flowRuleExpected.exactMatch(actualFlowRule));
// forwarding classifier
@ -200,10 +203,11 @@ public class FabricFilteringPipelinerTest extends FabricPipelinerTest {
// in port vlan flow rule
FlowRule actualFlowRule = flowRulesInstalled.get(0);
FlowRule flowRuleExpected = buildExpectedVlanInPortRule(PORT_1,
VlanId.NONE,
VLAN_100,
FabricConstants.TBL_INGRESS_PORT_VLAN_ID);
FlowRule flowRuleExpected =
buildExpectedVlanInPortRule(PORT_1,
VlanId.NONE,
VLAN_100,
FabricConstants.FABRIC_INGRESS_FILTERING_INGRESS_PORT_VLAN);
assertTrue(flowRuleExpected.exactMatch(actualFlowRule));
// No rules in forwarding classifier, will do default action: set fwd type to bridging
@ -332,10 +336,10 @@ public class FabricFilteringPipelinerTest extends FabricPipelinerTest {
.matchInPort(inPort)
.matchEthType(ethType)
.build();
PiActionParam classParam = new PiActionParam(FabricConstants.ACT_PRM_FWD_TYPE_ID,
PiActionParam classParam = new PiActionParam(FabricConstants.FWD_TYPE,
ImmutableByteSequence.copyFrom(fwdClass));
PiAction fwdClassifierAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FILTERING_SET_FORWARDING_TYPE_ID)
.withId(FabricConstants.FABRIC_INGRESS_FILTERING_SET_FORWARDING_TYPE)
.withParameter(classParam)
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
@ -349,7 +353,7 @@ public class FabricFilteringPipelinerTest extends FabricPipelinerTest {
.fromApp(APP_ID)
.forDevice(DEVICE_ID)
.makePermanent()
.forTable(FabricConstants.TBL_FWD_CLASSIFIER_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FILTERING_FWD_CLASSIFIER)
.build();
}
}

View File

@ -79,7 +79,7 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
FlowRule actualFlowRule = flowRulesInstalled.get(0);
FlowRule expectedFlowRule = DefaultFlowRule.builder()
.forDevice(DEVICE_ID)
.forTable(FabricConstants.TBL_ACL_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_ACL)
.withPriority(PRIORITY)
.makePermanent()
.withSelector(selector)
@ -125,7 +125,7 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
FlowRule actualFlowRule = flowRulesInstalled.get(0);
FlowRule expectedFlowRule = DefaultFlowRule.builder()
.forDevice(DEVICE_ID)
.forTable(FabricConstants.TBL_ACL_ID)
.forTable(FabricConstants.FABRIC_INGRESS_FORWARDING_ACL)
.withPriority(PRIORITY)
.makePermanent()
.withSelector(selector)
@ -145,7 +145,8 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
.matchVlanId(VLAN_100)
.matchEthDst(HOST_MAC)
.build();
testSpecificForward(FabricConstants.TBL_BRIDGING_ID, selector, selector, NEXT_ID_1);
testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
selector, selector, NEXT_ID_1);
}
@Test
@ -153,7 +154,8 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchVlanId(VLAN_100)
.build();
testSpecificForward(FabricConstants.TBL_BRIDGING_ID, selector, selector, NEXT_ID_1);
testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_BRIDGING,
selector, selector, NEXT_ID_1);
}
@Test
@ -165,7 +167,8 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
.matchIPDst(IPV4_UNICAST_ADDR)
.build();
testSpecificForward(FabricConstants.TBL_UNICAST_V4_ID, expectedSelector, selector, NEXT_ID_1);
testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4,
expectedSelector, selector, NEXT_ID_1);
}
@Test
@ -177,7 +180,8 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
.matchIPDst(IPV4_UNICAST_ADDR)
.build();
testSpecificForward(FabricConstants.TBL_UNICAST_V4_ID, expectedSelector, selector, null);
testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4,
expectedSelector, selector, null);
}
@Test
@ -191,7 +195,8 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
.matchIPDst(IPV4_MCAST_ADDR)
.build();
testSpecificForward(FabricConstants.TBL_MULTICAST_V4_ID, expectedSelector, selector, NEXT_ID_1);
testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V4,
expectedSelector, selector, NEXT_ID_1);
}
@Test
@ -204,7 +209,9 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
.matchIPDst(IPV6_UNICAST_ADDR)
.build();
testSpecificForward(FabricConstants.TBL_UNICAST_V6_ID, expectedSelector, selector, NEXT_ID_1);
testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V6,
expectedSelector, selector, NEXT_ID_1);
}
@Test
@ -218,7 +225,8 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
TrafficSelector expectedSelector = DefaultTrafficSelector.builder()
.matchIPDst(IPV6_MCAST_ADDR)
.build();
testSpecificForward(FabricConstants.TBL_MULTICAST_V6_ID, expectedSelector, selector, NEXT_ID_1);
testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_UNICAST_V6,
expectedSelector, selector, NEXT_ID_1);
}
@Test
@ -232,16 +240,17 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
.matchMplsLabel(MPLS_10)
.build();
PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID,
ImmutableByteSequence.copyFrom(NEXT_ID_1.byteValue()));
PiAction setNextIdAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_POP_MPLS_AND_NEXT_ID)
.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_POP_MPLS_AND_NEXT)
.withParameter(nextIdParam)
.build();
TrafficTreatment treatment = DefaultTrafficTreatment.builder()
.piTableAction(setNextIdAction)
.build();
testSpecificForward(FabricConstants.TBL_MPLS_ID, expectedSelector, selector, NEXT_ID_1, treatment);
testSpecificForward(FabricConstants.FABRIC_INGRESS_FORWARDING_MPLS,
expectedSelector, selector, NEXT_ID_1, treatment);
}
private void testSpecificForward(PiTableId expectedTableId, TrafficSelector expectedSelector,
@ -251,10 +260,10 @@ public class FabricForwardingPipelineTest extends FabricPipelinerTest {
// Ref: RoutingRulePopulator.java->revokeIpRuleForRouter
setNextIdTreatment = DefaultTrafficTreatment.builder().build();
} else {
PiActionParam nextIdParam = new PiActionParam(FabricConstants.ACT_PRM_NEXT_ID_ID,
PiActionParam nextIdParam = new PiActionParam(FabricConstants.NEXT_ID,
ImmutableByteSequence.copyFrom(nextId.byteValue()));
PiAction setNextIdAction = PiAction.builder()
.withId(FabricConstants.ACT_FABRICINGRESS_FORWARDING_SET_NEXT_ID_ID)
.withId(FabricConstants.FABRIC_INGRESS_FORWARDING_SET_NEXT_ID)
.withParameter(nextIdParam)
.build();
setNextIdTreatment = DefaultTrafficTreatment.builder()

View File

@ -42,9 +42,6 @@ import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.onosproject.pipelines.fabric.FabricConstants.ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID;
import static org.onosproject.pipelines.fabric.FabricConstants.TBL_HASHED_ID;
import static org.onosproject.pipelines.fabric.FabricConstants.TBL_VLAN_META_ID;
/**
* Test cases for fabric.p4 pipeline next control block.
@ -54,7 +51,7 @@ public class FabricNextPipelinerTest extends FabricPipelinerTest {
public FabricNextPipelinerTest() {
PiCriterion nextIdCriterion = PiCriterion.builder()
.matchExact(FabricConstants.HF_FABRIC_METADATA_NEXT_ID_ID, NEXT_ID_1)
.matchExact(FabricConstants.FABRIC_METADATA_NEXT_ID, NEXT_ID_1)
.build();
TrafficSelector selector = DefaultTrafficSelector.builder()
.matchPi(nextIdCriterion)
@ -66,7 +63,7 @@ public class FabricNextPipelinerTest extends FabricPipelinerTest {
vlanMetaFlowRule = DefaultFlowRule.builder()
.withSelector(selector)
.withTreatment(treatment)
.forTable(TBL_VLAN_META_ID)
.forTable(FabricConstants.FABRIC_INGRESS_NEXT_VLAN_META)
.makePermanent()
// FIXME: currently next objective doesn't support priority, ignore this
.withPriority(0)
@ -145,7 +142,7 @@ public class FabricNextPipelinerTest extends FabricPipelinerTest {
// Simple table
PiCriterion nextIdCriterion = PiCriterion.builder()
.matchExact(FabricConstants.HF_FABRIC_METADATA_NEXT_ID_ID, NEXT_ID_1)
.matchExact(FabricConstants.FABRIC_METADATA_NEXT_ID, NEXT_ID_1)
.build();
TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
.matchPi(nextIdCriterion)
@ -162,7 +159,7 @@ public class FabricNextPipelinerTest extends FabricPipelinerTest {
.makePermanent()
// FIXME: currently next objective doesn't support priority, ignore this
.withPriority(0)
.forTable(FabricConstants.TBL_SIMPLE_ID)
.forTable(FabricConstants.FABRIC_INGRESS_NEXT_SIMPLE)
.withSelector(nextIdSelector)
.withTreatment(treatment)
.build();
@ -206,7 +203,7 @@ public class FabricNextPipelinerTest extends FabricPipelinerTest {
// Hashed table
PiCriterion nextIdCriterion = PiCriterion.builder()
.matchExact(FabricConstants.HF_FABRIC_METADATA_NEXT_ID_ID, NEXT_ID_1)
.matchExact(FabricConstants.FABRIC_METADATA_NEXT_ID, NEXT_ID_1)
.build();
TrafficSelector nextIdSelector = DefaultTrafficSelector.builder()
.matchPi(nextIdCriterion)
@ -227,7 +224,7 @@ public class FabricNextPipelinerTest extends FabricPipelinerTest {
.makePermanent()
// FIXME: currently next objective doesn't support priority, ignore this
.withPriority(0)
.forTable(TBL_HASHED_ID)
.forTable(FabricConstants.FABRIC_INGRESS_NEXT_HASHED)
.withSelector(nextIdSelector)
.withTreatment(treatment)
.build();
@ -241,7 +238,9 @@ public class FabricNextPipelinerTest extends FabricPipelinerTest {
.map(DefaultGroupBucket::createSelectGroupBucket)
.collect(Collectors.toList());
GroupBuckets groupBuckets = new GroupBuckets(buckets);
PiGroupKey groupKey = new PiGroupKey(TBL_HASHED_ID, ACT_PRF_FABRICINGRESS_NEXT_ECMP_SELECTOR_ID, NEXT_ID_1);
PiGroupKey groupKey = new PiGroupKey(FabricConstants.FABRIC_INGRESS_NEXT_HASHED,
FabricConstants.FABRIC_INGRESS_NEXT_ECMP_SELECTOR,
NEXT_ID_1);
GroupDescription expectedGroup = new DefaultGroupDescription(
DEVICE_ID,
GroupDescription.Type.SELECT,

View File

@ -68,17 +68,11 @@ public abstract class FabricPipelinerTest {
static final byte FWD_IPV6_UNICAST = 4;
static final byte FWD_IPV6_MULTICAST = 5;
// Next types
static final byte NEXT_TYPE_SIMPLE = 0;
static final byte NEXT_TYPE_HASHED = 1;
static final byte NEXT_TYPE_BROADCAST = 2;
static final byte NEXT_TYPE_PUNT = 3;
static final PiCriterion VLAN_VALID = PiCriterion.builder()
.matchExact(FabricConstants.HF_VLAN_TAG_IS_VALID_ID, new byte[]{1})
.matchExact(FabricConstants.HDR_VLAN_TAG_IS_VALID, new byte[]{1})
.build();
static final PiCriterion VLAN_INVALID = PiCriterion.builder()
.matchExact(FabricConstants.HF_VLAN_TAG_IS_VALID_ID, new byte[]{0})
.matchExact(FabricConstants.HDR_VLAN_TAG_IS_VALID, new byte[]{0})
.build();
FabricPipeliner pipeliner;

View File

@ -0,0 +1,219 @@
#!/usr/bin/env python2.7
# -*- utf-8 -*-
import argparse
import re
import google.protobuf.text_format as tf
from p4.config import p4info_pb2
copyright = '''/*
* Copyright 2017-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.
*/
'''
imports = '''
import org.onosproject.net.pi.model.PiActionId;
import org.onosproject.net.pi.model.PiActionParamId;
import org.onosproject.net.pi.model.PiActionProfileId;
import org.onosproject.net.pi.model.PiControlMetadataId;
import org.onosproject.net.pi.model.PiCounterId;
import org.onosproject.net.pi.model.PiMatchFieldId;
import org.onosproject.net.pi.model.PiTableId;'''
PKG_FMT = 'package org.onosproject.pipelines.%s;'
CLASS_OPEN = 'public final class %s {'
CLASS_CLOSE = '}'
DEFAULT_CONSTRUCTOR = '''
// hide default constructor
private %s() {
}
'''
CONST_FMT = ' public static final %s %s = %s;'
SHORT_CONST_FMT =''' public static final %s %s =
%s;'''
JAVA_STR = 'String'
EMPTY_STR = ''
JAVA_DOC_FMT = '''/**
* Constants for %s pipeline.
*/'''
PI_HF_FIELD_ID = 'PiMatchFieldId'
PI_HF_FIELD_ID_CST = 'PiMatchFieldId.of("%s")'
PI_TBL_ID = 'PiTableId'
PI_TBL_ID_CST = 'PiTableId.of("%s")'
PI_CTR_ID = 'PiCounterId'
PI_CTR_ID_CST = 'PiCounterId.of("%s")'
PI_ACT_ID = 'PiActionId'
PI_ACT_ID_CST = 'PiActionId.of("%s")'
PI_ACT_PRM_ID = 'PiActionParamId'
PI_ACT_PRM_ID_CST = 'PiActionParamId.of("%s")'
PI_ACT_PROF_ID = 'PiActionProfileId'
PI_ACT_PROF_ID_CST = 'PiActionProfileId.of("%s")'
PI_PKT_META_ID = 'PiControlMetadataId'
PI_PKT_META_ID_CST = 'PiControlMetadataId.of("%s")'
class ConstantClassGenerator(object):
headers = set()
header_fields = set()
tables = set()
counters = set()
direct_counters = set()
actions = set()
action_params = set()
action_profiles = set()
packet_metadata = set()
# https://stackoverflow.com/questions/1175208/elegant-python-function-to-convert-camelcase-to-snake-case
def convert_camel_to_all_caps(self, name):
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
s1 = re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).upper()
return s1.replace('.', '_')
def __init__(self, base_name):
self.class_name = base_name.title() + 'Constants'
self.package_name = PKG_FMT % (base_name, )
self.java_doc = JAVA_DOC_FMT % (base_name, )
def parse(self, p4info):
for tbl in p4info.tables:
for mf in tbl.match_fields:
self.header_fields.add(mf.name)
self.tables.add(tbl.preamble.name)
for ctr in p4info.counters:
self.counters.add(ctr.preamble.name)
for dir_ctr in p4info.direct_counters:
self.direct_counters.add(dir_ctr.preamble.name)
for act in p4info.actions:
self.actions.add(act.preamble.name)
for param in act.params:
self.action_params.add(param.name)
for act_prof in p4info.action_profiles:
self.action_profiles.add(act_prof.preamble.name)
for cpm in p4info.controller_packet_metadata:
for mta in cpm.metadata:
self.packet_metadata.add(mta.name)
def const_line(self, name, type, constructor):
var_name = self.convert_camel_to_all_caps(name)
val = constructor % (name, )
line = CONST_FMT % (type, var_name, val)
if len(line) > 80:
line = SHORT_CONST_FMT % (type, var_name, val)
return line
def generate_java(self):
lines = list()
lines.append(copyright)
lines.append(self.package_name)
lines.append(imports)
lines.append(self.java_doc)
# generate the class
lines.append(CLASS_OPEN % (self.class_name, ))
lines.append(DEFAULT_CONSTRUCTOR % (self.class_name, ))
if len(self.header_fields) is not 0:
lines.append(' // Header field IDs')
for hf in self.header_fields:
lines.append(self.const_line(hf, PI_HF_FIELD_ID, PI_HF_FIELD_ID_CST))
if len(self.tables) is not 0:
lines.append(' // Table IDs')
for tbl in self.tables:
lines.append(self.const_line(tbl, PI_TBL_ID, PI_TBL_ID_CST))
if len(self.counters) is not 0:
lines.append(' // Indirect Counter IDs')
for ctr in self.counters:
lines.append(self.const_line(ctr, PI_CTR_ID, PI_CTR_ID_CST))
if len(self.direct_counters) is not 0:
lines.append(' // Direct Counter IDs')
for dctr in self.direct_counters:
lines.append(self.const_line(dctr, PI_CTR_ID, PI_CTR_ID_CST))
if len(self.actions) is not 0:
lines.append(' // Action IDs')
for act in self.actions:
lines.append(self.const_line(act, PI_ACT_ID, PI_ACT_ID_CST))
if len(self.action_params) is not 0:
lines.append(' // Action Param IDs')
for act_prm in self.action_params:
lines.append(self.const_line(act_prm, PI_ACT_PRM_ID, PI_ACT_PRM_ID_CST))
if len(self.action_profiles) is not 0:
lines.append(' // Action Profile IDs')
for act_prof in self.action_profiles:
lines.append(self.const_line(act_prof, PI_ACT_PROF_ID, PI_ACT_PROF_ID_CST))
if len(self.packet_metadata) is not 0:
lines.append(' // Packet Metadata IDs')
for pmeta in self.packet_metadata:
lines.append(self.const_line(pmeta, PI_PKT_META_ID, PI_PKT_META_ID_CST))
lines.append(CLASS_CLOSE)
# end of class
return '\n'.join(lines)
def main():
parser = argparse.ArgumentParser(prog='onos-gen-p4-constants',
description='ONOS P4Info to Java constant generator.')
parser.add_argument('name', help='Name of the constant, will be used as class name')
parser.add_argument('p4info', help='P4Info file')
parser.add_argument('-o', '--output', help='output path', default='-')
args = parser.parse_args()
base_name = args.name
file_name = args.p4info
p4info = p4info_pb2.P4Info()
with open(file_name, 'r') as intput_file:
s = intput_file.read()
tf.Merge(s, p4info)
gen = ConstantClassGenerator(base_name)
gen.parse(p4info)
java_code = gen.generate_java()
if args.output == '-':
# std output
print java_code
else:
with open(args.output, 'w') as output_file:
output_file.write(java_code)
if __name__ == '__main__':
main()