DO-NOT-MERGE-YET: Port description is not getting udpated when port removed from...
[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
12 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdated;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdatedBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.State;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.StateBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemovedBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdatedBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfigV10;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeaturesV10;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortStateV10;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortGrouping;
30
31 public abstract class PortTranslatorUtil {
32     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(PortFeatures apf) {
33         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures napf = null;
34         if (apf != null) {
35             napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
36                     apf.isAutoneg(), //_autoeng
37                     apf.isCopper(), //_copper
38                     apf.isFiber(), //_fiber
39                     apf.is_40gbFd(), //_fortyGbFd
40                     apf.is_100gbFd(), //_hundredGbFd
41                     apf.is_100mbFd(), //_hundredMbFd
42                     apf.is_100mbHd(), //_hundredMbHd
43                     apf.is_1gbFd(), //_oneGbFd
44                     apf.is_1gbHd(), //_oneGbHd
45                     apf.is_1tbFd(), //_oneTbFd
46                     apf.isOther(), //_other
47                     apf.isPause(), //_pause
48                     apf.isPauseAsym(), //_pauseAsym
49                     apf.is_10gbFd(), //_tenGbFd
50                     apf.is_10mbFd(), //_tenMbFd
51                     apf.is_10mbHd()//_tenMbHd
52             );
53
54         }
55         return napf;
56     }
57
58     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures translatePortFeatures(
59             PortFeaturesV10 apf) {
60         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures napf = null;
61         if (apf != null) {
62             napf = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures(
63                     apf.isAutoneg(), //_autoeng
64                     apf.isCopper(), //_copper
65                     apf.isFiber(), //_fiber
66                     false, //_fortyGbFd
67                     false, //_hundredGbFd
68                     apf.is_100mbFd(), //_hundredMbFd
69                     apf.is_100mbHd(), //_hundredMbHd
70                     apf.is_1gbFd(), //_oneGbFd
71                     apf.is_1gbHd(), //_oneGbHd
72                     false, //_oneTbFd
73                     false, //_other
74                     apf.isPause(), //_pause
75                     apf.isPauseAsym(), //_pauseAsym
76                     apf.is_10gbFd(), //_tenGbFd
77                     apf.is_10mbFd(), //_tenMbFd
78                     apf.is_10mbHd()//_tenMbHd
79                     );
80         }
81         return napf;
82     }
83
84     public static State translatePortState(PortState state) {
85         StateBuilder nstate = new StateBuilder();
86         if (state != null) {
87             nstate.setBlocked(state.isBlocked());
88             nstate.setLinkDown(state.isLinkDown());
89             nstate.setLive(state.isLive());
90         }
91         return nstate.build();
92     }
93
94     public static State translatePortState(PortStateV10 state) {
95         StateBuilder nstate = new StateBuilder();
96         if (state != null) {
97             nstate.setBlocked(state.isBlocked());
98             nstate.setLinkDown(state.isLinkDown());
99             nstate.setLive(state.isLive());
100         }
101         return nstate.build();
102     }
103
104     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(PortConfig pc) {
105         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig npc = null;
106         if (pc != null) {
107             npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
108                     pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
109         }
110         return npc;
111     }
112
113     public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig translatePortConfig(
114             PortConfigV10 pc) {
115         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig npc = null;
116         if (pc != null) {
117             npc = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortConfig(pc.isNoFwd(),
118                     pc.isNoPacketIn(), pc.isNoRecv(), pc.isPortDown());
119         }
120         return npc;
121     }
122
123     public static NodeConnectorUpdated translatePort(Short version, BigInteger datapathId, Long portNumber, PortGrouping port) {
124         OpenflowVersion ofVersion = OpenflowVersion.get(version);
125         NodeConnectorUpdatedBuilder builder = InventoryDataServiceUtil
126                 .nodeConnectorUpdatedBuilderFromDatapathIdPortNo(datapathId, port.getPortNo(), ofVersion);
127         FlowCapableNodeConnectorUpdatedBuilder fcncub = new FlowCapableNodeConnectorUpdatedBuilder();
128         if (ofVersion == OpenflowVersion.OF13) {
129             fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeatures()));
130             fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfig()));
131             fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeatures()));
132             fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeatures()));
133             fcncub.setState(PortTranslatorUtil.translatePortState(port.getState()));
134             fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeatures()));
135
136         } else if (ofVersion == OpenflowVersion.OF10) {
137             fcncub.setAdvertisedFeatures(PortTranslatorUtil.translatePortFeatures(port.getAdvertisedFeaturesV10()));
138             fcncub.setConfiguration(PortTranslatorUtil.translatePortConfig(port.getConfigV10()));
139             fcncub.setCurrentFeature(PortTranslatorUtil.translatePortFeatures(port.getCurrentFeaturesV10()));
140             fcncub.setPeerFeatures(PortTranslatorUtil.translatePortFeatures(port.getPeerFeaturesV10()));
141             fcncub.setState(PortTranslatorUtil.translatePortState(port.getStateV10()));
142             fcncub.setSupported(PortTranslatorUtil.translatePortFeatures(port.getSupportedFeaturesV10()));
143         }
144         fcncub.setCurrentSpeed(port.getCurrSpeed());
145         fcncub.setHardwareAddress(port.getHwAddr());
146         fcncub.setMaximumSpeed(port.getMaxSpeed());
147         fcncub.setName(port.getName());
148         fcncub.setPortNumber(OpenflowPortsUtil.getProtocolAgnosticPort(ofVersion, portNumber));
149         builder.addAugmentation(FlowCapableNodeConnectorUpdated.class, fcncub.build());
150         return builder.build();
151     }
152
153     public static NodeConnectorRemoved translatePortRemoved(Short version, BigInteger datapathId, Long portNumber, PortGrouping port) {
154         OpenflowVersion ofVersion = OpenflowVersion.get(version);
155         NodeConnectorRemovedBuilder builder = new NodeConnectorRemovedBuilder();
156         builder.setNodeConnectorRef(InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(datapathId, portNumber, ofVersion));
157         return builder.build();
158     }
159 }