blob: f35b64633b131e134414a3462a4ff1ff2b95ec1e [file] [log] [blame]
samuel8d6b0a92015-07-11 13:22:57 +08001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
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;
41 private final Optional<Boolean> disableInBand;
42
43 /* Adds more configurations */
44
45 private DefaultBridgeDescription(String name,
46 List<ControllerInfo> controllers,
47 boolean enableLocalController,
48 Optional<FailMode> failMode,
49 Optional<String> datapathId,
50 Optional<Boolean> disableInBand) {
51 this.name = checkNotNull(name);
52 this.controllers = controllers;
53 this.enableLocalController = enableLocalController;
54 this.failMode = failMode;
55 this.datapathId = datapathId;
56 this.disableInBand = disableInBand;
samuel8d6b0a92015-07-11 13:22:57 +080057 }
58
59 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070060 public SparseAnnotations annotations() {
61 return null;
62 }
63
64 @Override
65 public String name() {
samuel8d6b0a92015-07-11 13:22:57 +080066 return name;
67 }
68
69 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070070 public List<ControllerInfo> controllers() {
71 return controllers;
samuel8d6b0a92015-07-11 13:22:57 +080072 }
73
74 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070075 public boolean enableLocalController() {
76 return enableLocalController;
samuel8d6b0a92015-07-11 13:22:57 +080077 }
78
79 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070080 public Optional<FailMode> failMode() {
81 return failMode;
samuel8d6b0a92015-07-11 13:22:57 +080082 }
83
84 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070085 public Optional<String> datapathId() {
86 return datapathId;
87 }
88
89 @Override
90 public Optional<DeviceId> deviceId() {
91 if (datapathId.isPresent()) {
92 return Optional.of(DeviceId.deviceId("of:" + datapathId.get()));
93 } else {
94 return Optional.empty();
samuel8d6b0a92015-07-11 13:22:57 +080095 }
samuel8d6b0a92015-07-11 13:22:57 +080096 }
97
98 @Override
Hyunsun Moon1251e192016-06-07 16:57:05 -070099 public Optional<Boolean> disableInBand() {
100 return disableInBand;
samuel8d6b0a92015-07-11 13:22:57 +0800101 }
102
Hyunsun Moon1251e192016-06-07 16:57:05 -0700103 /**
104 * Creates and returns a new builder instance.
105 *
106 * @return new builder
107 */
108 public static BridgeDescription.Builder builder() {
109 return new Builder();
110 }
111
112 public static final class Builder implements BridgeDescription.Builder {
113
114 private String name;
115 private List<ControllerInfo> controllers = Lists.newArrayList();
116 private boolean enableLocalController = false;
117 private Optional<FailMode> failMode = Optional.empty();
118 private Optional<String> datapathId = Optional.empty();
119 private Optional<Boolean> disableInBand = Optional.empty();
120
121 private Builder() {
122 }
123
124 @Override
125 public BridgeDescription build() {
126 return new DefaultBridgeDescription(name, controllers,
127 enableLocalController,
128 failMode,
129 datapathId,
130 disableInBand);
131 }
132
133 @Override
134 public Builder name(String name) {
135 checkArgument(!Strings.isNullOrEmpty(name));
136 this.name = name;
137 return this;
138 }
139
140 @Override
141 public Builder controllers(List<ControllerInfo> controllers) {
142 if (controllers != null) {
143 this.controllers = Lists.newArrayList(controllers);
144 }
145 return this;
146 }
147
148 @Override
149 public Builder enableLocalController() {
150 this.enableLocalController = true;
151 return this;
152 }
153
154 @Override
155 public Builder failMode(FailMode failMode) {
156 this.failMode = Optional.ofNullable(failMode);
157 return this;
158 }
159
160 @Override
161 public Builder datapathId(String datapathId) {
162 this.datapathId = Optional.ofNullable(datapathId);
163 return this;
164 }
165
166 @Override
167 public Builder disableInBand() {
168 this.disableInBand = Optional.of(Boolean.TRUE);
169 return this;
170 }
171 }
samuel8d6b0a92015-07-11 13:22:57 +0800172}