Add optional "name" parameter in interface configuration.

Interfaces can now be added and deleted by name. Interfaces without names
cannot be updated or deleted.

Change-Id: Icb2188b1c9abf3017724f751a93457920a53ba03
diff --git a/cli/src/main/java/org/onosproject/cli/net/InterfaceAddCommand.java b/cli/src/main/java/org/onosproject/cli/net/InterfaceAddCommand.java
index 4fd9b0d..ae4e410 100644
--- a/cli/src/main/java/org/onosproject/cli/net/InterfaceAddCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/InterfaceAddCommand.java
@@ -17,6 +17,7 @@
 package org.onosproject.cli.net;
 
 import com.google.common.collect.Sets;
+import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 import org.onlab.packet.MacAddress;
@@ -36,11 +37,15 @@
         description = "Adds a new configured interface")
 public class InterfaceAddCommand extends AbstractShellCommand {
 
-    @Option(name = "-c", aliases = "--connectPoint",
+    @Argument(index = 0, name = "port",
             description = "Device port that the interface is associated with",
             required = true, multiValued = false)
     private String connectPoint = null;
 
+    @Argument(index = 1, name = "name", description = "Interface name",
+            required = true, multiValued = false)
+    private String name = null;
+
     @Option(name = "-m", aliases = "--mac",
             description = "MAC address of the interface",
             required = false, multiValued = false)
@@ -72,10 +77,13 @@
 
         VlanId vlanId = vlan == null ? VlanId.NONE : VlanId.vlanId(Short.parseShort(vlan));
 
-        Interface intf = new Interface(ConnectPoint.deviceConnectPoint(connectPoint),
+        Interface intf = new Interface(name,
+                ConnectPoint.deviceConnectPoint(connectPoint),
                 ipAddresses, macAddr, vlanId);
 
         interfaceService.add(intf);
+
+        print("Interface added");
     }
 
 }
diff --git a/cli/src/main/java/org/onosproject/cli/net/InterfaceRemoveCommand.java b/cli/src/main/java/org/onosproject/cli/net/InterfaceRemoveCommand.java
index 941a65d..0a7b5a1 100644
--- a/cli/src/main/java/org/onosproject/cli/net/InterfaceRemoveCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/InterfaceRemoveCommand.java
@@ -18,7 +18,6 @@
 
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
-import org.onlab.packet.VlanId;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.incubator.net.intf.InterfaceAdminService;
 import org.onosproject.net.ConnectPoint;
@@ -35,17 +34,23 @@
             required = true, multiValued = false)
     private String connectPoint = null;
 
-    @Argument(index = 1, name = "vlan",
-            description = "Interface vlan",
+    @Argument(index = 1, name = "name",
+            description = "Interface name",
             required = true, multiValued = false)
-    private String vlan = null;
+    private String name = null;
 
     @Override
     protected void execute() {
         InterfaceAdminService interfaceService = get(InterfaceAdminService.class);
 
-        interfaceService.remove(ConnectPoint.deviceConnectPoint(connectPoint),
-                VlanId.vlanId(Short.parseShort(vlan)));
+        boolean success = interfaceService.remove(
+                ConnectPoint.deviceConnectPoint(connectPoint), name);
+
+        if (success) {
+            print("Interface removed");
+        } else {
+            print("Unable to remove interface");
+        }
     }
 
 }
diff --git a/cli/src/main/java/org/onosproject/cli/net/InterfacesListCommand.java b/cli/src/main/java/org/onosproject/cli/net/InterfacesListCommand.java
index aa93eb9..bac3aed 100644
--- a/cli/src/main/java/org/onosproject/cli/net/InterfacesListCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/InterfacesListCommand.java
@@ -35,6 +35,9 @@
     private static final String FORMAT =
             "port=%s/%s, ips=%s, mac=%s, vlan=%s";
 
+    private static final String NAME_FORMAT =
+            "%s: port=%s/%s, ips=%s, mac=%s, vlan=%s";
+
     @Override
     protected void execute() {
         InterfaceService interfaceService = get(InterfaceService.class);
@@ -44,8 +47,14 @@
         Collections.sort(interfaces, Comparators.INTERFACES_COMPARATOR);
 
         for (Interface intf : interfaces) {
-            print(FORMAT, intf.connectPoint().deviceId(), intf.connectPoint().port(),
-                    intf.ipAddresses(), intf.mac(), intf.vlan());
+            if (intf.name().equals(Interface.NO_INTERFACE_NAME)) {
+                print(FORMAT, intf.connectPoint().deviceId(), intf.connectPoint().port(),
+                        intf.ipAddresses(), intf.mac(), intf.vlan());
+            } else {
+                print(NAME_FORMAT, intf.name(), intf.connectPoint().deviceId(),
+                        intf.connectPoint().port(), intf.ipAddresses(),
+                        intf.mac(), intf.vlan());
+            }
         }
     }