2 * Copyright (c) 2016 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
9 package org.opendaylight.groupbasedpolicy.neutron.mapper;
11 import java.util.ArrayList;
12 import java.util.List;
13 import java.util.concurrent.ExecutionException;
15 import javax.annotation.Nullable;
17 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInputBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInputBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.NetworkDomainContainmentBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointRegBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointRegBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnreg;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnregBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.l3.prefix.fields.EndpointL3Gateways;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.l3.prefix.fields.EndpointL3GatewaysBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
44 import org.opendaylight.yangtools.yang.common.RpcResult;
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
48 import com.google.common.base.Preconditions;
49 import com.google.common.collect.ImmutableList;
51 public class EndpointRegistrator {
53 private static final Logger LOG = LoggerFactory.getLogger(EndpointRegistrator.class);
54 private final EndpointService epService;
55 private final BaseEndpointService baseEpService;
57 public EndpointRegistrator(EndpointService epService, BaseEndpointService baseEpService) {
58 this.epService = Preconditions.checkNotNull(epService);
59 this.baseEpService = Preconditions.checkNotNull(baseEpService);
62 public boolean registerEndpoint(AddressEndpointReg regEndpointInput) {
63 RegisterEndpointInput regBaseEpInput = new RegisterEndpointInputBuilder().setAddressEndpointReg(
64 ImmutableList.<AddressEndpointReg>of(regEndpointInput))
66 return registerEndpoint(regBaseEpInput);
69 public boolean registerEndpoint(RegisterEndpointInput regBaseEpInput) {
71 RpcResult<Void> rpcResult = baseEpService.registerEndpoint(regBaseEpInput).get();
72 if (!rpcResult.isSuccessful()) {
73 LOG.warn("Illegal state - registerEndpoint was not successful. Input of RPC: {}", regBaseEpInput);
77 } catch (InterruptedException | ExecutionException e) {
78 LOG.error("Base endpoint registration failed. {}", regBaseEpInput, e);
83 public boolean unregisterEndpoint(AddressEndpointUnreg addrEpUnreg) {
84 UnregisterEndpointInput input = new UnregisterEndpointInputBuilder().setAddressEndpointUnreg(
85 ImmutableList.<AddressEndpointUnreg>of(new AddressEndpointUnregBuilder().setKey(addrEpUnreg.getKey())
87 return unregisterEndpoint(input);
90 public boolean unregisterEndpoint(UnregisterEndpointInput input) {
92 RpcResult<Void> rpcResult = baseEpService.unregisterEndpoint(input).get();
93 if (!rpcResult.isSuccessful()) {
94 LOG.warn("Illegal state - unregisterEndpoint was not successful. Input of RPC: {}", input);
98 } catch (InterruptedException | ExecutionException e) {
99 LOG.error("unregisterEndpoint failed. {}", input, e);
105 public boolean registerEndpoint(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput regEndpointInput) {
107 RpcResult<Void> rpcResult = epService.registerEndpoint(regEndpointInput).get();
108 if (!rpcResult.isSuccessful()) {
109 LOG.warn("Illegal state - registerEndpoint was not successful. Input of RPC: {}", regEndpointInput);
113 } catch (InterruptedException | ExecutionException e) {
114 LOG.error("registerEndpoint failed. {}", regEndpointInput, e);
120 public boolean unregisterEndpoint(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput unregEndpointInput) {
122 RpcResult<Void> rpcResult = epService.unregisterEndpoint(unregEndpointInput).get();
123 if (!rpcResult.isSuccessful()) {
124 LOG.warn("Illegal state - unregisterEndpoint was not successful. Input of RPC: {}", unregEndpointInput);
128 } catch (InterruptedException | ExecutionException e) {
129 LOG.error("unregisterEndpoint failed. {}", unregEndpointInput, e);
135 public boolean registerExternalL3PrefixEndpoint(IpPrefix ipPrefix, L3ContextId l3Context,
136 @Nullable IpAddress gatewayIp, TenantId tenantId) {
137 List<EndpointL3Gateways> l3Gateways = new ArrayList<EndpointL3Gateways>();
138 if (gatewayIp != null) {
139 EndpointL3Gateways l3Gateway =
140 new EndpointL3GatewaysBuilder().setIpAddress(gatewayIp).setL3Context(l3Context).build();
141 l3Gateways.add(l3Gateway);
143 RegisterL3PrefixEndpointInput registerL3PrefixEpRpcInput = new RegisterL3PrefixEndpointInputBuilder()
144 .setL3Context(l3Context)
145 .setIpPrefix(ipPrefix)
146 .setEndpointGroup(MappingUtils.EPG_EXTERNAL_ID)
148 .setEndpointL3Gateways(l3Gateways)
149 .setTimestamp(System.currentTimeMillis())
152 RpcResult<Void> rpcResult = epService.registerL3PrefixEndpoint(registerL3PrefixEpRpcInput).get();
153 if (!rpcResult.isSuccessful()) {
154 LOG.warn("Illegal state - registerExternalL3PrefixEndpoint was not successful. Input of RPC: {}",
155 registerL3PrefixEpRpcInput);
159 } catch (InterruptedException | ExecutionException e) {
160 LOG.error("registerExternalL3PrefixEndpoint failed. {}", registerL3PrefixEpRpcInput, e);
166 public boolean registerL3EpAsExternalGateway(TenantId tenantId, IpAddress ipAddress, L3ContextId l3Context,
167 NetworkDomainId networkContainment) {
168 org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput registerEndpointInput =
169 new org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder()
170 .setL3Address(ImmutableList
171 .of(new L3AddressBuilder().setL3Context(l3Context).setIpAddress(ipAddress).build()))
173 .setNetworkContainment(networkContainment)
174 .setEndpointGroups(ImmutableList.of(MappingUtils.EPG_EXTERNAL_ID))
175 .setTimestamp(System.currentTimeMillis())
178 RpcResult<Void> rpcResult = epService.registerEndpoint(registerEndpointInput).get();
179 if (!rpcResult.isSuccessful()) {
180 LOG.warn("Illegal state - registerL3EndpointAsExternalGateway was not successful. Input of RPC: {}",
181 registerEndpointInput);
184 } catch (InterruptedException | ExecutionException e) {
185 LOG.error("registerL3EndpointAsExternalGateway failed. {}", registerEndpointInput, e);