blob: 3ac1230957ffb15052c37aa6b5a107972d17df83 [file] [log] [blame]
Jian Li9ee9c8b2019-01-24 11:48:12 +09001/*
2 * Copyright 2019-present Open Networking Foundation
3 *
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.k8snetworking.api;
17
18import com.google.common.base.MoreObjects;
19import com.google.common.base.Objects;
20import org.onlab.packet.IpAddress;
21
22import static com.google.common.base.Preconditions.checkArgument;
23
24/**
25 * Default implementation of kubernetes network.
26 */
27public final class DefaultK8sNetwork implements K8sNetwork {
28
29 private static final int DEFAULT_MTU = 1500;
30
31 private final String networkId;
32 private final Type type;
33 private final Integer mtu;
34 private final String segmentId;
35 private final IpAddress gatewayIp;
36 private final String cidr;
37
38 private static final String NOT_NULL_MSG = "Network % cannot be null";
39
40 // private constructor not intended for external invocation
41 private DefaultK8sNetwork(String networkId, Type type, Integer mtu,
42 String segmentId, IpAddress gatewayIp, String cidr) {
43 this.networkId = networkId;
44 this.type = type;
45 this.mtu = mtu;
46 this.segmentId = segmentId;
47 this.gatewayIp = gatewayIp;
48 this.cidr = cidr;
49 }
50
51 @Override
52 public String networkId() {
53 return networkId;
54 }
55
56 @Override
57 public Type type() {
58 return type;
59 }
60
61 @Override
62 public Integer mtu() {
63 return mtu;
64 }
65
66 @Override
67 public String segmentId() {
68 return segmentId;
69 }
70
71 @Override
72 public IpAddress gatewayIp() {
73 return gatewayIp;
74 }
75
76 @Override
77 public String cidr() {
78 return cidr;
79 }
80
81 @Override
82 public boolean equals(Object o) {
83 if (this == o) {
84 return true;
85 }
86 if (o == null || getClass() != o.getClass()) {
87 return false;
88 }
89 DefaultK8sNetwork that = (DefaultK8sNetwork) o;
90 return Objects.equal(networkId, that.networkId) &&
91 type == that.type &&
92 Objects.equal(mtu, that.mtu) &&
93 Objects.equal(segmentId, that.segmentId) &&
94 Objects.equal(gatewayIp, that.gatewayIp) &&
95 Objects.equal(cidr, that.cidr);
96 }
97
98 @Override
99 public int hashCode() {
100 return Objects.hashCode(networkId, type, mtu, segmentId, gatewayIp, cidr);
101 }
102
103 @Override
104 public String toString() {
105 return MoreObjects.toStringHelper(this)
106 .add("networkId", networkId)
107 .add("type", type)
108 .add("mtu", mtu)
109 .add("segmentId", segmentId)
110 .add("gatewayIp", gatewayIp)
111 .add("cidr", cidr)
112 .toString();
113 }
114
115 /**
116 * Returns new builder instance.
117 *
118 * @return kubernetes network builder
119 */
120 public static Builder builder() {
121 return new Builder();
122 }
123
124 /**
125 * Default implementation of kubernetes network builder.
126 */
127 public static final class Builder implements K8sNetwork.Builder {
128
129 private String networkId;
130 private Type type;
131 private Integer mtu;
132 private String segmentId;
133 private IpAddress gatewayIp;
134 private String cidr;
135
136 @Override
137 public K8sNetwork build() {
138 checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
139 checkArgument(type != null, NOT_NULL_MSG, "type");
140 checkArgument(segmentId != null, NOT_NULL_MSG, "segmentId");
141 checkArgument(gatewayIp != null, NOT_NULL_MSG, "gatewayIp");
142 checkArgument(cidr != null, NOT_NULL_MSG, "cidr");
143
144 if (mtu == null) {
145 mtu = DEFAULT_MTU;
146 }
147
148 return new DefaultK8sNetwork(networkId, type, mtu, segmentId, gatewayIp, cidr);
149 }
150
151 @Override
152 public Builder networkId(String networkId) {
153 this.networkId = networkId;
154 return this;
155 }
156
157 @Override
158 public Builder type(Type type) {
159 this.type = type;
160 return this;
161 }
162
163 @Override
164 public Builder mtu(Integer mtu) {
165 this.mtu = mtu;
166 return this;
167 }
168
169 @Override
170 public Builder segmentId(String segmentId) {
171 this.segmentId = segmentId;
172 return this;
173 }
174
175 @Override
176 public Builder gatewayIp(IpAddress ipAddress) {
177 this.gatewayIp = ipAddress;
178 return this;
179 }
180
181 @Override
182 public Builder cidr(String cidr) {
183 this.cidr = cidr;
184 return this;
185 }
186 }
187}