blob: cc0b83773501d192d268cfd6c82d1bac02baa1aa [file] [log] [blame]
samuel8d6b0a92015-07-11 13:22:57 +08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2015-present Open Networking Foundation
samuel8d6b0a92015-07-11 13:22:57 +08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.net.behaviour;
17
Hyunsun Moon1251e192016-06-07 16:57:05 -070018import com.google.common.base.Strings;
19import com.google.common.collect.Lists;
samuel8d6b0a92015-07-11 13:22:57 +080020import org.onosproject.net.DeviceId;
21import org.onosproject.net.SparseAnnotations;
22
Hyunsun Moon1251e192016-06-07 16:57:05 -070023import java.util.List;
24import java.util.Optional;
25
26import static com.google.common.base.Preconditions.checkArgument;
27import static com.google.common.base.Preconditions.checkNotNull;
samuel8d6b0a92015-07-11 13:22:57 +080028
29/**
30 * The default implementation of bridge.
31 */
Hyunsun Moon1251e192016-06-07 16:57:05 -070032public final class DefaultBridgeDescription implements BridgeDescription {
samuel8d6b0a92015-07-11 13:22:57 +080033
Hyunsun Moon1251e192016-06-07 16:57:05 -070034 private final String name;
samuel8d6b0a92015-07-11 13:22:57 +080035
Hyunsun Moon1251e192016-06-07 16:57:05 -070036 /* Optional OpenFlow configurations */
37 private final List<ControllerInfo> controllers;
38 private final boolean enableLocalController;
39 private final Optional<FailMode> failMode;
40 private final Optional<String> datapathId;
jaegonkim80bee532017-05-15 15:16:38 +090041 private final Optional<String> datapathType;
rohitsharana127ba82018-01-16 02:17:30 +053042 private final Optional<List<ControlProtocolVersion>> controlProtocols;
Hyunsun Moon1251e192016-06-07 16:57:05 -070043 private final Optional<Boolean> disableInBand;
44
45 /* Adds more configurations */
46
47 private DefaultBridgeDescription(String name,
48 List<ControllerInfo> controllers,
49 boolean enableLocalController,
50 Optional<FailMode> failMode,
51 Optional<String> datapathId,
jaegonkim80bee532017-05-15 15:16:38 +090052 Optional<String> datapathType,
rohitsharana127ba82018-01-16 02:17:30 +053053 Optional<Boolean> disableInBand,
54 Optional<List<ControlProtocolVersion>> controlProtocols) {
Hyunsun Moon1251e192016-06-07 16:57:05 -070055 this.name = checkNotNull(name);
56 this.controllers = controllers;
57 this.enableLocalController = enableLocalController;
58 this.failMode = failMode;
59 this.datapathId = datapathId;
jaegonkim80bee532017-05-15 15:16:38 +090060 this.datapathType = datapathType;
Hyunsun Moon1251e192016-06-07 16:57:05 -070061 this.disableInBand = disableInBand;
rohitsharana127ba82018-01-16 02:17:30 +053062 this.controlProtocols = controlProtocols;
samuel8d6b0a92015-07-11 13:22:57 +080063 }
64
65 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070066 public SparseAnnotations annotations() {
67 return null;
68 }
69
70 @Override
71 public String name() {
samuel8d6b0a92015-07-11 13:22:57 +080072 return name;
73 }
74
75 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070076 public List<ControllerInfo> controllers() {
77 return controllers;
samuel8d6b0a92015-07-11 13:22:57 +080078 }
79
80 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070081 public boolean enableLocalController() {
82 return enableLocalController;
samuel8d6b0a92015-07-11 13:22:57 +080083 }
84
85 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070086 public Optional<FailMode> failMode() {
87 return failMode;
samuel8d6b0a92015-07-11 13:22:57 +080088 }
89
90 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070091 public Optional<String> datapathId() {
92 return datapathId;
93 }
94
95 @Override
jaegonkim80bee532017-05-15 15:16:38 +090096 public Optional<String> datapathType() {
97 return datapathType;
98 }
99
100 @Override
rohitsharana127ba82018-01-16 02:17:30 +0530101 public Optional<List<ControlProtocolVersion>> controlProtocols() {
102 return controlProtocols;
103 }
104
105 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -0700106 public Optional<DeviceId> deviceId() {
107 if (datapathId.isPresent()) {
108 return Optional.of(DeviceId.deviceId("of:" + datapathId.get()));
109 } else {
110 return Optional.empty();
samuel8d6b0a92015-07-11 13:22:57 +0800111 }
samuel8d6b0a92015-07-11 13:22:57 +0800112 }
113
114 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -0700115 public Optional<Boolean> disableInBand() {
116 return disableInBand;
samuel8d6b0a92015-07-11 13:22:57 +0800117 }
118
Hyunsun Moon1251e192016-06-07 16:57:05 -0700119 /**
120 * Creates and returns a new builder instance.
121 *
122 * @return new builder
123 */
124 public static BridgeDescription.Builder builder() {
125 return new Builder();
126 }
127
128 public static final class Builder implements BridgeDescription.Builder {
129
130 private String name;
131 private List<ControllerInfo> controllers = Lists.newArrayList();
132 private boolean enableLocalController = false;
133 private Optional<FailMode> failMode = Optional.empty();
134 private Optional<String> datapathId = Optional.empty();
jaegonkim80bee532017-05-15 15:16:38 +0900135 private Optional<String> datapathType = Optional.empty();
rohitsharana127ba82018-01-16 02:17:30 +0530136 private Optional<List<ControlProtocolVersion>> controlProtocols = Optional.empty();
Hyunsun Moon1251e192016-06-07 16:57:05 -0700137 private Optional<Boolean> disableInBand = Optional.empty();
138
139 private Builder() {
140 }
141
142 @Override
143 public BridgeDescription build() {
144 return new DefaultBridgeDescription(name, controllers,
145 enableLocalController,
146 failMode,
147 datapathId,
jaegonkim80bee532017-05-15 15:16:38 +0900148 datapathType,
rohitsharana127ba82018-01-16 02:17:30 +0530149 disableInBand,
150 controlProtocols);
Hyunsun Moon1251e192016-06-07 16:57:05 -0700151 }
152
153 @Override
154 public Builder name(String name) {
155 checkArgument(!Strings.isNullOrEmpty(name));
156 this.name = name;
157 return this;
158 }
159
160 @Override
161 public Builder controllers(List<ControllerInfo> controllers) {
162 if (controllers != null) {
163 this.controllers = Lists.newArrayList(controllers);
164 }
165 return this;
166 }
167
168 @Override
169 public Builder enableLocalController() {
170 this.enableLocalController = true;
171 return this;
172 }
173
174 @Override
175 public Builder failMode(FailMode failMode) {
176 this.failMode = Optional.ofNullable(failMode);
177 return this;
178 }
179
180 @Override
181 public Builder datapathId(String datapathId) {
182 this.datapathId = Optional.ofNullable(datapathId);
183 return this;
184 }
185
186 @Override
jaegonkim80bee532017-05-15 15:16:38 +0900187 public Builder datapathType(String datapathType) {
188 this.datapathType = Optional.ofNullable(datapathType);
189 return this;
190 }
191
192 @Override
rohitsharana127ba82018-01-16 02:17:30 +0530193 public Builder controlProtocols(List<ControlProtocolVersion> controlProtocols) {
194 this.controlProtocols = Optional.ofNullable(controlProtocols);
195 return this;
196 }
197
198 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -0700199 public Builder disableInBand() {
200 this.disableInBand = Optional.of(Boolean.TRUE);
201 return this;
202 }
203 }
samuel8d6b0a92015-07-11 13:22:57 +0800204}