X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=extension%2Fopenflowplugin-extension-nicira%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fextension%2Fvendor%2Fnicira%2Fconvertor%2Fmatch%2FRegConvertor.java;h=42bb027d1ea4e2592ef0a63133d4fd842dab3c51;hb=a0543340afd14d8ab4aac0f6c13ddcbf8ec1c761;hp=4456db9085960b6f114643be8c57c90cc7936934;hpb=cc9699da56f775329db83ad872d32acbf097a4b1;p=openflowplugin.git diff --git a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/RegConvertor.java b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/RegConvertor.java index 4456db9085..42bb027d1e 100644 --- a/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/RegConvertor.java +++ b/extension/openflowplugin-extension-nicira/src/main/java/org/opendaylight/openflowplugin/extension/vendor/nicira/convertor/match/RegConvertor.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the @@ -7,8 +7,8 @@ */ package org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match; -import com.google.common.base.Optional; -import org.opendaylight.openflowjava.nx.NiciraMatchCodecs; +import java.util.Optional; +import org.opendaylight.openflowjava.nx.codec.match.NiciraMatchCodecs; import org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava; import org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava; import org.opendaylight.openflowplugin.extension.api.ExtensionAugment; @@ -17,17 +17,21 @@ import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPr import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm1Class; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.aug.nx.match.RegCaseValue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.aug.nx.match.RegCaseValueBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.reg.grouping.RegValuesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.RegCaseValue; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.RegCaseValueBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.ExtensionKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.Extension; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlow; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlowBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketIn; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketInBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemoved; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemovedBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifUpdateFlowStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifUpdateFlowStatsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchPacketInMessage; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchPacketInMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcGetFlowStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcGetFlowStatsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg0Key; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg1Key; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg2Key; @@ -44,107 +48,107 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** + * Convert to/from SAL flow model to openflowjava model for NxmNxReg. + * * @author msunal */ public class RegConvertor implements ConvertorToOFJava, ConvertorFromOFJava { - private final static Logger LOG = LoggerFactory.getLogger(RegConvertor.class); + private static final Logger LOG = LoggerFactory.getLogger(RegConvertor.class); - /* - * (non-Javadoc) - * - * @see - * org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava#convert - * (org.opendaylight.yangtools.yang.binding.DataContainer, - * org.opendaylight.openflowplugin.extension.api.path.AugmentationPath) - */ @SuppressWarnings("unchecked") @Override - public ExtensionAugment> convert(MatchEntry input, MatchPath path) { + public ExtensionAugment> convert(final MatchEntry input, final MatchPath path) { NxmNxRegBuilder nxRegBuilder = new NxmNxRegBuilder(); - if (!org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg.class - .isAssignableFrom(input.getOxmMatchField())) { + if (!(input.getOxmMatchField() + instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg)) { String msg = input.getOxmMatchField() + " does not implement " + org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg.class; - LOG.warn(msg); + LOG.warn("Warning {}",msg); throw new IllegalStateException(msg); } - nxRegBuilder - .setReg((Class) input - .getOxmMatchField()); - RegCaseValue regCaseValue = ((RegCaseValue) input.getMatchEntryValue()); + nxRegBuilder.setReg((org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg) + input.getOxmMatchField()); + RegCaseValue regCaseValue = (RegCaseValue) input.getMatchEntryValue(); nxRegBuilder.setValue(regCaseValue.getRegValues().getValue()); + + if (input.getHasMask()) { + nxRegBuilder.setMask(regCaseValue.getRegValues().getMask()); + } + return resolveAugmentation(nxRegBuilder.build(), path, resolveRegKey(input.getOxmMatchField())); } - private static Class resolveRegKey(Class oxmMatchField) { - if (NiciraMatchCodecs.REG0_CODEC.getNxmField().isAssignableFrom(oxmMatchField)) { - return NxmNxReg0Key.class; + @Override + public MatchEntry convert(final Extension extension) { + Optional matchGrouping = MatchUtil.REG_RESOLVER.findExtension(extension); + if (!matchGrouping.isPresent()) { + throw new CodecPreconditionException(extension); } - if (NiciraMatchCodecs.REG1_CODEC.getNxmField().isAssignableFrom(oxmMatchField)) { - return NxmNxReg1Key.class; + NxmNxReg nxmNxReg = matchGrouping.get().getNxmNxReg(); + RegValuesBuilder regValuesBuilder = new RegValuesBuilder() + .setValue(nxmNxReg.getValue()) + .setMask(nxmNxReg.getMask()); + + RegCaseValueBuilder regCaseValueBuilder = new RegCaseValueBuilder(); + regCaseValueBuilder.setRegValues(regValuesBuilder.build()); + return MatchUtil.createDefaultMatchEntryBuilder(nxmNxReg.getReg(), + Nxm1Class.VALUE, + regCaseValueBuilder.build()) + .setHasMask(nxmNxReg.getMask() != null) + .build(); + } + + private static ExtensionKey resolveRegKey(final MatchField oxmMatchField) { + // FIXME: Use direct field value equalitity + if (NiciraMatchCodecs.REG0_CODEC.getNxmField().equals(oxmMatchField)) { + return NxmNxReg0Key.VALUE; + } + if (NiciraMatchCodecs.REG1_CODEC.getNxmField().equals(oxmMatchField)) { + return NxmNxReg1Key.VALUE; } - if (NiciraMatchCodecs.REG2_CODEC.getNxmField().isAssignableFrom(oxmMatchField)) { - return NxmNxReg2Key.class; + if (NiciraMatchCodecs.REG2_CODEC.getNxmField().equals(oxmMatchField)) { + return NxmNxReg2Key.VALUE; } - if (NiciraMatchCodecs.REG3_CODEC.getNxmField().isAssignableFrom(oxmMatchField)) { - return NxmNxReg3Key.class; + if (NiciraMatchCodecs.REG3_CODEC.getNxmField().equals(oxmMatchField)) { + return NxmNxReg3Key.VALUE; } - if (NiciraMatchCodecs.REG4_CODEC.getNxmField().isAssignableFrom(oxmMatchField)) { - return NxmNxReg4Key.class; + if (NiciraMatchCodecs.REG4_CODEC.getNxmField().equals(oxmMatchField)) { + return NxmNxReg4Key.VALUE; } - if (NiciraMatchCodecs.REG5_CODEC.getNxmField().isAssignableFrom(oxmMatchField)) { - return NxmNxReg5Key.class; + if (NiciraMatchCodecs.REG5_CODEC.getNxmField().equals(oxmMatchField)) { + return NxmNxReg5Key.VALUE; } - if (NiciraMatchCodecs.REG6_CODEC.getNxmField().isAssignableFrom(oxmMatchField)) { - return NxmNxReg6Key.class; + if (NiciraMatchCodecs.REG6_CODEC.getNxmField().equals(oxmMatchField)) { + return NxmNxReg6Key.VALUE; } - if (NiciraMatchCodecs.REG7_CODEC.getNxmField().isAssignableFrom(oxmMatchField)) { - return NxmNxReg7Key.class; + if (NiciraMatchCodecs.REG7_CODEC.getNxmField().equals(oxmMatchField)) { + return NxmNxReg7Key.VALUE; } throw new CodecPreconditionException("There is no key for " + oxmMatchField); } - private static ExtensionAugment> resolveAugmentation(NxmNxReg nxmNxReg, - MatchPath path, Class key) { + private static ExtensionAugment> resolveAugmentation(final NxmNxReg nxmNxReg, + final MatchPath path, final ExtensionKey key) { switch (path) { - case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_MATCH: - return new ExtensionAugment<>(NxAugMatchNotifUpdateFlowStats.class, - new NxAugMatchNotifUpdateFlowStatsBuilder().setNxmNxReg(nxmNxReg).build(), key); - case PACKETRECEIVED_MATCH: + case FLOWS_STATISTICS_UPDATE_MATCH: + return new ExtensionAugment<>(NxAugMatchNodesNodeTableFlow.class, + new NxAugMatchNodesNodeTableFlowBuilder().setNxmNxReg(nxmNxReg).build(), key); + case FLOWS_STATISTICS_RPC_MATCH: + return new ExtensionAugment<>(NxAugMatchRpcGetFlowStats.class, + new NxAugMatchRpcGetFlowStatsBuilder().setNxmNxReg(nxmNxReg).build(), key); + case PACKET_RECEIVED_MATCH: return new ExtensionAugment<>(NxAugMatchNotifPacketIn.class, new NxAugMatchNotifPacketInBuilder() .setNxmNxReg(nxmNxReg).build(), key); - case SWITCHFLOWREMOVED_MATCH: + case SWITCH_FLOW_REMOVED_MATCH: return new ExtensionAugment<>(NxAugMatchNotifSwitchFlowRemoved.class, new NxAugMatchNotifSwitchFlowRemovedBuilder().setNxmNxReg(nxmNxReg).build(), key); + case PACKET_IN_MESSAGE_MATCH: + return new ExtensionAugment<>(NxAugMatchPacketInMessage.class, + new NxAugMatchPacketInMessageBuilder().setNxmNxReg(nxmNxReg).build(), key); default: throw new CodecPreconditionException(path); } } - - /* - * (non-Javadoc) - * - * @see - * org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava#convert - * (org - * .opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general - * .rev140714.general.extension.grouping.Extension) - */ - @Override - public MatchEntry convert(Extension extension) { - Optional matchGrouping = MatchUtil.regResolver.getExtension(extension); - if (!matchGrouping.isPresent()) { - throw new CodecPreconditionException(extension); - } - NxmNxReg nxmNxReg = matchGrouping.get().getNxmNxReg(); - RegValuesBuilder regValuesBuilder = new RegValuesBuilder().setValue(nxmNxReg.getValue()); - RegCaseValueBuilder regCaseValueBuilder = new RegCaseValueBuilder(); - regCaseValueBuilder.setRegValues(regValuesBuilder.build()); - return MatchUtil.createDefaultMatchEntryBuilder(nxmNxReg.getReg(), - Nxm1Class.class, - regCaseValueBuilder.build()).build(); - } - }