2 * Copyright (c) 2013 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 org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher;
11 import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;
12 import org.opendaylight.openflowplugin.openflow.md.core.session.TransactionKey;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorType;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeErrorNotificationBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeFlow;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.node.error.reference.ObjectReference;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.node.error.reference.object.reference.FlowRefBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.node.error.reference.object.reference.GroupRefBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.node.error.reference.object.reference.MeterRefBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionMetadata;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.NodeGroup;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.NodeMeter;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadActionErrorNotificationBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadInstructionErrorNotification;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadInstructionErrorNotificationBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadMatchErrorNotificationBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadRequestErrorNotificationBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.ExperimenterErrorNotificationBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.FlowModErrorNotification;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.FlowModErrorNotificationBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.GroupModErrorNotificationBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.HelloFailedErrorNotificationBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.MeterModErrorNotificationBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.PortModErrorNotificationBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.QueueOpErrorNotificationBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.RoleRequestErrorNotificationBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.SwitchConfigErrorNotification;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.SwitchConfigErrorNotificationBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableFeaturesErrorNotificationBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
44 import org.opendaylight.yangtools.yang.binding.DataObject;
46 import java.math.BigInteger;
47 import java.util.List;
48 import java.util.concurrent.CopyOnWriteArrayList;
50 public class ErrorTranslator extends AbstractErrorTranslator {
53 public ErrorType decodeErrorType(int type) {
54 return ErrorType.forValue(type);
58 public List<DataObject> getGranularNodeErrors(ErrorMessage message, ErrorType errorType, Uri uri, ObjectReference objRef){
59 List<DataObject> list = new CopyOnWriteArrayList<DataObject>();
60 TransactionId txnId = new TransactionId(BigInteger.valueOf(message.getXid()));
62 //currently in yang , generation of builders does not support an interface
63 //so each notification is put in a separate if-else
64 if (errorType == ErrorType.HelloFailed) {
65 HelloFailedErrorNotificationBuilder builder = new HelloFailedErrorNotificationBuilder();
66 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
67 builder.setType(errorType);
68 builder.setCode(message.getCode());
69 if (message.getData() != null) {
70 builder.setData(new String(message.getData()));
72 builder.setTransactionUri(uri);
73 builder.setObjectReference(objRef);
74 list.add(builder.build());
76 } else if (errorType == ErrorType.BadRequest) {
77 BadRequestErrorNotificationBuilder builder = new BadRequestErrorNotificationBuilder ();
78 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
79 builder.setType(errorType);
80 builder.setCode(message.getCode());
81 if (message.getData() != null) {
82 builder.setData(new String(message.getData()));
84 builder.setTransactionUri(uri);
85 builder.setObjectReference(objRef);
86 list.add(builder.build());
87 } else if (errorType == ErrorType.BadAction) {
88 BadActionErrorNotificationBuilder builder = new BadActionErrorNotificationBuilder();
89 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
90 builder.setType(errorType);
91 builder.setCode(message.getCode());
92 if (message.getData() != null) {
93 builder.setData(new String(message.getData()));
95 builder.setTransactionUri(uri);
96 builder.setObjectReference(objRef);
97 list.add(builder.build());
98 } else if (errorType == ErrorType.BadInstruction) {
99 BadInstructionErrorNotificationBuilder builder = new BadInstructionErrorNotificationBuilder();
100 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
101 builder.setType(errorType);
102 builder.setCode(message.getCode());
103 if (message.getData() != null) {
104 builder.setData(new String(message.getData()));
106 builder.setTransactionUri(uri);
107 builder.setObjectReference(objRef);
108 list.add(builder.build());
110 } else if (errorType == ErrorType.BadMatch) {
111 BadMatchErrorNotificationBuilder builder = new BadMatchErrorNotificationBuilder();
112 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
113 builder.setType(errorType);
114 builder.setCode(message.getCode());
115 if (message.getData() != null) {
116 builder.setData(new String(message.getData()));
118 builder.setTransactionUri(uri);
119 builder.setObjectReference(objRef);
120 list.add(builder.build());
121 } else if (errorType == ErrorType.FlowModFailed) {
122 FlowModErrorNotificationBuilder builder = new FlowModErrorNotificationBuilder();
123 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
124 builder.setType(errorType);
125 builder.setCode(message.getCode());
126 if (message.getData() != null) {
127 builder.setData(new String(message.getData()));
129 builder.setTransactionUri(uri);
130 builder.setObjectReference(objRef);
131 list.add(builder.build());
132 } else if (errorType == ErrorType.GroupModFailed) {
133 GroupModErrorNotificationBuilder builder = new GroupModErrorNotificationBuilder();
134 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
135 builder.setType(errorType);
136 builder.setCode(message.getCode());
137 if (message.getData() != null) {
138 builder.setData(new String(message.getData()));
140 builder.setTransactionUri(uri);
141 builder.setObjectReference(objRef);
142 list.add(builder.build());
143 } else if (errorType == ErrorType.PortModFailed) {
144 PortModErrorNotificationBuilder builder = new PortModErrorNotificationBuilder();
145 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
146 builder.setType(errorType);
147 builder.setCode(message.getCode());
148 if (message.getData() != null) {
149 builder.setData(new String(message.getData()));
151 builder.setTransactionUri(uri);
152 builder.setObjectReference(objRef);
153 list.add(builder.build());
154 } else if (errorType == ErrorType.QueueOpFailed) {
155 QueueOpErrorNotificationBuilder builder = new QueueOpErrorNotificationBuilder();
156 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
157 builder.setType(errorType);
158 builder.setCode(message.getCode());
159 if (message.getData() != null) {
160 builder.setData(new String(message.getData()));
162 builder.setTransactionUri(uri);
163 builder.setObjectReference(objRef);
164 list.add(builder.build());
165 } else if (errorType == ErrorType.SwitchConfigFailed) {
166 SwitchConfigErrorNotificationBuilder builder = new SwitchConfigErrorNotificationBuilder();
167 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
168 builder.setType(errorType);
169 builder.setCode(message.getCode());
170 if (message.getData() != null) {
171 builder.setData(new String(message.getData()));
173 builder.setTransactionUri(uri);
174 builder.setObjectReference(objRef);
175 list.add(builder.build());
176 } else if (errorType == ErrorType.RoleRequestFailed) {
177 RoleRequestErrorNotificationBuilder builder = new RoleRequestErrorNotificationBuilder();
178 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
179 builder.setType(errorType);
180 builder.setCode(message.getCode());
181 if (message.getData() != null) {
182 builder.setData(new String(message.getData()));
184 builder.setTransactionUri(uri);
185 builder.setObjectReference(objRef);
186 list.add(builder.build());
187 } else if (errorType == ErrorType.MeterModFailed) {
188 MeterModErrorNotificationBuilder builder = new MeterModErrorNotificationBuilder();
189 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
190 builder.setType(errorType);
191 builder.setCode(message.getCode());
192 if (message.getData() != null) {
193 builder.setData(new String(message.getData()));
195 builder.setTransactionUri(uri);
196 builder.setObjectReference(objRef);
197 list.add(builder.build());
198 } else if (errorType == ErrorType.TableFeaturesFailed) {
199 TableFeaturesErrorNotificationBuilder builder = new TableFeaturesErrorNotificationBuilder();
200 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
201 builder.setType(errorType);
202 builder.setCode(message.getCode());
203 if (message.getData() != null) {
204 builder.setData(new String(message.getData()));
206 builder.setTransactionUri(uri);
207 builder.setObjectReference(objRef);
208 list.add(builder.build());
209 } else if (errorType == ErrorType.Experimenter) {
210 ExperimenterErrorNotificationBuilder builder = new ExperimenterErrorNotificationBuilder();
211 builder.setTransactionId(new TransactionId(BigInteger.valueOf(message.getXid())));
212 builder.setType(errorType);
213 builder.setCode(message.getCode());
214 if (message.getData() != null) {
215 builder.setData(new String(message.getData()));
217 builder.setTransactionUri(uri);
218 builder.setObjectReference(objRef);
219 list.add(builder.build());