-/**
+/*
* Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
+
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
-import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
+import com.google.common.annotations.VisibleForTesting;
import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.port.mod.port.Port;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfigV10;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortModInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.multipart.reply.port.desc.Ports;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.multipart.reply.port.desc.PortsBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
- * @author esssuuu This convertor class is used for Port Mod,port status and
- * port description messages,decodes SAL and encodes to OF Data
+ * Converts port mod, port status and port description MD-SAL messages to OF library data
*
+ * Example usage:
+ * <pre>
+ * {@code
+ * VersionConvertorData data = new VersionConvertorData(version);
+ * Optional<PortModInput> ofPort = ConvertorManager.getInstance().convert(salPort, data);
+ * }
+ * </pre>
*/
-public final class PortConvertor {
- private static final Logger LOG = LoggerFactory.getLogger(PortConvertor.class);
-
- private PortConvertor() {
-
- }
+public class PortConvertor implements ParametrizedConvertor<Port, PortModInput, VersionConvertorData> {
/**
- * This method is used by PORT_MOD_MESSAGE
+ * Create default empty port mod input
+ * Use this method, if result from convertor is empty.
*
- * @param source source port
- * @param version openflow version
- * @return port mod input
+ * @param version Openflow version
+ * @return default empty port mod input
*/
-
- public static PortModInput toPortModInput(
- org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.port.mod.port.Port source,
- short version) {
-
-
- PortConfig config = maskPortConfigFields(source.getConfiguration());
- PortConfigV10 configV10 = maskPortConfigV10Fields(source.getConfiguration());
-
- PortModInputBuilder portModInputBuilder = new PortModInputBuilder();
- portModInputBuilder.setAdvertise(getPortFeatures(source.getAdvertisedFeatures()));
- portModInputBuilder.setPortNo(new PortNumber(
- OpenflowPortsUtil.getProtocolPortNumber(OpenflowVersion.get(version), source.getPortNumber())));
-
- portModInputBuilder.setConfig(config);
- portModInputBuilder.setMask(config);
-
- portModInputBuilder.setHwAddress(new MacAddress(source.getHardwareAddress()));
-
- portModInputBuilder.setVersion(version);
-
- portModInputBuilder.setConfigV10(configV10);
- portModInputBuilder.setMaskV10(configV10);
- portModInputBuilder.setAdvertiseV10(getPortFeaturesV10(source.getAdvertisedFeatures()));
- return portModInputBuilder.build();
-
+ public static PortModInput defaultResult(short version) {
+ return new PortModInputBuilder()
+ .setVersion(version)
+ .build();
}
private static PortConfig maskPortConfigFields(
return new PortConfigV10(false, noFwd, noPacketIn, noRecv, true, true, portDown);
}
+
private static PortFeatures getPortFeatures(
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortFeatures salPortFeatures) {
salPortFeatures.isPause(), salPortFeatures.isPauseAsym());
}
-
- /*
+ /**
* This method is called as a reply to OFPMP_PORT_DESCRIPTION
* message(OF1.3.1)
- */
- /**
- * @param source FlowCapablePort
+ *
+ * @param source FlowCapablePort
* @param version openflow version
* @return OF:Ports
*/
- public static Ports toPortDesc(
+ @VisibleForTesting
+ static Ports toPortDesc(
org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.FlowCapablePort source,
short version) {
- PortConfig config = null;
- PortState portState = null;
-
PortsBuilder oFPortDescDataBuilder = new PortsBuilder();
oFPortDescDataBuilder.setPortNo(
oFPortDescDataBuilder.setHwAddr(source.getHardwareAddress());
oFPortDescDataBuilder.setName(source.getName());
- config = maskPortConfigFields(source.getConfiguration());
+ PortConfig config = maskPortConfigFields(source.getConfiguration());
oFPortDescDataBuilder.setConfig(config);
- portState = getPortState(source.getState());
+ PortState portState = getPortState(source.getState());
oFPortDescDataBuilder.setState(portState);
oFPortDescDataBuilder.setCurrentFeatures(getPortFeatures(source.getCurrentFeature()));
}
+ @Override
+ public Class<?> getType() {
+ return Port.class;
+ }
+
+ @Override
+ public PortModInput convert(Port source, VersionConvertorData data) {
+ PortConfig config = maskPortConfigFields(source.getConfiguration());
+ PortConfigV10 configV10 = maskPortConfigV10Fields(source.getConfiguration());
+
+ PortModInputBuilder portModInputBuilder = new PortModInputBuilder();
+ portModInputBuilder.setAdvertise(getPortFeatures(source.getAdvertisedFeatures()));
+ portModInputBuilder.setPortNo(new PortNumber(
+ OpenflowPortsUtil.getProtocolPortNumber(OpenflowVersion.get(data.getVersion()), source.getPortNumber())));
+
+ portModInputBuilder.setConfig(config);
+ portModInputBuilder.setMask(config);
+
+ portModInputBuilder.setHwAddress(new MacAddress(source.getHardwareAddress()));
+ portModInputBuilder.setVersion(data.getVersion());
-}
+ portModInputBuilder.setConfigV10(configV10);
+ portModInputBuilder.setMaskV10(configV10);
+ portModInputBuilder.setAdvertiseV10(getPortFeaturesV10(source.getAdvertisedFeatures()));
+ return portModInputBuilder.build();
+ }
+}
\ No newline at end of file