2 * Copyright © 2016, 2017 Ericsson India Global Services Pvt Ltd. 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
9 package org.opendaylight.netvirt.vpnmanager.api.intervpnlink;
11 import static java.util.Collections.emptyList;
13 import java.math.BigInteger;
14 import java.util.List;
15 import java.util.Objects;
16 import java.util.Optional;
17 import org.eclipse.jdt.annotation.Nullable;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.inter.vpn.link.rev160311.inter.vpn.link.states.InterVpnLinkState;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.inter.vpn.link.rev160311.inter.vpn.links.InterVpnLink;
20 import org.opendaylight.yangtools.yang.common.Uint32;
21 import org.opendaylight.yangtools.yang.common.Uint64;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
26 * It holds all info about an InterVpnLink, combining both configurational
29 public class InterVpnLinkDataComposite {
31 private static final Logger LOG = LoggerFactory.getLogger(InterVpnLinkDataComposite.class);
33 private InterVpnLink interVpnLinkCfg;
34 private InterVpnLinkState interVpnLinkState;
36 public InterVpnLinkDataComposite(InterVpnLink interVpnLink) {
37 this.interVpnLinkCfg = interVpnLink;
40 public InterVpnLinkDataComposite(InterVpnLinkState interVpnLinkState) {
41 this.interVpnLinkState = interVpnLinkState;
44 public InterVpnLinkDataComposite(InterVpnLink interVpnLink, InterVpnLinkState interVpnLinkState) {
45 this.interVpnLinkCfg = interVpnLink;
46 this.interVpnLinkState = interVpnLinkState;
49 public InterVpnLink getInterVpnLinkConfig() {
50 return this.interVpnLinkCfg;
53 public void setInterVpnLinkConfig(InterVpnLink interVpnLink) {
54 this.interVpnLinkCfg = interVpnLink;
57 public InterVpnLinkState getInterVpnLinkState() {
58 return this.interVpnLinkState;
61 public void setInterVpnLinkState(InterVpnLinkState interVpnLinkState) {
62 this.interVpnLinkState = interVpnLinkState;
65 public boolean isComplete() {
66 return interVpnLinkCfg != null && interVpnLinkState != null
67 && interVpnLinkState.getFirstEndpointState() != null
68 && interVpnLinkState.getSecondEndpointState() != null;
71 public Optional<InterVpnLinkState.State> getState() {
72 return this.interVpnLinkState == null ? Optional.empty()
73 : Optional.ofNullable(this.interVpnLinkState.getState());
76 public boolean isActive() {
77 return isComplete() && getState().isPresent() && getState().get() == InterVpnLinkState.State.Active;
80 public boolean stepsOnDpn(BigInteger dpnId) {
81 return getFirstEndpointDpns().contains(Uint64.valueOf(dpnId))
82 || getSecondEndpointDpns().contains(Uint64.valueOf(dpnId));
85 public boolean isBgpRoutesLeaking() {
86 return this.interVpnLinkCfg != null && this.interVpnLinkCfg.isBgpRoutesLeaking();
89 public boolean isStaticRoutesLeaking() {
90 return this.interVpnLinkCfg != null && this.interVpnLinkCfg.isStaticRoutesLeaking();
93 public boolean isConnectedRoutesLeaking() {
94 return this.interVpnLinkCfg != null && this.interVpnLinkCfg.isConnectedRoutesLeaking();
97 public boolean isFirstEndpointVpnName(String vpnName) {
98 return interVpnLinkCfg != null
99 && interVpnLinkCfg.getFirstEndpoint().getVpnUuid().getValue().equals(vpnName);
102 public boolean isSecondEndpointVpnName(String vpnName) {
103 return interVpnLinkCfg != null
104 && interVpnLinkCfg.getSecondEndpoint().getVpnUuid().getValue().equals(vpnName);
107 public boolean isVpnLinked(String vpnName) {
108 return isFirstEndpointVpnName(vpnName) || isSecondEndpointVpnName(vpnName);
111 public boolean isFirstEndpointIpAddr(String endpointIp) {
112 return interVpnLinkCfg != null
113 && interVpnLinkCfg.getFirstEndpoint().getIpAddress().getValue().equals(endpointIp);
116 public boolean isSecondEndpointIpAddr(String endpointIp) {
117 return interVpnLinkCfg != null
118 && interVpnLinkCfg.getSecondEndpoint().getIpAddress().getValue().equals(endpointIp);
121 public boolean isIpAddrTheOtherVpnEndpoint(String ipAddr, String vpnUuid) {
122 return (vpnUuid.equals(getFirstEndpointVpnUuid().orElse(null))
123 && ipAddr.equals(getSecondEndpointIpAddr().orElse(null)))
124 || (vpnUuid.equals(getSecondEndpointVpnUuid().orElse(null))
125 && ipAddr.equals(getFirstEndpointIpAddr().orElse(null)));
129 public String getInterVpnLinkName() {
130 return (interVpnLinkCfg != null) ? interVpnLinkCfg.getName() : interVpnLinkState.getInterVpnLinkName();
133 public Optional<String> getFirstEndpointVpnUuid() {
134 if (this.interVpnLinkCfg == null) {
135 return Optional.empty();
137 return Optional.of(this.interVpnLinkCfg.getFirstEndpoint().getVpnUuid().getValue());
140 public Optional<String> getFirstEndpointIpAddr() {
141 if (this.interVpnLinkCfg == null) {
142 return Optional.empty();
144 return Optional.of(this.interVpnLinkCfg.getFirstEndpoint().getIpAddress().getValue());
147 public Optional<Uint32> getFirstEndpointLportTag() {
148 return (!isComplete() || this.interVpnLinkState.getFirstEndpointState().getLportTag() == null)
150 : Optional.of(this.interVpnLinkState.getFirstEndpointState().getLportTag());
153 public List<Uint64> getFirstEndpointDpns() {
154 return (!isComplete() || this.interVpnLinkState.getFirstEndpointState().getDpId() == null)
156 : this.interVpnLinkState.getFirstEndpointState().getDpId();
159 public Optional<String> getSecondEndpointVpnUuid() {
161 return Optional.empty();
163 return Optional.of(this.interVpnLinkCfg.getSecondEndpoint().getVpnUuid().getValue());
166 public Optional<String> getSecondEndpointIpAddr() {
168 return Optional.empty();
170 return Optional.of(this.interVpnLinkCfg.getSecondEndpoint().getIpAddress().getValue());
173 public Optional<Uint32> getSecondEndpointLportTag() {
174 return (!isComplete() || this.interVpnLinkState.getSecondEndpointState().getLportTag() == null)
176 : Optional.of(this.interVpnLinkState.getSecondEndpointState().getLportTag());
179 public List<Uint64> getSecondEndpointDpns() {
180 return (!isComplete() || this.interVpnLinkState.getSecondEndpointState().getDpId() == null)
182 : this.interVpnLinkState.getSecondEndpointState().getDpId();
186 public String getVpnNameByIpAddress(String endpointIpAddr) {
187 if (!isFirstEndpointIpAddr(endpointIpAddr) && !isSecondEndpointIpAddr(endpointIpAddr)) {
188 LOG.debug("Endpoint IpAddress {} does not participate in InterVpnLink {}",
189 endpointIpAddr, getInterVpnLinkName());
192 return isFirstEndpointIpAddr(endpointIpAddr) ? getFirstEndpointVpnUuid().orElse(null)
193 : getSecondEndpointVpnUuid().orElse(null);
197 public String getOtherEndpoint(String vpnUuid) {
198 if (!isFirstEndpointVpnName(vpnUuid) && !isSecondEndpointVpnName(vpnUuid)) {
199 LOG.debug("VPN {} does not participate in InterVpnLink {}", vpnUuid, getInterVpnLinkName());
203 return isFirstEndpointVpnName(vpnUuid) ? getSecondEndpointIpAddr().orElse(null)
204 : getFirstEndpointIpAddr().orElse(null);
208 public String getOtherVpnNameByIpAddress(String endpointIpAddr) {
209 if (!isFirstEndpointIpAddr(endpointIpAddr) && !isSecondEndpointIpAddr(endpointIpAddr)) {
210 LOG.debug("Endpoint IpAddress {} does not participate in InterVpnLink {}",
211 endpointIpAddr, getInterVpnLinkName());
214 return isFirstEndpointIpAddr(endpointIpAddr) ? getSecondEndpointVpnUuid().orElse(null)
215 : getFirstEndpointVpnUuid().orElse(null);
218 public Optional<Uint32> getEndpointLportTagByVpnName(String vpnName) {
220 return Optional.empty();
223 return isFirstEndpointVpnName(vpnName) ? Optional.of(interVpnLinkState.getFirstEndpointState().getLportTag())
224 : Optional.of(interVpnLinkState.getSecondEndpointState().getLportTag());
227 public Optional<Uint32> getEndpointLportTagByIpAddr(String endpointIp) {
229 return Optional.empty();
232 return isFirstEndpointIpAddr(endpointIp)
233 ? Optional.ofNullable(interVpnLinkState.getFirstEndpointState().getLportTag())
234 : Optional.ofNullable(interVpnLinkState.getSecondEndpointState().getLportTag());
237 public Optional<Uint32> getOtherEndpointLportTagByVpnName(String vpnName) {
239 return Optional.empty();
242 return isFirstEndpointVpnName(vpnName) ? Optional.of(interVpnLinkState.getSecondEndpointState().getLportTag())
243 : Optional.of(interVpnLinkState.getFirstEndpointState().getLportTag());
247 public String getOtherVpnName(String vpnName) {
248 if (!isFirstEndpointVpnName(vpnName) && !isSecondEndpointVpnName(vpnName)) {
249 LOG.debug("VPN {} does not participate in InterVpnLink {}", vpnName, getInterVpnLinkName());
253 return isFirstEndpointVpnName(vpnName) ? getSecondEndpointVpnUuid().orElse(null)
254 : getFirstEndpointVpnUuid().orElse(null);
258 public String getOtherEndpointIpAddr(String vpnUuid) {
259 if (!isFirstEndpointVpnName(vpnUuid) && !isSecondEndpointVpnName(vpnUuid)) {
260 LOG.debug("VPN {} does not participate in InterVpnLink {}", vpnUuid, getInterVpnLinkName());
264 return isFirstEndpointVpnName(vpnUuid) ? getSecondEndpointIpAddr().orElse(null)
265 : getFirstEndpointIpAddr().orElse(null);
269 public String getEndpointIpAddr(String vpnUuid) {
270 if (!isFirstEndpointVpnName(vpnUuid) && !isSecondEndpointVpnName(vpnUuid)) {
271 LOG.debug("VPN {} does not participate in InterVpnLink {}", vpnUuid, getInterVpnLinkName());
275 return isFirstEndpointVpnName(vpnUuid) ? getFirstEndpointIpAddr().orElse(null)
276 : getSecondEndpointIpAddr().orElse(null);
279 public List<Uint64> getEndpointDpnsByVpnName(String vpnUuid) {
284 List<Uint64> dpns = isFirstEndpointVpnName(vpnUuid) ? interVpnLinkState.getFirstEndpointState().getDpId()
285 : interVpnLinkState.getSecondEndpointState().getDpId();
286 return dpns == null ? emptyList() : dpns;
289 public List<Uint64> getOtherEndpointDpnsByVpnName(String vpnUuid) {
294 List<Uint64> dpns = isFirstEndpointVpnName(vpnUuid) ? interVpnLinkState.getSecondEndpointState().getDpId()
295 : interVpnLinkState.getFirstEndpointState().getDpId();
296 return dpns == null ? emptyList() : dpns;
299 public List<Uint64> getEndpointDpnsByIpAddr(String endpointIp) {
305 isFirstEndpointIpAddr(endpointIp) ? this.interVpnLinkState.getFirstEndpointState().getDpId()
306 : this.interVpnLinkState.getSecondEndpointState().getDpId();
307 return dpns == null ? emptyList() : dpns;
310 public List<Uint64> getOtherEndpointDpnsByIpAddr(String endpointIp) {
316 isFirstEndpointIpAddr(endpointIp) ? this.interVpnLinkState.getSecondEndpointState().getDpId()
317 : this.interVpnLinkState.getFirstEndpointState().getDpId();
318 return dpns == null ? emptyList() : dpns;
322 public String toString() {
323 final String ns = "Not specified";
324 return "InterVpnLink " + getInterVpnLinkName() + " 1stEndpoint=[vpn=" + getFirstEndpointVpnUuid().orElse(ns)
325 + " ipAddr=" + getFirstEndpointIpAddr().orElse(ns) + " dpn=" + getFirstEndpointDpns() + "] "
326 + "2ndEndpoint=[vpn=" + getSecondEndpointVpnUuid().orElse(ns) + " ipAddr="
327 + getSecondEndpointIpAddr().orElse(ns) + " dpn=" + getSecondEndpointDpns() + "]";
331 public boolean equals(Object obj) {
338 if (getClass() != obj.getClass()) {
341 InterVpnLinkDataComposite other = (InterVpnLinkDataComposite) obj;
343 return getInterVpnLinkName().equals(other.getInterVpnLinkName())
344 && getFirstEndpointVpnUuid().orElse(none).equals(other.getFirstEndpointVpnUuid().orElse(none))
345 && getFirstEndpointIpAddr().orElse(none).equals(other.getFirstEndpointIpAddr().orElse(none));
349 public int hashCode() {
350 return Objects.hash(this.interVpnLinkCfg, this.interVpnLinkState);