dfcad7657481e9a4d1db29eb054fe93bc3290a7c
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / util / PortTranslatorUtil.java
1 /**
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.openflowplugin.openflow.md.util;
9
10 import java.math.BigInteger;
11 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdated;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdatedBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.State;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.StateBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdatedBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfigV10;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeaturesV10;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortStateV10;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortGrouping;
25
26 public abstract class PortTranslatorUtil {
27     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(PortFeatures apf) {
28         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures napf = null;
29         if (apf != null) {
30             napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
31                     apf.isAutoneg(), //_autoeng
32                     apf.isCopper(), //_copper
33                     apf.isFiber(), //_fiber
34                     apf.is_40gbFd(), //_fortyGbFd
35                     apf.is_100gbFd(), //_hundredGbFd
36                     apf.is_100mbFd(), //_hundredMbFd
37                     apf.is_100mbHd(), //_hundredMbHd
38                     apf.is_1gbFd(), //_oneGbFd
39                     apf.is_1gbHd(), //_oneGbHd
40                     apf.is_1tbFd(), //_oneTbFd
41                     apf.isOther(), //_other
42                     apf.isPause(), //_pause
43                     apf.isPauseAsym(), //_pauseAsym
44                     apf.is_10gbFd(), //_tenGbFd
45                     apf.is_10mbFd(), //_tenMbFd
46                     apf.is_10mbHd()//_tenMbHd
47             );
48
49         }
50         return napf;
51     }
52
53     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(
54             PortFeaturesV10 apf) {
55         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures napf = null;
56         if (apf != null) {
57             napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
58                     apf.isAutoneg(), //_autoeng
59                     apf.isCopper(), //_copper
60                     apf.isFiber(), //_fiber
61                     false, //_fortyGbFd
62                     false, //_hundredGbFd
63                     apf.is_100mbFd(), //_hundredMbFd
64                     apf.is_100mbHd(), //_hundredMbHd
65                     apf.is_1gbFd(), //_oneGbFd
66                     apf.is_1gbHd(), //_oneGbHd
67                     false, //_oneTbFd
68                     false, //_other
69                     apf.isPause(), //_pause
70                     apf.isPauseAsym(), //_pauseAsym
71                     apf.is_10gbFd(), //_tenGbFd
72                     apf.is_10mbFd(), //_tenMbFd
73                     apf.is_10mbHd()//_tenMbHd
74                     );
75         }
76         return napf;
77     }
78
79     public static State translatePortState(PortState state) {
80         StateBuilder nstate = new StateBuilder();
81         if (state != null) {
82             nstate.setBlocked(state.isBlocked());
83             nstate.setLinkDown(state.isLinkDown());
84             nstate.setLive(state.isLive());
85         }
86         return nstate.build();
87     }
88
89     public static State translatePortState(PortStateV10 state) {
90         StateBuilder nstate = new StateBuilder();
91         if (state != null) {
92             nstate.setBlocked(state.isBlocked());
93             nstate.setLinkDown(state.isLinkDown());
94             nstate.setLive(state.isLive());
95         }
96         return nstate.build();
97     }
98
99     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(PortConfig pc) {
100         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig npc = null;
101         if (pc != null) {
102             npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
103                     pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
104         }
105         return npc;
106     }
107
108     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(
109             PortConfigV10 pc) {
110         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig npc = null;
111         if (pc != null) {
112             npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
113                     pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
114         }
115         return npc;
116     }
117
118     public static NodeConnectorUpdated translatePort(Short version, BigInteger datapathId, Long portNumber, PortGrouping port) {
119         OpenflowVersion ofVersion = OpenflowVersion.get(version);
120         NodeConnectorUpdatedBuilder builder = InventoryDataServiceUtil
121                 .nodeConnectorUpdatedBuilderFromDatapathIdPortNo(datapathId, port.getPortNo(), ofVersion);
122         FlowCapableNodeConnectorUpdatedBuilder fcncub = new FlowCapableNodeConnectorUpdatedBuilder();
123         if (ofVersion == OpenflowVersion.OF13) {
124             fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeatures()));
125             fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfig()));
126             fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeatures()));
127             fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeatures()));
128             fcncub.setState(PortTranslatorUtil.translatePortState(port.getState()));
129             fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeatures()));
130
131         } else if (ofVersion == OpenflowVersion.OF10) {
132             fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeaturesV10()));
133             fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfigV10()));
134             fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeaturesV10()));
135             fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeaturesV10()));
136             fcncub.setState(PortTranslatorUtil.translatePortState(port.getStateV10()));
137             fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeaturesV10()));
138         }
139         fcncub.setCurrentSpeed(port.getCurrSpeed());
140         fcncub.setHardwareAddress(port.getHwAddr());
141         fcncub.setMaximumSpeed(port.getMaxSpeed());
142         fcncub.setName(port.getName());
143         fcncub.setPortNumber(OpenflowPortsUtil.getProtocolAgnosticPort(ofVersion, portNumber));
144         builder.addAugmentation(FlowCapableNodeConnectorUpdated.class, fcncub.build());
145         return builder.build();
146     }
147 }