Add implementation for flat L3 overlay
[groupbasedpolicy.git] / renderers / vpp / src / main / java / org / opendaylight / groupbasedpolicy / renderer / vpp / commands / ProxyRangeCommand.java
diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/ProxyRangeCommand.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/ProxyRangeCommand.java
new file mode 100644 (file)
index 0000000..1a65afe
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2017 Cisco Systems. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.groupbasedpolicy.renderer.vpp.commands;
+
+import com.google.common.base.Preconditions;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRange;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRangeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.proxy.ranges.ProxyRangeKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Created by Shakib Ahmed on 5/3/17.
+ */
+public class ProxyRangeCommand extends AbstractConfigCommand {
+    private static final Logger LOG = LoggerFactory.getLogger(ProxyRangeCommand.class);
+
+    private Long vrf;
+    private Ipv4Address startAddress;
+    private Ipv4Address endAddress;
+
+    public ProxyRangeCommand(ProxyRangeCommandBuilder builder) {
+        this.operation = builder.getOperation();
+        this.vrf = builder.getVrf();
+        this.startAddress = builder.getStartAddress();
+        this.endAddress = builder.getEndAddress();
+    }
+
+    public static ProxyRangeCommandBuilder builder() {
+        return new ProxyRangeCommandBuilder();
+    }
+
+    @Override
+    public InstanceIdentifier getIid() {
+        return VppIidFactory.getProxyRangeIid(vrf, startAddress, endAddress);
+    }
+
+    @Override
+    void put(ReadWriteTransaction rwTx) {
+        InstanceIdentifier<ProxyRange> proxyRangeInstanceIid = VppIidFactory.getProxyRangeIid(vrf, startAddress, endAddress);
+        rwTx.put(LogicalDatastoreType.CONFIGURATION, proxyRangeInstanceIid, getProxyRangeBuilder().build(), true);
+    }
+
+    @Override
+    void merge(ReadWriteTransaction rwTx) {
+        InstanceIdentifier<ProxyRange> proxyRangeInstanceIdentifier = VppIidFactory.
+                                                                        getProxyRangeIid(vrf, startAddress, endAddress);
+        rwTx.merge(LogicalDatastoreType.CONFIGURATION, proxyRangeInstanceIdentifier, getProxyRangeBuilder().build(), true);
+    }
+
+    @Override
+    void delete(ReadWriteTransaction rwTx) {
+        try {
+            InstanceIdentifier<ProxyRange> proxyRangeInstanceIdentifier = VppIidFactory.
+                    getProxyRangeIid(vrf, startAddress, endAddress);
+            rwTx.delete(LogicalDatastoreType.CONFIGURATION, proxyRangeInstanceIdentifier);
+        } catch (IllegalStateException ex) {
+            LOG.debug("Proxy Range not deleted from DS {}", this, ex);
+        }
+    }
+
+    private ProxyRangeBuilder getProxyRangeBuilder() {
+        return new ProxyRangeBuilder()
+                .setKey(new ProxyRangeKey(this.endAddress, this.startAddress, this.vrf))
+                .setVrfId(this.vrf)
+                .setLowAddr(this.startAddress)
+                .setHighAddr(this.endAddress);
+    }
+
+
+    public static class ProxyRangeCommandBuilder {
+
+        private General.Operations operation;
+        private Long vrf;
+        private Ipv4Address startAddress;
+        private Ipv4Address endAddress;
+
+        public Long getVrf() {
+            return vrf;
+        }
+
+        public void setVrf(Long vrf) {
+            this.vrf = vrf;
+        }
+
+        public Ipv4Address getStartAddress() {
+            return startAddress;
+        }
+
+        public void setStartAddress(Ipv4Address startAddress) {
+            this.startAddress = startAddress;
+        }
+
+        public Ipv4Address getEndAddress() {
+            return endAddress;
+        }
+
+        public void setEndAddress(Ipv4Address endAddress) {
+            this.endAddress = endAddress;
+        }
+
+        public General.Operations getOperation() {
+            return operation;
+        }
+
+        public void setOperation(General.Operations operation) {
+            this.operation = operation;
+        }
+
+        /**
+         * ProxyRangeCommand build method.
+         *
+         * @return ProxyRangeCommand
+         * @throws IllegalArgumentException if vrf, operation, startAddress or endAddress is null.
+         */
+        public ProxyRangeCommand build() {
+            Preconditions.checkNotNull(operation, "Operation must not be null!");
+            Preconditions.checkNotNull(vrf, "vrf must not be null!");
+            Preconditions.checkNotNull(startAddress, "StartAddress must not be null!");
+            Preconditions.checkNotNull(endAddress, "EndAddress must not be null!");
+            return new ProxyRangeCommand(this);
+        }
+    }
+}