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 java.math.BigInteger;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorType;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadActionErrorNotificationBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadInstructionErrorNotificationBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadMatchErrorNotificationBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadRequestErrorNotificationBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.ExperimenterErrorNotificationBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.FlowModErrorNotificationBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.GroupModErrorNotificationBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.HelloFailedErrorNotificationBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.MeterModErrorNotificationBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.PortModErrorNotificationBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.QueueOpErrorNotificationBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.RoleRequestErrorNotificationBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.SwitchConfigErrorNotificationBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableFeaturesErrorNotificationBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableModErrorNotificationBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
32 * OF-1.3 errorMessage support
34 public class ErrorTranslator extends AbstractErrorTranslator {
37 public ErrorType decodeErrorType(int type) {
38 return ErrorType.forValue(type);
42 public org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage getGranularNodeErrors(ErrorMessage message, ErrorType errorType){
43 org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage outErrorMessage = null;
44 TransactionId txnId = new TransactionId(BigInteger.valueOf(message.getXid()));
46 //currently in yang , generation of builders does not support an interface
47 //so each notification is put in a separate if-else
48 if (errorType == ErrorType.HelloFailed) {
49 HelloFailedErrorNotificationBuilder builder = new HelloFailedErrorNotificationBuilder();
50 builder.setTransactionId(txnId);
51 builder.setType(errorType);
52 builder.setCode(message.getCode());
53 if (message.getData() != null) {
54 builder.setData(new String(message.getData()));
56 outErrorMessage = builder.build();
57 } else if (errorType == ErrorType.BadRequest) {
58 BadRequestErrorNotificationBuilder builder = new BadRequestErrorNotificationBuilder ();
59 builder.setTransactionId(txnId);
60 builder.setType(errorType);
61 builder.setCode(message.getCode());
62 if (message.getData() != null) {
63 builder.setData(new String(message.getData()));
65 outErrorMessage = builder.build();
66 } else if (errorType == ErrorType.BadAction) {
67 BadActionErrorNotificationBuilder builder = new BadActionErrorNotificationBuilder();
68 builder.setTransactionId(txnId);
69 builder.setType(errorType);
70 builder.setCode(message.getCode());
71 if (message.getData() != null) {
72 builder.setData(new String(message.getData()));
74 outErrorMessage = builder.build();
75 } else if (errorType == ErrorType.BadInstruction) {
76 BadInstructionErrorNotificationBuilder builder = new BadInstructionErrorNotificationBuilder();
77 builder.setTransactionId(txnId);
78 builder.setType(errorType);
79 builder.setCode(message.getCode());
80 if (message.getData() != null) {
81 builder.setData(new String(message.getData()));
83 outErrorMessage = builder.build();
84 } else if (errorType == ErrorType.BadMatch) {
85 BadMatchErrorNotificationBuilder builder = new BadMatchErrorNotificationBuilder();
86 builder.setTransactionId(txnId);
87 builder.setType(errorType);
88 builder.setCode(message.getCode());
89 if (message.getData() != null) {
90 builder.setData(new String(message.getData()));
92 outErrorMessage = builder.build();
93 } else if (errorType == ErrorType.FlowModFailed) {
94 FlowModErrorNotificationBuilder builder = new FlowModErrorNotificationBuilder();
95 builder.setTransactionId(txnId);
96 builder.setType(errorType);
97 builder.setCode(message.getCode());
98 if (message.getData() != null) {
99 builder.setData(new String(message.getData()));
101 outErrorMessage = builder.build();
102 } else if (errorType == ErrorType.GroupModFailed) {
103 GroupModErrorNotificationBuilder builder = new GroupModErrorNotificationBuilder();
104 builder.setTransactionId(txnId);
105 builder.setType(errorType);
106 builder.setCode(message.getCode());
107 if (message.getData() != null) {
108 builder.setData(new String(message.getData()));
110 outErrorMessage = builder.build();
111 } else if (errorType == ErrorType.PortModFailed) {
112 PortModErrorNotificationBuilder builder = new PortModErrorNotificationBuilder();
113 builder.setTransactionId(txnId);
114 builder.setType(errorType);
115 builder.setCode(message.getCode());
116 if (message.getData() != null) {
117 builder.setData(new String(message.getData()));
119 outErrorMessage = builder.build();
120 } else if (errorType == ErrorType.QueueOpFailed) {
121 QueueOpErrorNotificationBuilder builder = new QueueOpErrorNotificationBuilder();
122 builder.setTransactionId(txnId);
123 builder.setType(errorType);
124 builder.setCode(message.getCode());
125 if (message.getData() != null) {
126 builder.setData(new String(message.getData()));
128 outErrorMessage = builder.build();
129 } else if (errorType == ErrorType.SwitchConfigFailed) {
130 SwitchConfigErrorNotificationBuilder builder = new SwitchConfigErrorNotificationBuilder();
131 builder.setTransactionId(txnId);
132 builder.setType(errorType);
133 builder.setCode(message.getCode());
134 if (message.getData() != null) {
135 builder.setData(new String(message.getData()));
137 outErrorMessage = builder.build();
138 } else if (errorType == ErrorType.RoleRequestFailed) {
139 RoleRequestErrorNotificationBuilder builder = new RoleRequestErrorNotificationBuilder();
140 builder.setTransactionId(txnId);
141 builder.setType(errorType);
142 builder.setCode(message.getCode());
143 if (message.getData() != null) {
144 builder.setData(new String(message.getData()));
146 outErrorMessage = builder.build();
147 } else if (errorType == ErrorType.MeterModFailed) {
148 MeterModErrorNotificationBuilder builder = new MeterModErrorNotificationBuilder();
149 builder.setTransactionId(txnId);
150 builder.setType(errorType);
151 builder.setCode(message.getCode());
152 if (message.getData() != null) {
153 builder.setData(new String(message.getData()));
155 outErrorMessage = builder.build();
156 } else if (errorType == ErrorType.TableModFailed) {
157 TableModErrorNotificationBuilder builder = new TableModErrorNotificationBuilder();
158 builder.setTransactionId(txnId);
159 builder.setType(errorType);
160 builder.setCode(message.getCode());
161 if (message.getData() != null) {
162 builder.setData(new String(message.getData()));
164 outErrorMessage = builder.build();
165 } else if (errorType == ErrorType.TableFeaturesFailed) {
166 TableFeaturesErrorNotificationBuilder builder = new TableFeaturesErrorNotificationBuilder();
167 builder.setTransactionId(txnId);
168 builder.setType(errorType);
169 builder.setCode(message.getCode());
170 if (message.getData() != null) {
171 builder.setData(new String(message.getData()));
173 outErrorMessage = builder.build();
174 } else if (errorType == ErrorType.Experimenter) {
175 ExperimenterErrorNotificationBuilder builder = new ExperimenterErrorNotificationBuilder();
176 builder.setTransactionId(txnId);
177 builder.setType(errorType);
178 builder.setCode(message.getCode());
179 if (message.getData() != null) {
180 builder.setData(new String(message.getData()));
182 outErrorMessage = builder.build();
185 return outErrorMessage;