2 * Copyright (c) 2013-2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.openflowplugin.openflow.md.core.translator;
10 import java.math.BigInteger;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorType;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadActionErrorNotificationBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadInstructionErrorNotificationBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadMatchErrorNotificationBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadRequestErrorNotificationBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.ExperimenterErrorNotificationBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.FlowModErrorNotificationBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.GroupModErrorNotificationBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.HelloFailedErrorNotificationBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.MeterModErrorNotificationBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.PortModErrorNotificationBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.QueueOpErrorNotificationBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.RoleRequestErrorNotificationBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.SwitchConfigErrorNotificationBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableFeaturesErrorNotificationBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableModErrorNotificationBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
33 * OF-1.3 errorMessage support
35 public class ErrorTranslator extends AbstractErrorTranslator {
38 public ErrorType decodeErrorType(int type) {
39 return ErrorType.forValue(type);
43 public org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage getGranularNodeErrors(ErrorMessage message, ErrorType errorType, NodeRef node){
44 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage outErrorMessage = null;
45 TransactionId txnId = new TransactionId(BigInteger.valueOf(message.getXid()));
47 //currently in yang , generation of builders does not support an interface
48 //so each notification is put in a separate if-else
49 if (errorType == ErrorType.HelloFailed) {
50 HelloFailedErrorNotificationBuilder builder = new HelloFailedErrorNotificationBuilder();
51 builder.setTransactionId(txnId);
52 builder.setType(errorType);
53 builder.setCode(message.getCode());
54 builder.setNode(node);
55 if (message.getData() != null) {
56 builder.setData(new String(message.getData()));
58 outErrorMessage = builder.build();
59 } else if (errorType == ErrorType.BadRequest) {
60 BadRequestErrorNotificationBuilder builder = new BadRequestErrorNotificationBuilder ();
61 builder.setTransactionId(txnId);
62 builder.setType(errorType);
63 builder.setCode(message.getCode());
64 builder.setNode(node);
65 if (message.getData() != null) {
66 builder.setData(new String(message.getData()));
68 outErrorMessage = builder.build();
69 } else if (errorType == ErrorType.BadAction) {
70 BadActionErrorNotificationBuilder builder = new BadActionErrorNotificationBuilder();
71 builder.setTransactionId(txnId);
72 builder.setType(errorType);
73 builder.setCode(message.getCode());
74 builder.setNode(node);
75 if (message.getData() != null) {
76 builder.setData(new String(message.getData()));
78 outErrorMessage = builder.build();
79 } else if (errorType == ErrorType.BadInstruction) {
80 BadInstructionErrorNotificationBuilder builder = new BadInstructionErrorNotificationBuilder();
81 builder.setTransactionId(txnId);
82 builder.setType(errorType);
83 builder.setCode(message.getCode());
84 builder.setNode(node);
85 if (message.getData() != null) {
86 builder.setData(new String(message.getData()));
88 outErrorMessage = builder.build();
89 } else if (errorType == ErrorType.BadMatch) {
90 BadMatchErrorNotificationBuilder builder = new BadMatchErrorNotificationBuilder();
91 builder.setTransactionId(txnId);
92 builder.setType(errorType);
93 builder.setCode(message.getCode());
94 builder.setNode(node);
95 if (message.getData() != null) {
96 builder.setData(new String(message.getData()));
98 outErrorMessage = builder.build();
99 } else if (errorType == ErrorType.FlowModFailed) {
100 FlowModErrorNotificationBuilder builder = new FlowModErrorNotificationBuilder();
101 builder.setTransactionId(txnId);
102 builder.setType(errorType);
103 builder.setCode(message.getCode());
104 builder.setNode(node);
105 if (message.getData() != null) {
106 builder.setData(new String(message.getData()));
108 outErrorMessage = builder.build();
109 } else if (errorType == ErrorType.GroupModFailed) {
110 GroupModErrorNotificationBuilder builder = new GroupModErrorNotificationBuilder();
111 builder.setTransactionId(txnId);
112 builder.setType(errorType);
113 builder.setCode(message.getCode());
114 builder.setNode(node);
115 if (message.getData() != null) {
116 builder.setData(new String(message.getData()));
118 outErrorMessage = builder.build();
119 } else if (errorType == ErrorType.PortModFailed) {
120 PortModErrorNotificationBuilder builder = new PortModErrorNotificationBuilder();
121 builder.setTransactionId(txnId);
122 builder.setType(errorType);
123 builder.setCode(message.getCode());
124 builder.setNode(node);
125 if (message.getData() != null) {
126 builder.setData(new String(message.getData()));
128 outErrorMessage = builder.build();
129 } else if (errorType == ErrorType.QueueOpFailed) {
130 QueueOpErrorNotificationBuilder builder = new QueueOpErrorNotificationBuilder();
131 builder.setTransactionId(txnId);
132 builder.setType(errorType);
133 builder.setCode(message.getCode());
134 builder.setNode(node);
135 if (message.getData() != null) {
136 builder.setData(new String(message.getData()));
138 outErrorMessage = builder.build();
139 } else if (errorType == ErrorType.SwitchConfigFailed) {
140 SwitchConfigErrorNotificationBuilder builder = new SwitchConfigErrorNotificationBuilder();
141 builder.setTransactionId(txnId);
142 builder.setType(errorType);
143 builder.setCode(message.getCode());
144 builder.setNode(node);
145 if (message.getData() != null) {
146 builder.setData(new String(message.getData()));
148 outErrorMessage = builder.build();
149 } else if (errorType == ErrorType.RoleRequestFailed) {
150 RoleRequestErrorNotificationBuilder builder = new RoleRequestErrorNotificationBuilder();
151 builder.setTransactionId(txnId);
152 builder.setType(errorType);
153 builder.setCode(message.getCode());
154 builder.setNode(node);
155 if (message.getData() != null) {
156 builder.setData(new String(message.getData()));
158 outErrorMessage = builder.build();
159 } else if (errorType == ErrorType.MeterModFailed) {
160 MeterModErrorNotificationBuilder builder = new MeterModErrorNotificationBuilder();
161 builder.setTransactionId(txnId);
162 builder.setType(errorType);
163 builder.setCode(message.getCode());
164 builder.setNode(node);
165 if (message.getData() != null) {
166 builder.setData(new String(message.getData()));
168 outErrorMessage = builder.build();
169 } else if (errorType == ErrorType.TableModFailed) {
170 TableModErrorNotificationBuilder builder = new TableModErrorNotificationBuilder();
171 builder.setTransactionId(txnId);
172 builder.setType(errorType);
173 builder.setCode(message.getCode());
174 builder.setNode(node);
175 if (message.getData() != null) {
176 builder.setData(new String(message.getData()));
178 outErrorMessage = builder.build();
179 } else if (errorType == ErrorType.TableFeaturesFailed) {
180 TableFeaturesErrorNotificationBuilder builder = new TableFeaturesErrorNotificationBuilder();
181 builder.setTransactionId(txnId);
182 builder.setType(errorType);
183 builder.setCode(message.getCode());
184 builder.setNode(node);
185 if (message.getData() != null) {
186 builder.setData(new String(message.getData()));
188 outErrorMessage = builder.build();
189 } else if (errorType == ErrorType.Experimenter) {
190 ExperimenterErrorNotificationBuilder builder = new ExperimenterErrorNotificationBuilder();
191 builder.setTransactionId(txnId);
192 builder.setType(errorType);
193 builder.setCode(message.getCode());
194 builder.setNode(node);
195 if (message.getData() != null) {
196 builder.setData(new String(message.getData()));
198 outErrorMessage = builder.build();
201 return outErrorMessage;