blob: 0a1ebba368fc2e90dc5aaaad38dd34fcbbe9f04f [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;
21import org.onosproject.net.behaviour.Pipeliner;
Carmelo Cascone07d72712017-07-14 15:57:47 -040022import org.onosproject.net.pi.model.DefaultPiPipeconf;
23import org.onosproject.net.pi.model.PiPipeconf;
24import org.onosproject.net.pi.model.PiPipeconfId;
25import org.onosproject.net.pi.model.PiPipelineInterpreter;
26
Carmelo Cascone31d3e442017-07-18 16:58:51 -040027import java.net.URL;
Carmelo Cascone07d72712017-07-14 15:57:47 -040028
29import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.BMV2_JSON;
30import static org.onosproject.net.pi.model.PiPipeconf.ExtensionType.P4_INFO_TEXT;
31
32/**
33 * Factory of pipeconf implementation for the default.p4 program on BMv2.
34 */
35final class Bmv2DefaultPipeconfFactory {
36
37 private static final String PIPECONF_ID = "bmv2-default-pipeconf";
38 private static final String JSON_PATH = "/default.json";
39 private static final String P4INFO_PATH = "/default.p4info";
40
Carmelo Cascone44daf562017-07-16 23:55:08 -040041 private static final PiPipeconf PIPECONF = buildPipeconf();
42
Carmelo Cascone07d72712017-07-14 15:57:47 -040043 private Bmv2DefaultPipeconfFactory() {
44 // Hides constructor.
45 }
46
47 static PiPipeconf get() {
Carmelo Cascone44daf562017-07-16 23:55:08 -040048 return PIPECONF;
49 }
50
51 private static PiPipeconf buildPipeconf() {
Carmelo Cascone07d72712017-07-14 15:57:47 -040052
Carmelo Cascone31d3e442017-07-18 16:58:51 -040053 final URL jsonUrl = Bmv2DefaultPipeconfFactory.class.getResource(JSON_PATH);
54 final URL p4InfoUrl = Bmv2DefaultPipeconfFactory.class.getResource(P4INFO_PATH);
Carmelo Cascone07d72712017-07-14 15:57:47 -040055
56 return DefaultPiPipeconf.builder()
57 .withId(new PiPipeconfId(PIPECONF_ID))
Carmelo Cascone31d3e442017-07-18 16:58:51 -040058 .withPipelineModel(Bmv2PipelineModelParser.parse(jsonUrl))
Carmelo Cascone07d72712017-07-14 15:57:47 -040059 .addBehaviour(PiPipelineInterpreter.class, Bmv2DefaultInterpreter.class)
Carmelo Cascone31d3e442017-07-18 16:58:51 -040060 .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
61 .addExtension(P4_INFO_TEXT, p4InfoUrl)
62 .addExtension(BMV2_JSON, jsonUrl)
Carmelo Cascone07d72712017-07-14 15:57:47 -040063 .build();
64 }
65}