2 * Copyright (c) 2016 Cisco Systems. 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.renderer.vpp.commands;
11 import com.google.common.base.Preconditions;
12 import com.google.common.base.Strings;
13 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
14 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
15 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;
16 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev140524.StaticRoutes1;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev140524.StaticRoutes1Builder;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev140524.routing.routing.instance.routing.protocols.routing.protocol._static.routes.Ipv4Builder;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev140524.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.Route;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.Static;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocol;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocolBuilder;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocolKey;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.routing.protocol.StaticRoutesBuilder;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev161214.RoutingProtocolVppAttr;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev161214.RoutingProtocolVppAttrBuilder;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev161214.VniReference;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev161214.routing.routing.instance.routing.protocols.routing.protocol.VppProtocolAttributesBuilder;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
34 import java.util.List;
36 public class RoutingCommand extends AbstractConfigCommand {
38 private static final Logger LOG = LoggerFactory.getLogger(RoutingCommand.class);
39 public static String ROUTER_INSTANCE_NAME = "vpp-routing-instance";
40 public static String DEFAULT_ROUTING_PROTOCOL = "learned-protocol-0";
41 private List<Route> routes;
42 private String routerProtocol;
45 private RoutingCommand(RoutingCommandBuilder builder) {
46 operation = builder.getOperation();
47 routerProtocol = builder.getRouterProtocol();
48 vrfId = builder.getVrfId();
49 routes = builder.getRoutes();
52 public static RoutingCommandBuilder builder() {
53 return new RoutingCommandBuilder();
56 List<Route> getRoutes() {
60 String getRouterProtocol() {
61 return routerProtocol;
68 @Override public InstanceIdentifier getIid() {
69 String routerProtocol = this.routerProtocol;
70 if (Strings.isNullOrEmpty(routerProtocol)) {
71 routerProtocol = DEFAULT_ROUTING_PROTOCOL;
73 return VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routerProtocol));
76 void put(ReadWriteTransaction rwTx) {
77 InstanceIdentifier<RoutingProtocol> routingInstanceIid =
78 VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routerProtocol));
79 rwTx.put(LogicalDatastoreType.CONFIGURATION, routingInstanceIid, getRoutingProtocolBuilder().build(), true);
82 void merge(ReadWriteTransaction rwTx) {
83 rwTx.merge(LogicalDatastoreType.CONFIGURATION,
84 VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routerProtocol)),
85 getRoutingProtocolBuilder().build(), true);
88 void delete(ReadWriteTransaction rwTx) {
90 rwTx.delete(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(
92 } catch (IllegalStateException ex) {
93 LOG.debug("Routing protocol not deleted from DS {}", this, ex);
98 public String toString() {
99 return "RoutingCommand [routerProtocol=" + routerProtocol + ", routes=" + routes + ", operations="
103 private RoutingProtocolBuilder getRoutingProtocolBuilder() {
104 return new RoutingProtocolBuilder()
106 .setType(Static.class)
107 .setName(routerProtocol)
108 .addAugmentation(RoutingProtocolVppAttr.class, new RoutingProtocolVppAttrBuilder().setVppProtocolAttributes(
109 new VppProtocolAttributesBuilder().setPrimaryVrf(new VniReference(vrfId)).build()).build())
110 .setStaticRoutes(new StaticRoutesBuilder().addAugmentation(StaticRoutes1.class,
111 new StaticRoutes1Builder().setIpv4(new Ipv4Builder().setRoute(routes).build()).build()).build());
114 public static class RoutingCommandBuilder {
116 private General.Operations operation;
117 private String routerProtocol;
119 private List<Route> routes;
121 public General.Operations getOperation() {
125 public RoutingCommandBuilder setOperation(General.Operations operation) {
126 this.operation = operation;
130 String getRouterProtocol() {
131 return routerProtocol;
134 public RoutingCommandBuilder setRouterProtocol(String routerProtocol) {
135 this.routerProtocol = routerProtocol;
143 public RoutingCommandBuilder setVrfId(Long vrfId) {
148 List<Route> getRoutes() {
152 public RoutingCommandBuilder setRoutes(List<Route> routes) {
153 this.routes = routes;
158 * RoutingCommand build method.
160 * @return RoutingCommand
161 * @throws IllegalArgumentException if routerProtocol, operation or vrfId is null.
163 public RoutingCommand build() {
164 Preconditions.checkArgument(this.operation != null);
165 Preconditions.checkArgument(this.routerProtocol != null);
166 Preconditions.checkArgument(this.vrfId != null);
167 return new RoutingCommand(this);