-/*\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.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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractInterfaceCommand<T extends AbstractInterfaceCommand<T>> implements ConfigCommand {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractInterfaceCommand.class);
+
+ protected General.Operations operation;
+ protected String name;
+ protected String description;
+ protected Boolean enabled;
+
+ protected enum linkUpDownTrap {
+ ENABLED, DISABLED
+ }
+
+ public General.Operations getOperation() {
+ return operation;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public AbstractInterfaceCommand<T> setDescription(String description) {
+ this.description = description;
+ return this;
+ }
+
+ public Boolean getEnabled() {
+ return enabled;
+ }
+
+ public AbstractInterfaceCommand<T> setEnabled(Boolean enabled) {
+ this.enabled = enabled;
+ return this;
+ }
+
+ 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);
+ }
+
+ }
+}
-/*\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.controller.md.sal.binding.api.ReadWriteTransaction;\r
-\r
-public interface ConfigCommand {\r
-\r
- /**\r
- * Execute command using a given data modification transaction\r
- *\r
- * @param readWriteTransaction Transaction for command execution\r
- */\r
- void execute(ReadWriteTransaction readWriteTransaction);\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.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
+
+public interface ConfigCommand {
+
+ /**
+ * Execute command using a given data modification transaction.
+ *
+ * @param readWriteTransaction Transaction for command execution
+ */
+ void execute(ReadWriteTransaction readWriteTransaction);
+
+ /**
+ * Creates Interface Builder with proper augmentations.
+ *
+ * @return InterfaceBuilder for this command with proper augmentations
+ */
+ InterfaceBuilder getInterfaceBuilder();
+}
--- /dev/null
+/*
+ * 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 com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General.Operations;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+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.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.Tap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.TapBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.base.attributes.interconnection.BridgeBasedBuilder;
+
+public class TapPortCommand extends AbstractInterfaceCommand<TapPortCommand> {
+
+ private String tapName;
+ private PhysAddress physAddress;
+ private String bridgeDomain;
+ private Long deviceInstance;
+
+ private TapPortCommand(TapPortCommandBuilder builder) {
+ this.name = builder.getInterfaceName();
+ this.tapName = builder.getTapName();
+ this.operation = builder.getOperation();
+ this.physAddress = builder.getPhysAddress();
+ this.enabled = builder.isEnabled();
+ this.description = builder.getDescription();
+ this.bridgeDomain = builder.getBridgeDomain();
+ this.deviceInstance = builder.getDeviceInstance();
+ }
+
+ public static TapPortCommandBuilder builder() {
+ return new TapPortCommandBuilder();
+ }
+
+ public PhysAddress getPhysAddress() {
+ return physAddress;
+ }
+
+ public String getBridgeDomain() {
+ return bridgeDomain;
+ }
+
+ public Long getDeviceInstance() {
+ return deviceInstance;
+ }
+
+ public String getTapName() {
+ return tapName;
+ }
+
+ @Override
+ public InterfaceBuilder getInterfaceBuilder() {
+ InterfaceBuilder interfaceBuilder = new InterfaceBuilder().setKey(new InterfaceKey(name))
+ .setEnabled(enabled)
+ .setDescription(description)
+ .setType(Tap.class)
+ .setName(name)
+ .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled);
+
+ // Create the Tap augmentation
+ VppInterfaceAugmentationBuilder vppAugmentationBuilder =
+ new VppInterfaceAugmentationBuilder().setTap(new TapBuilder().setMac(this.physAddress)
+ .setTapName(this.tapName)
+ .setMac(this.physAddress)
+ .setDeviceInstance(this.deviceInstance)
+ .build());
+
+ if (!Strings.isNullOrEmpty(bridgeDomain)) {
+ vppAugmentationBuilder.setL2(new L2Builder()
+ .setInterconnection(new BridgeBasedBuilder().setBridgeDomain(bridgeDomain).build()).build());
+ }
+
+ interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build());
+ return interfaceBuilder;
+ }
+
+ @Override
+ public String toString() {
+ return "TapPortUserCommand [physAddress=" + physAddress + ", bridgeDomain=" + bridgeDomain + ", operations="
+ + operation + ", name=" + name + ", tapName=" + tapName + ", description=" + description + ", enabled="
+ + enabled + "]";
+ }
+
+ public static class TapPortCommandBuilder {
+
+ private String interfaceName;
+ private String tapName;
+ private Operations operation;
+ private PhysAddress physAddress;
+ private String bridgeDomain;
+ private String description;
+ private Long deviceInstance = null;
+ private boolean enabled = true;
+
+ public String getInterfaceName() {
+ return interfaceName;
+ }
+
+ public TapPortCommandBuilder setInterfaceName(String interfaceName) {
+ this.interfaceName = interfaceName;
+ return this;
+ }
+
+ public String getTapName() {
+ return tapName;
+ }
+
+ public TapPortCommandBuilder setTapName(String tapName) {
+ this.tapName = tapName;
+ return this;
+ }
+
+ public General.Operations getOperation() {
+ return operation;
+ }
+
+ public TapPortCommandBuilder setOperation(Operations operation) {
+ this.operation = operation;
+ return this;
+ }
+
+ public PhysAddress getPhysAddress() {
+ return physAddress;
+ }
+
+ public TapPortCommandBuilder setPhysAddress(PhysAddress physAddress) {
+ this.physAddress = physAddress;
+ return this;
+ }
+
+ public String getBridgeDomain() {
+ return bridgeDomain;
+ }
+
+ public TapPortCommandBuilder setBridgeDomain(String bridgeDomain) {
+ this.bridgeDomain = bridgeDomain;
+ return this;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public TapPortCommandBuilder setDescription(String description) {
+ this.description = description;
+ return this;
+ }
+
+ public Long getDeviceInstance() {
+ return deviceInstance;
+ }
+
+ public TapPortCommandBuilder setDeviceInstance(Long deviceInstance) {
+ this.deviceInstance = deviceInstance;
+ return this;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public TapPortCommandBuilder setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ return this;
+ }
+
+ /**
+ * TapPortCommand build method.
+ *
+ * @return TapPortCommand
+ * @throws IllegalArgumentException if interfaceName, tapName or operation is null.
+ */
+ public TapPortCommand build() {
+ Preconditions.checkArgument(this.interfaceName != null);
+ Preconditions.checkArgument(this.tapName != null);
+ Preconditions.checkArgument(this.operation != null);
+
+ return new TapPortCommand(this);
+ }
+ }
+}
-/*\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.controller.md.sal.binding.api.ReadWriteTransaction;\r
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General.Operations;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VhostUserRole;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VhostUserBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.base.attributes.interconnection.BridgeBasedBuilder;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import com.google.common.base.Preconditions;\r
-import com.google.common.base.Strings;\r
-\r
-public class VhostUserCommand extends AbstractInterfaceCommand<VhostUserCommand> {\r
-\r
- private static final Logger LOG = LoggerFactory.getLogger(VhostUserCommand.class);\r
- private String socket;\r
- private VhostUserRole role;\r
- private String bridgeDomain;\r
-\r
- private VhostUserCommand(VhostUserCommandBuilder builder) {\r
- this.name = builder.getName();\r
- this.operation = builder.getOperation();\r
- this.socket = builder.getSocket();\r
- this.role = builder.getRole();\r
- this.enabled = builder.isEnabled();\r
- this.description = builder.getDescription();\r
- this.bridgeDomain = builder.getBridgeDomain();\r
-\r
- }\r
-\r
- public static VhostUserCommandBuilder builder() {\r
- return new VhostUserCommandBuilder();\r
- }\r
-\r
- public String getSocket() {\r
- return socket;\r
- }\r
-\r
- public VhostUserRole getRole() {\r
- return role;\r
- }\r
-\r
- public String getBridgeDomain() {\r
- return bridgeDomain;\r
- }\r
-\r
- @Override\r
- public void execute(ReadWriteTransaction readWriteTransaction) {\r
- switch (getOperation()) {\r
-\r
- case PUT:\r
- LOG.debug("Executing Add operation for command: {}", this);\r
- put(readWriteTransaction);\r
- break;\r
- case DELETE:\r
- LOG.debug("Executing Delete operation for command: {}", this);\r
- delete(readWriteTransaction);\r
- break;\r
- case MERGE:\r
- LOG.debug("Executing Update operation for command: {}", this);\r
- merge(readWriteTransaction);\r
- break;\r
- default:\r
- LOG.error("Execution failed for command: {}", this);\r
- break;\r
- }\r
- }\r
-\r
- private void put(ReadWriteTransaction readWriteTransaction) {\r
- InterfaceBuilder interfaceBuilder = getVhostUserInterfaceBuilder();\r
-\r
- readWriteTransaction.put(LogicalDatastoreType.CONFIGURATION,\r
- VppIidFactory.getInterfaceIID(interfaceBuilder.getKey()), interfaceBuilder.build(), true);\r
- }\r
-\r
- private void merge(ReadWriteTransaction readWriteTransaction) {\r
- InterfaceBuilder interfaceBuilder = getVhostUserInterfaceBuilder();\r
-\r
- readWriteTransaction.merge(LogicalDatastoreType.CONFIGURATION,\r
- VppIidFactory.getInterfaceIID(interfaceBuilder.getKey()), interfaceBuilder.build());\r
- }\r
-\r
- private InterfaceBuilder getVhostUserInterfaceBuilder() {\r
- InterfaceBuilder interfaceBuilder =\r
- new InterfaceBuilder().setKey(new InterfaceKey(name))\r
- .setEnabled(enabled)\r
- .setDescription(description)\r
- .setType(\r
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VhostUser.class)\r
- .setName(name)\r
- .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled);\r
-\r
- // Create the vhost augmentation\r
- VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder()\r
- .setVhostUser(new VhostUserBuilder().setRole(role).setSocket(socket).build());\r
- if (!Strings.isNullOrEmpty(bridgeDomain)) {\r
- vppAugmentationBuilder.setL2(new L2Builder()\r
- .setInterconnection(new BridgeBasedBuilder().setBridgeDomain(bridgeDomain).build()).build());\r
- }\r
-\r
- interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build());\r
- return interfaceBuilder;\r
- }\r
-\r
- private void delete(ReadWriteTransaction readWriteTransaction) {\r
- try {\r
- readWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION,\r
- VppIidFactory.getInterfaceIID(new InterfaceKey(name)));\r
- } catch (IllegalStateException ex) {\r
- LOG.debug("Vhost Interface is not present in DS", ex);\r
- }\r
-\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- return "VhostUserCommand [socket=" + socket + ", role=" + role + ", bridgeDomain=" + bridgeDomain\r
- + ", operation=" + operation + ", name=" + name + ", description=" + description + ", enabled="\r
- + enabled + "]";\r
- }\r
-\r
-\r
-\r
- public static class VhostUserCommandBuilder {\r
-\r
- private String name;\r
- private General.Operations operation;\r
- private String socket;\r
- private VhostUserRole role = VhostUserRole.Server;\r
- private boolean enabled = true;\r
- private String description;\r
- private String bridgeDomain;\r
-\r
- public String getName() {\r
- return name;\r
- }\r
-\r
- public VhostUserCommandBuilder setName(String name) {\r
- this.name = name;\r
- return this;\r
- }\r
-\r
- public General.Operations getOperation() {\r
- return operation;\r
- }\r
-\r
- public VhostUserCommandBuilder setOperation(General.Operations operation) {\r
- this.operation = operation;\r
- return this;\r
- }\r
-\r
- public String getSocket() {\r
- return socket;\r
- }\r
-\r
- public VhostUserCommandBuilder setSocket(String socket) {\r
- this.socket = socket;\r
- return this;\r
- }\r
-\r
- public VhostUserRole getRole() {\r
- return role;\r
- }\r
-\r
- public VhostUserCommandBuilder setRole(VhostUserRole role) {\r
- this.role = role;\r
- return this;\r
- }\r
-\r
- public boolean isEnabled() {\r
- return enabled;\r
- }\r
-\r
- public VhostUserCommandBuilder setEnabled(boolean enabled) {\r
- this.enabled = enabled;\r
- return this;\r
- }\r
-\r
- public String getDescription() {\r
- return description;\r
- }\r
-\r
- public VhostUserCommandBuilder setDescription(String description) {\r
- this.description = description;\r
- return this;\r
- }\r
-\r
- public String getBridgeDomain() {\r
- return bridgeDomain;\r
- }\r
-\r
- public VhostUserCommandBuilder setBridgeDomain(String bridgeDomain) {\r
- this.bridgeDomain = bridgeDomain;\r
- return this;\r
- }\r
-\r
- /**\r
- * VhostUserCommand build method.\r
- *\r
- * @return VhostUserCommand\r
- * @throws IllegalArgumentException if name, operation or socket is null.\r
- */\r
- public VhostUserCommand build() {\r
- Preconditions.checkArgument(this.name != null);\r
- Preconditions.checkArgument(this.operation != null);\r
- if (operation == Operations.PUT) {\r
- Preconditions.checkArgument(this.socket != null);\r
- }\r
-\r
- return new VhostUserCommand(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.groupbasedpolicy.renderer.vpp.util.General;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General.Operations;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+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.v3po.rev150105.VhostUserRole;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VhostUserBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.base.attributes.interconnection.BridgeBasedBuilder;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+
+public class VhostUserCommand extends AbstractInterfaceCommand<VhostUserCommand> {
+
+ private String socket;
+ private VhostUserRole role;
+ private String bridgeDomain;
+
+ private VhostUserCommand(VhostUserCommandBuilder builder) {
+ this.name = builder.getName();
+ this.operation = builder.getOperation();
+ this.socket = builder.getSocket();
+ this.role = builder.getRole();
+ this.enabled = builder.isEnabled();
+ this.description = builder.getDescription();
+ this.bridgeDomain = builder.getBridgeDomain();
+
+ }
+
+ public static VhostUserCommandBuilder builder() {
+ return new VhostUserCommandBuilder();
+ }
+
+ public String getSocket() {
+ return socket;
+ }
+
+ public VhostUserRole getRole() {
+ return role;
+ }
+
+ public String getBridgeDomain() {
+ return bridgeDomain;
+ }
+
+ @Override
+ public InterfaceBuilder getInterfaceBuilder() {
+ InterfaceBuilder interfaceBuilder =
+ new InterfaceBuilder().setKey(new InterfaceKey(name))
+ .setEnabled(enabled)
+ .setDescription(description)
+ .setType(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VhostUser.class)
+ .setName(name)
+ .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled);
+
+ // Create the vhost augmentation
+ VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder()
+ .setVhostUser(new VhostUserBuilder().setRole(role).setSocket(socket).build());
+ if (!Strings.isNullOrEmpty(bridgeDomain)) {
+ vppAugmentationBuilder.setL2(new L2Builder()
+ .setInterconnection(new BridgeBasedBuilder().setBridgeDomain(bridgeDomain).build()).build());
+ }
+
+ interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build());
+ return interfaceBuilder;
+ }
+
+ @Override
+ public String toString() {
+ return "VhostUserCommand [socket=" + socket + ", role=" + role + ", bridgeDomain=" + bridgeDomain
+ + ", operation=" + operation + ", name=" + name + ", description=" + description + ", enabled="
+ + enabled + "]";
+ }
+
+ public static class VhostUserCommandBuilder {
+
+ private String name;
+ private General.Operations operation;
+ private String socket;
+ private VhostUserRole role = VhostUserRole.Server;
+ private boolean enabled = true;
+ private String description;
+ private String bridgeDomain;
+
+ public String getName() {
+ return name;
+ }
+
+ public VhostUserCommandBuilder setName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public General.Operations getOperation() {
+ return operation;
+ }
+
+ public VhostUserCommandBuilder setOperation(General.Operations operation) {
+ this.operation = operation;
+ return this;
+ }
+
+ public String getSocket() {
+ return socket;
+ }
+
+ public VhostUserCommandBuilder setSocket(String socket) {
+ this.socket = socket;
+ return this;
+ }
+
+ public VhostUserRole getRole() {
+ return role;
+ }
+
+ public VhostUserCommandBuilder setRole(VhostUserRole role) {
+ this.role = role;
+ return this;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public VhostUserCommandBuilder setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ return this;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public VhostUserCommandBuilder setDescription(String description) {
+ this.description = description;
+ return this;
+ }
+
+ public String getBridgeDomain() {
+ return bridgeDomain;
+ }
+
+ public VhostUserCommandBuilder setBridgeDomain(String bridgeDomain) {
+ this.bridgeDomain = bridgeDomain;
+ return this;
+ }
+
+ /**
+ * VhostUserCommand build method.
+ *
+ * @return VhostUserCommand
+ * @throws IllegalArgumentException if name, operation or socket is null.
+ */
+ public VhostUserCommand build() {
+ Preconditions.checkArgument(this.name != null);
+ Preconditions.checkArgument(this.operation != null);
+ if (operation == Operations.PUT) {
+ Preconditions.checkArgument(this.socket != null);
+ }
+
+ return new VhostUserCommand(this);
+ }
+ }
+}
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.ConfigCommand;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.TapPortCommand;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.VhostUserCommand;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.VhostUserCommand.VhostUserCommandBuilder;
import org.opendaylight.groupbasedpolicy.renderer.vpp.event.NodeOperEvent;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.VppEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.vpp.endpoint.InterfaceTypeChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.vpp.endpoint._interface.type.choice.TapCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.vpp.endpoint._interface.type.choice.VhostUserCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VhostUserRole;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;
private final VppEndpointLocationProvider vppEndpointLocationProvider;
private final ExecutorService netconfWorker;
- public InterfaceManager(@Nonnull MountedDataBrokerProvider mountDataProvider, @Nonnull DataBroker dataProvider, @Nonnull ExecutorService netconfWorker) {
+ public InterfaceManager(@Nonnull MountedDataBrokerProvider mountDataProvider, @Nonnull DataBroker dataProvider,
+ @Nonnull ExecutorService netconfWorker) {
this.mountDataProvider = Preconditions.checkNotNull(mountDataProvider);
this.netconfWorker = Preconditions.checkNotNull(netconfWorker);
this.vppEndpointLocationProvider = new VppEndpointLocationProvider(dataProvider);
break;
}
} catch (InterruptedException | ExecutionException e) {
- LOG.error("Failed to update Vpp Endpoint. {}", e);
- e.printStackTrace();
+ LOG.error("Failed to update Vpp Endpoint. {}", event, e);
}
}
private ListenableFuture<Void> vppEndpointCreated(VppEndpoint vppEndpoint) {
- Optional<ConfigCommand> potentialIfaceCommand = createInterfaceWithoutBdCommand(vppEndpoint, Operations.PUT);
+ InterfaceTypeChoice interfaceTypeChoice = vppEndpoint.getInterfaceTypeChoice();
+ Optional<ConfigCommand> potentialIfaceCommand = Optional.absent();
+ if (interfaceTypeChoice instanceof VhostUserCase) {
+ potentialIfaceCommand = createInterfaceWithoutBdCommand(vppEndpoint, Operations.PUT);
+ } else if (interfaceTypeChoice instanceof TapCase) {
+ potentialIfaceCommand = createTapInterfaceWithoutBdCommand(vppEndpoint, Operations.PUT);
+ }
+
if (!potentialIfaceCommand.isPresent()) {
+ LOG.debug("Interface/PUT command was not created for VppEndpoint point {}", vppEndpoint);
return Futures.immediateFuture(null);
}
ConfigCommand ifaceWithoutBdCommand = potentialIfaceCommand.get();
Optional<DataBroker> potentialVppDataProvider = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);
if (!potentialVppDataProvider.isPresent()) {
LOG.debug("Cannot get data broker for mount point {}", vppNodeIid);
- Futures.immediateFuture(null);
+ return Futures.immediateFuture(null);
}
DataBroker vppDataBroker = potentialVppDataProvider.get();
return createIfaceOnVpp(ifaceWithoutBdCommand, vppDataBroker, vppEndpoint, vppNodeIid);
}, netconfWorker);
}
- private ListenableFuture<Void> vppEndpointDeleted(VppEndpoint vppEndpoint) {
- Optional<ConfigCommand> potentialIfaceCommand = createInterfaceWithoutBdCommand(vppEndpoint, Operations.DELETE);
+ private ListenableFuture<Void> vppEndpointDeleted(@Nonnull VppEndpoint vppEndpoint) {
+ InterfaceTypeChoice interfaceTypeChoice = vppEndpoint.getInterfaceTypeChoice();
+ Optional<ConfigCommand> potentialIfaceCommand = Optional.absent();
+ if (interfaceTypeChoice instanceof VhostUserCase) {
+ potentialIfaceCommand = createInterfaceWithoutBdCommand(vppEndpoint, Operations.DELETE);
+ } else if (interfaceTypeChoice instanceof TapCase) {
+ potentialIfaceCommand = createTapInterfaceWithoutBdCommand(vppEndpoint, Operations.DELETE);
+ }
+
if (!potentialIfaceCommand.isPresent()) {
+ LOG.debug("Interface/DELETE command was not created for VppEndpoint point {}", vppEndpoint);
return Futures.immediateFuture(null);
}
ConfigCommand ifaceWithoutBdCommand = potentialIfaceCommand.get();
break;
case DELETED:
if (event.isBeforeConnected()) {
- // TODO we could do snapshot of VppEndpoints
+ // TODO we could do snapshot of VppEndpoints
// which can be used for reconciliation
}
break;
return Optional.of(vhostUserCommand);
}
+ private static Optional<ConfigCommand> createTapInterfaceWithoutBdCommand(@Nonnull VppEndpoint vppEp,
+ @Nonnull Operations operation) {
+ if (!hasNodeAndInterface(vppEp)) {
+ LOG.debug("Interface command is not created for {}", vppEp);
+ return Optional.absent();
+ }
+ TapPortCommand.TapPortCommandBuilder builder = TapPortCommand.builder();
+ InterfaceTypeChoice interfaceTypeChoice = vppEp.getInterfaceTypeChoice();
+ if (interfaceTypeChoice instanceof TapCase) {
+ TapCase tapIface = (TapCase) interfaceTypeChoice;
+ String name = tapIface.getName();
+ if (Strings.isNullOrEmpty(name)) {
+ LOG.debug("Tap interface command is not created because name is missing. {}", vppEp);
+ return Optional.absent();
+ }
+ builder.setTapName(name);
+ builder.setPhysAddress(tapIface.getPhysicalAddress());
+ }
+ TapPortCommand tapPortCommand = builder
+ .setOperation(operation)
+ .setDescription(vppEp.getDescription())
+ .setInterfaceName(vppEp.getVppInterfaceName())
+ .build();
+ return Optional.of(tapPortCommand);
+ }
+
/**
* Adds bridge domain to an interface if the interface exist.<br>
* It rewrites bridge domain in case it already exist.<br>
* If the interface does not exist or other problems occur {@link ListenableFuture} will fail
* as {@link Futures#immediateFailedFuture(Throwable)} with {@link Exception}
* containing message in {@link Exception#getMessage()}
- *
+ *
* @param bridgeDomainName bridge domain
* @param addrEpWithLoc {@link AddressEndpointWithLocation} containing
* {@link ExternalLocationCase} where
}
/**
- * <p>
* Removes bridge domain (if exist) from an interface (if exist).<br>
* {@link VppEndpointLocationProvider#VPP_ENDPOINT_LOCATION_PROVIDER} will update endpoint
* location.
* If the interface does not exist or other problems occur {@link ListenableFuture} will fail
* as {@link Futures#immediateFailedFuture(Throwable)} with {@link Exception}
* containing message in {@link Exception#getMessage()}
- *
+ *
* @param addrEpWithLoc {@link AddressEndpointWithLocation} containing
* {@link ExternalLocationCase} where
* {@link ExternalLocationCase#getExternalNodeMountPoint()} MUST NOT be {@code null}
--- /dev/null
+/*\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 com.google.common.base.Optional;\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;\r
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
+import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest;\r
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;\r
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;\r
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.Tap;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.TapBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.base.attributes.interconnection.BridgeBasedBuilder;\r
+\r
+import java.util.concurrent.ExecutionException;\r
+\r
+public class TapPortCommandTest extends VppRendererDataBrokerTest {\r
+\r
+ private final static String DESCRIPTION = "used for testing";\r
+ private final static String INTERFACE_NAME = "testInterface";\r
+ private final static String TAP_NAME = "testTap00:11:22:33:44:55";\r
+ private final static String BRIDGE_DOMAIN = "testBD";\r
+ private final static Long DEVICE_ID = 0L;\r
+ private final static PhysAddress MAC_ADDRESS = new PhysAddress("00:11:22:33:44:55");\r
+\r
+ private final static String UPD_DESCRIPTION = "updated description";\r
+ private final static PhysAddress UPD_MAC_ADDRESS = new PhysAddress("55:44:33:22:11:00");\r
+ private final static String UPD_TAP_NAME = "testTapUpd";\r
+ private final static Long UPD_DEVICE_ID = 1L;\r
+\r
+ private final static VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder()\r
+ .setTap(new TapBuilder().setMac(MAC_ADDRESS).setTapName(TAP_NAME).setDeviceInstance(DEVICE_ID).build());\r
+\r
+ private final static VppInterfaceAugmentationBuilder vppAugmentationBuilderWithBD =\r
+ new VppInterfaceAugmentationBuilder(vppAugmentationBuilder.build())\r
+ .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN)\r
+ .setBridgedVirtualInterface(false)\r
+ .build()).build());\r
+\r
+ private final static InterfaceBuilder interfaceBuilder =\r
+ new InterfaceBuilder().setKey(new InterfaceKey(INTERFACE_NAME))\r
+ .setEnabled(true)\r
+ .setDescription(DESCRIPTION)\r
+ .setType(Tap.class)\r
+ .setName(INTERFACE_NAME)\r
+ .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled);\r
+\r
+ private final static Interface BASIC_INTERFACE =\r
+ interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build()).build();\r
+ private final static Interface BASIC_INTERFACE_WITH_BD = interfaceBuilder\r
+ .addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilderWithBD.build()).build();\r
+\r
+ private DataBroker dataBroker;\r
+\r
+ @Before\r
+ public void init() {\r
+ dataBroker = getDataBroker();\r
+ }\r
+\r
+ @Test\r
+ public void testAddTapPort() throws ExecutionException, InterruptedException {\r
+ ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
+ TapPortCommand addCommand = TapPortCommand.builder()\r
+ .setOperation(General.Operations.PUT)\r
+ .setInterfaceName(INTERFACE_NAME)\r
+ .setTapName(TAP_NAME)\r
+ .setDescription(DESCRIPTION)\r
+ .setDeviceInstance(DEVICE_ID)\r
+ .setPhysAddress(MAC_ADDRESS)\r
+ .setEnabled(true)\r
+ .build();\r
+\r
+ Optional<Interface> optional = executeCommand(rwTx, addCommand);\r
+\r
+ Assert.assertTrue(optional.isPresent());\r
+ Assert.assertEquals(BASIC_INTERFACE, optional.get());\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testAddTapPort_WithBridgeDomain() throws ExecutionException, InterruptedException {\r
+ ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
+ TapPortCommand addCommand = TapPortCommand.builder()\r
+ .setOperation(General.Operations.PUT)\r
+ .setInterfaceName(INTERFACE_NAME)\r
+ .setTapName(TAP_NAME)\r
+ .setDescription(DESCRIPTION)\r
+ .setDeviceInstance(DEVICE_ID)\r
+ .setPhysAddress(MAC_ADDRESS)\r
+ .setBridgeDomain(BRIDGE_DOMAIN)\r
+ .setEnabled(true)\r
+ .build();\r
+\r
+ Optional<Interface> optional = executeCommand(rwTx, addCommand);\r
+\r
+ Assert.assertTrue(optional.isPresent());\r
+ Assert.assertEquals(BASIC_INTERFACE_WITH_BD, optional.get());\r
+\r
+ }\r
+\r
+ private Optional<Interface> executeCommand(ReadWriteTransaction rwTx, TapPortCommand addCommand)\r
+ throws ExecutionException, InterruptedException {\r
+ addCommand.execute(rwTx);\r
+\r
+ rwTx.submit().get();\r
+\r
+ ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
+\r
+ return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+ VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), rTx);\r
+ }\r
+\r
+ @Test\r
+ public void testDeleteTapPort() throws ExecutionException, InterruptedException {\r
+ ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
+\r
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),\r
+ BASIC_INTERFACE, true);\r
+ rwTx.submit().get();\r
+\r
+ Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+ VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());\r
+\r
+ Assert.assertTrue(optional.isPresent());\r
+\r
+ TapPortCommand deleteCommand = TapPortCommand.builder()\r
+ .setOperation(General.Operations.DELETE)\r
+ .setInterfaceName(INTERFACE_NAME)\r
+ .setTapName(TAP_NAME)\r
+ .build();\r
+\r
+ ReadWriteTransaction rwTxDel = dataBroker.newReadWriteTransaction();\r
+ deleteCommand.execute(rwTxDel);\r
+ rwTxDel.submit();\r
+\r
+ Optional<Interface> optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+ VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())),\r
+ dataBroker.newReadOnlyTransaction());\r
+\r
+ Assert.assertFalse(optionalDeleted.isPresent());\r
+ }\r
+\r
+ @Test\r
+ public void testUpdateTapPort() throws ExecutionException, InterruptedException {\r
+ ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
+\r
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),\r
+ BASIC_INTERFACE, true);\r
+ rwTx.submit().get();\r
+\r
+ Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+ VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());\r
+\r
+ Assert.assertTrue(optional.isPresent());\r
+\r
+ TapPortCommand updateCommand = TapPortCommand.builder()\r
+ .setOperation(General.Operations.MERGE)\r
+ .setInterfaceName(INTERFACE_NAME)\r
+ .setTapName(UPD_TAP_NAME)\r
+ .setDescription(UPD_DESCRIPTION)\r
+ .setPhysAddress(UPD_MAC_ADDRESS)\r
+ .setDeviceInstance(UPD_DEVICE_ID)\r
+ .setEnabled(false)\r
+ .build();\r
+\r
+ ReadWriteTransaction rwTxUpd = dataBroker.newReadWriteTransaction();\r
+ updateCommand.execute(rwTxUpd);\r
+ rwTxUpd.submit().get();\r
+\r
+ Optional<Interface> optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+ VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())),\r
+ dataBroker.newReadOnlyTransaction());\r
+\r
+ Assert.assertTrue(optionalUpdated.isPresent());\r
+ Interface updatedInterface = optionalUpdated.get();\r
+\r
+ Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription());\r
+ Assert.assertFalse(updatedInterface.isEnabled());\r
+ VppInterfaceAugmentation augmentation = updatedInterface.getAugmentation(VppInterfaceAugmentation.class);\r
+ Assert.assertEquals(INTERFACE_NAME, updatedInterface.getName());\r
+ Assert.assertEquals(UPD_DEVICE_ID, augmentation.getTap().getDeviceInstance());\r
+ Assert.assertEquals(UPD_MAC_ADDRESS, augmentation.getTap().getMac());\r
+ Assert.assertEquals(UPD_TAP_NAME, augmentation.getTap().getTapName());\r
+\r
+ }\r
+}\r