Add implementation for flat L3 overlay
[groupbasedpolicy.git] / renderers / vpp / src / main / java / org / opendaylight / groupbasedpolicy / renderer / vpp / commands / AbstractInterfaceCommand.java
index 049363119dd66cfec0c0aca6d2092fff2e7201af..8b921d64612968e64bc0353b4f7f9c82785ce25c 100644 (file)
-/*\r
- * Copyright (c) 2016 Cisco Systems. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-\r
-package org.opendaylight.groupbasedpolicy.renderer.vpp.commands;\r
-\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;\r
-\r
-public abstract class AbstractInterfaceCommand<T extends AbstractInterfaceCommand<T>> implements ConfigCommand {\r
-\r
-    protected General.Operations operation;\r
-    protected String name;\r
-    protected String description;\r
-    protected Boolean enabled;\r
-\r
-    protected enum linkUpDownTrap {\r
-        ENABLED, DISABLED\r
-    }\r
-\r
-    public General.Operations getOperation() {\r
-        return operation;\r
-    }\r
-\r
-    public String getName() {\r
-        return name;\r
-    }\r
-\r
-    public String getDescription() {\r
-        return description;\r
-    }\r
-\r
-    public AbstractInterfaceCommand<T> setDescription(String description) {\r
-        this.description = description;\r
-        return this;\r
-    }\r
-\r
-    public Boolean getEnabled() {\r
-        return enabled;\r
-    }\r
-\r
-    public AbstractInterfaceCommand<T> setEnabled(Boolean enabled) {\r
-        this.enabled = enabled;\r
-        return this;\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2016 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 org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.interfaces.ConfigCommand;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.interfaces.InterfaceCommand;
+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.interfaces.rev140508.interfaces.InterfaceBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.ProxyArpInterfaceAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.ProxyArpInterfaceAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.proxy.arp.rev170315.interfaces._interface.ProxyArpBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractInterfaceCommand implements ConfigCommand, InterfaceCommand {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractInterfaceCommand.class);
+
+    protected General.Operations operation;
+    protected String name;
+    protected String description;
+    protected String bridgeDomain;
+    protected Boolean enabled;
+    protected Boolean enableProxyArp;
+    protected Long vrfId;
+
+    public General.Operations getOperation() {
+        return operation;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Long getVrfId() {
+        return vrfId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public AbstractInterfaceCommand setDescription(String description) {
+        this.description = description;
+        return this;
+    }
+
+    public String getBridgeDomain() {
+        return bridgeDomain;
+    }
+
+    public void execute(ReadWriteTransaction rwTx) {
+        switch (getOperation()) {
+            case PUT:
+                LOG.debug("Executing Add operations for command: {}", this);
+                put(rwTx);
+                break;
+            case DELETE:
+                LOG.debug("Executing Delete operations for command: {}", this);
+                delete(rwTx);
+                break;
+            case MERGE:
+                LOG.debug("Executing Update operations for command: {}", this);
+                merge(rwTx);
+                break;
+            default:
+                LOG.error("Execution failed for command: {}", this);
+                break;
+        }
+    }
+
+    private void put(ReadWriteTransaction rwTx) {
+        InterfaceBuilder interfaceBuilder = getInterfaceBuilder();
+
+        rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(interfaceBuilder.getKey()),
+                interfaceBuilder.build(), true);
+    }
+
+    private void merge(ReadWriteTransaction rwTx) {
+        InterfaceBuilder interfaceBuilder = getInterfaceBuilder();
+
+        rwTx.merge(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(interfaceBuilder.getKey()),
+                interfaceBuilder.build());
+    }
+
+    private void delete(ReadWriteTransaction readWriteTransaction) {
+        try {
+            readWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION,
+                    VppIidFactory.getInterfaceIID(new InterfaceKey(name)));
+        } catch (IllegalStateException ex) {
+            LOG.debug("Interface is not present in DS {}", this, ex);
+        }
+
+    }
+    @Override public InstanceIdentifier getIid() {
+        return VppIidFactory.getInterfaceIID(this.getInterfaceBuilder().getKey());
+    }
+
+    protected void addEnableProxyArpAugmentation(InterfaceBuilder interfaceBuilder) {
+        if (enableProxyArp != null) {
+            ProxyArpInterfaceAugmentationBuilder augmentationBuilder = new ProxyArpInterfaceAugmentationBuilder();
+            augmentationBuilder.setProxyArp((new ProxyArpBuilder()).build());
+            interfaceBuilder.addAugmentation(ProxyArpInterfaceAugmentation.class, augmentationBuilder.build());
+        }
+    }
+
+}