blob: 261c8ba3d07000b3e126396bdd3a59c57a47c372 [file] [log] [blame]
Andrea Campanella7c977b92018-05-30 21:39:45 -07001/*
2 * Copyright 2015-present Open Networking Foundation
3 *
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 */
16package org.onosproject.driver.extensions;
17
18import org.onosproject.net.PortNumber;
19import org.onosproject.net.behaviour.ExtensionSelectorResolver;
20import org.onosproject.net.driver.AbstractHandlerBehaviour;
21import org.onosproject.net.flow.criteria.ExtensionSelector;
22import org.onosproject.net.flow.criteria.ExtensionSelectorType;
23import org.onosproject.net.flow.criteria.ExtensionSelectorType.ExtensionSelectorTypes;
24import org.onosproject.openflow.controller.ExtensionSelectorInterpreter;
25import org.projectfloodlight.openflow.protocol.OFFactory;
26import org.projectfloodlight.openflow.protocol.match.MatchField;
27import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
28import org.projectfloodlight.openflow.protocol.oxm.OFOxmOfdpaActsetOutput;
29import org.projectfloodlight.openflow.types.U32;
30
31/**
32 * Interpreter for OFDPA OpenFlow selector extensions for OVS.
33 */
34public class OvsOfdpaExtensionSelectorInterpreter extends AbstractHandlerBehaviour
35 implements ExtensionSelectorInterpreter, ExtensionSelectorResolver {
36
37 @Override
38 public boolean supported(ExtensionSelectorType extensionSelectorType) {
39 if (extensionSelectorType.equals(
40 ExtensionSelectorTypes.OFDPA_MATCH_ACTSET_OUTPUT.type())) {
41 return true;
42 }
43 return false;
44 }
45
46 @Override
47 public OFOxm<?> mapSelector(OFFactory factory, ExtensionSelector extensionSelector) {
48 ExtensionSelectorType type = extensionSelector.type();
49 if (type.equals(ExtensionSelectorTypes.OFDPA_MATCH_ACTSET_OUTPUT.type())) {
50 PortNumber port = ((OfdpaMatchActsetOutput) extensionSelector).port();
51 return factory.oxms().ofdpaActsetOutput(U32.of(port.toLong()));
52 }
53 throw new UnsupportedOperationException(
54 "Unexpected ExtensionSelector: " + extensionSelector.toString());
55 }
56
57 @Override
58 public ExtensionSelector mapOxm(OFOxm<?> oxm) {
59 if (oxm.getMatchField().equals(MatchField.OFDPA_ACTSET_OUTPUT)) {
60 U32 portNumberU32 = ((OFOxmOfdpaActsetOutput) oxm).getValue();
61 PortNumber portNumber = PortNumber.portNumber(portNumberU32.getValue());
62 return new OfdpaMatchActsetOutput(portNumber);
63 }
64 throw new UnsupportedOperationException(
65 "Unexpected OXM: " + oxm.toString());
66 }
67
68 @Override
69 public ExtensionSelector getExtensionSelector(ExtensionSelectorType type) {
70 if (type.equals(ExtensionSelectorTypes.OFDPA_MATCH_ACTSET_OUTPUT.type())) {
71 return new OfdpaMatchActsetOutput();
72 }
73 throw new UnsupportedOperationException(
74 "Driver does not support extension type " + type.toString());
75 }
76}