blob: 448da71abd030cd9fb6fbab6344b2d6c37723b74 [file] [log] [blame]
Carmelo Cascone07d72712017-07-14 15:57:47 -04001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Carmelo Cascone07d72712017-07-14 15:57:47 -04003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.drivers.bmv2;
18
19import org.onosproject.bmv2.model.Bmv2PipelineModelParser;
Carmelo Cascone31d3e442017-07-18 16:58:51 -040020import org.onosproject.driver.pipeline.DefaultSingleTablePipeline;
Carmelo Casconea62ac3d2017-08-30 03:19:00 +020021import org.onosproject.drivers.p4runtime.DefaultP4Interpreter;
Carmelo Casconeb045ddc2017-09-01 01:26:35 +020022import org.onosproject.drivers.p4runtime.DefaultP4PortStatisticsDiscovery;
Carmelo Cascone31d3e442017-07-18 16:58:51 -040023import org.onosproject.net.behaviour.Pipeliner;
Andrea Campanella19090322017-08-22 10:31:37 +020024import org.onosproject.net.device.PortStatisticsDiscovery;
Carmelo Cascone07d72712017-07-14 15:57:47 -040025import org.onosproject.net.pi.model.DefaultPiPipeconf;
26import org.onosproject.net.pi.model.PiPipeconf;
27import org.onosproject.net.pi.model.PiPipeconfId;
28import org.onosproject.net.pi.model.PiPipelineInterpreter;
29
Carmelo Cascone31d3e442017-07-18 16:58:51 -040030import java.net.URL;
Carmelo Cascone07d72712017-07-14 15:57:47 -040031
32import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.BMV2_JSON;
33import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.P4_INFO_TEXT;
34
35/**
36 * Factory of pipeconf implementation for the default.p4 program on BMv2.
37 */
Carmelo Casconea62ac3d2017-08-30 03:19:00 +020038public final class Bmv2DefaultPipeconfFactory {
Carmelo Cascone07d72712017-07-14 15:57:47 -040039
40 private static final String PIPECONF_ID = "bmv2-default-pipeconf";
41 private static final String JSON_PATH = "/default.json";
42 private static final String P4INFO_PATH = "/default.p4info";
43
Carmelo Cascone44daf562017-07-16 23:55:08 -040044 private static final PiPipeconf PIPECONF = buildPipeconf();
45
Carmelo Cascone07d72712017-07-14 15:57:47 -040046 private Bmv2DefaultPipeconfFactory() {
47 // Hides constructor.
48 }
49
Carmelo Casconea62ac3d2017-08-30 03:19:00 +020050 public static PiPipeconf get() {
Carmelo Cascone44daf562017-07-16 23:55:08 -040051 return PIPECONF;
52 }
53
54 private static PiPipeconf buildPipeconf() {
Carmelo Cascone07d72712017-07-14 15:57:47 -040055
Carmelo Cascone31d3e442017-07-18 16:58:51 -040056 final URL jsonUrl = Bmv2DefaultPipeconfFactory.class.getResource(JSON_PATH);
57 final URL p4InfoUrl = Bmv2DefaultPipeconfFactory.class.getResource(P4INFO_PATH);
Carmelo Cascone07d72712017-07-14 15:57:47 -040058 return DefaultPiPipeconf.builder()
59 .withId(new PiPipeconfId(PIPECONF_ID))
Carmelo Cascone31d3e442017-07-18 16:58:51 -040060 .withPipelineModel(Bmv2PipelineModelParser.parse(jsonUrl))
Carmelo Casconea62ac3d2017-08-30 03:19:00 +020061 .addBehaviour(PiPipelineInterpreter.class, DefaultP4Interpreter.class)
Carmelo Cascone31d3e442017-07-18 16:58:51 -040062 .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
Carmelo Casconeb045ddc2017-09-01 01:26:35 +020063 .addBehaviour(PortStatisticsDiscovery.class, DefaultP4PortStatisticsDiscovery.class)
Carmelo Cascone31d3e442017-07-18 16:58:51 -040064 .addExtension(P4_INFO_TEXT, p4InfoUrl)
65 .addExtension(BMV2_JSON, jsonUrl)
Carmelo Cascone07d72712017-07-14 15:57:47 -040066 .build();
67 }
68}