X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fopenflow%2Fmd%2Fcore%2Ftranslator%2FErrorTranslator.java;h=b00bfce6cda8f357a94caf5a61503666ce1bf2ed;hb=611180ac770b6038b526c54994701db16d1a8567;hp=bec562615df38ce94a9cbed97c1660314e1e8e96;hpb=ca204dd6905094e282c1d5621aca491f6533e868;p=openflowplugin.git diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/ErrorTranslator.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/ErrorTranslator.java index bec562615d..b00bfce6cd 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/ErrorTranslator.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/ErrorTranslator.java @@ -1,61 +1,204 @@ +/** + * Copyright (c) 2013-2014 Cisco Systems, Inc. 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.translator; import java.math.BigInteger; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import org.opendaylight.openflowplugin.openflow.md.core.IMDMessageTranslator; -import org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher; -import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext; -import org.opendaylight.openflowplugin.openflow.md.util.ByteUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeErrorNotification; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeErrorNotificationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadActionErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadInstructionErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadMatchErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadRequestErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.ExperimenterErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.FlowModErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.GroupModErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.HelloFailedErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.MeterModErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.PortModErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.QueueOpErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.RoleRequestErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.SwitchConfigErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableFeaturesErrorNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableModErrorNotificationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -public class ErrorTranslator implements IMDMessageTranslator> { - - protected static final Logger LOG = LoggerFactory.getLogger(ErrorTranslator.class); +/** + * OF-1.3 errorMessage support + */ +public class ErrorTranslator extends AbstractErrorTranslator { @Override - public List translate(SwitchConnectionDistinguisher cookie, SessionContext sc, OfHeader msg) { - if (msg instanceof ErrorMessage) { - ErrorMessage message = (ErrorMessage) msg; - List list = new CopyOnWriteArrayList(); - LOG.error(" Error Message received: type={}[{}], code={}[{}], data={}[{}] ", message.getType(), - message.getTypeString(), message.getCode(), message.getCodeString(), new String(message.getData()), - ByteUtil.bytesToHexstring(message.getData(), " ")); - - // create a Node Error Notification event builder - NodeErrorNotificationBuilder nodeErrBuilder = new NodeErrorNotificationBuilder(); - - // Fill in the Node Error Notification Builder object from the Error - // Message - - nodeErrBuilder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid()))); - - nodeErrBuilder.setType(ErrorType.forValue(message.getType())); - - nodeErrBuilder.setCode(message.getCode()); - - nodeErrBuilder.setData(new String(message.getData())); - - // TODO -- Augmentation is not handled + public ErrorType decodeErrorType(int type) { + return ErrorType.forValue(type); + } - // Note Error_TypeV10 is not handled. + @Override + public org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage getGranularNodeErrors(ErrorMessage message, ErrorType errorType, NodeRef node){ + org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage outErrorMessage = null; + TransactionId txnId = new TransactionId(BigInteger.valueOf(message.getXid())); - NodeErrorNotification nodeErrorEvent = nodeErrBuilder.build(); - list.add(nodeErrorEvent); - return list; - } else { - LOG.error("Message is not of Error Message "); - return null; + //currently in yang , generation of builders does not support an interface + //so each notification is put in a separate if-else + if (errorType == ErrorType.HelloFailed) { + HelloFailedErrorNotificationBuilder builder = new HelloFailedErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.BadRequest) { + BadRequestErrorNotificationBuilder builder = new BadRequestErrorNotificationBuilder (); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.BadAction) { + BadActionErrorNotificationBuilder builder = new BadActionErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.BadInstruction) { + BadInstructionErrorNotificationBuilder builder = new BadInstructionErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.BadMatch) { + BadMatchErrorNotificationBuilder builder = new BadMatchErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.FlowModFailed) { + FlowModErrorNotificationBuilder builder = new FlowModErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.GroupModFailed) { + GroupModErrorNotificationBuilder builder = new GroupModErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.PortModFailed) { + PortModErrorNotificationBuilder builder = new PortModErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.QueueOpFailed) { + QueueOpErrorNotificationBuilder builder = new QueueOpErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.SwitchConfigFailed) { + SwitchConfigErrorNotificationBuilder builder = new SwitchConfigErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.RoleRequestFailed) { + RoleRequestErrorNotificationBuilder builder = new RoleRequestErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.MeterModFailed) { + MeterModErrorNotificationBuilder builder = new MeterModErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.TableModFailed) { + TableModErrorNotificationBuilder builder = new TableModErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.TableFeaturesFailed) { + TableFeaturesErrorNotificationBuilder builder = new TableFeaturesErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); + } else if (errorType == ErrorType.Experimenter) { + ExperimenterErrorNotificationBuilder builder = new ExperimenterErrorNotificationBuilder(); + builder.setTransactionId(txnId); + builder.setType(errorType); + builder.setCode(message.getCode()); + builder.setNode(node); + if (message.getData() != null) { + builder.setData(new String(message.getData())); + } + outErrorMessage = builder.build(); } + + return outErrorMessage; } }