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=ca56c5ec0cdc2781def68618b8e39a10b16ad129;hpb=2a47de8380b599a20d8577b7f265b7d8b84fd020;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 ca56c5ec0c..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,5 +1,5 @@ /** - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * 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, @@ -7,35 +7,198 @@ */ package org.opendaylight.openflowplugin.openflow.md.core.translator; -import org.opendaylight.openflowplugin.openflow.md.core.ByteUtil; -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 java.math.BigInteger; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorType; +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; /** - * @author mirehak - * + * OF-1.3 errorMessage support */ -public class ErrorTranslator implements IMDMessageTranslator { +public class ErrorTranslator extends AbstractErrorTranslator { - private static final Logger LOG = LoggerFactory - .getLogger(ErrorTranslator.class); - @Override - public DataObject translate(SwitchConnectionDistinguisher cookie, - SessionContext sc, OfHeader msg) { - ErrorMessage errorMsg = (ErrorMessage) msg; - LOG.error("errorMessage arrived: type={}, code={}, data={} | [{}]", - errorMsg.getType(), errorMsg.getCode(), - new String(errorMsg.getData()), ByteUtil.bytesToHexstring(errorMsg.getData(), " ")); - //TODO:: add sal-error wrapper - return null; + public ErrorType decodeErrorType(int type) { + return ErrorType.forValue(type); } + @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())); + + //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; + } }