From e3879f765162af2d76f8e1816acb2f3d4536da9a Mon Sep 17 00:00:00 2001 From: Luca Prete Date: Fri, 16 Oct 2015 11:19:53 +0200 Subject: [PATCH] ONOS-3165. Make MAC not mandatory. Fixing IP (constructor was still doing checkNotNull) Change-Id: I6663504f63df25260aa62c28337cdadb83dfd361 --- .../onosproject/cli/net/InterfaceAddCommand.java | 6 ++++-- .../net/config/basics/InterfaceConfig.java | 15 +++++++-------- .../onosproject/incubator/net/intf/Interface.java | 9 +++++---- .../main/java/org/onlab/packet/MacAddress.java | 1 + 4 files changed, 17 insertions(+), 14 deletions(-) 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 eefb711a79..4fd9b0dfff 100644 --- a/cli/src/main/java/org/onosproject/cli/net/InterfaceAddCommand.java +++ b/cli/src/main/java/org/onosproject/cli/net/InterfaceAddCommand.java @@ -43,7 +43,7 @@ public class InterfaceAddCommand extends AbstractShellCommand { @Option(name = "-m", aliases = "--mac", description = "MAC address of the interface", - required = true, multiValued = false) + required = false, multiValued = false) private String mac = null; @Option(name = "-i", aliases = "--ip", @@ -68,10 +68,12 @@ public class InterfaceAddCommand extends AbstractShellCommand { } } + MacAddress macAddr = mac == null ? null : MacAddress.valueOf(mac); + VlanId vlanId = vlan == null ? VlanId.NONE : VlanId.vlanId(Short.parseShort(vlan)); Interface intf = new Interface(ConnectPoint.deviceConnectPoint(connectPoint), - ipAddresses, MacAddress.valueOf(mac), vlanId); + ipAddresses, macAddr, vlanId); interfaceService.add(intf); } diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java index 592336c2e3..9f2d4105e2 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java +++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java @@ -39,7 +39,6 @@ public class InterfaceConfig extends Config { public static final String MAC = "mac"; public static final String VLAN = "vlan"; - public static final String MAC_MISSING_ERROR = "Must have a MAC address for each interface"; public static final String CONFIG_VALUE_ERROR = "Error parsing config value"; /** @@ -55,15 +54,12 @@ public class InterfaceConfig extends Config { for (JsonNode intfNode : array) { Set ips = getIps(intfNode); - if (intfNode.path(MAC).isMissingNode()) { - throw new ConfigException(MAC_MISSING_ERROR); - } - - MacAddress mac = MacAddress.valueOf(intfNode.path(MAC).asText()); + String mac = intfNode.path(MAC).asText(); + MacAddress macAddr = mac.isEmpty() ? null : MacAddress.valueOf(mac); VlanId vlan = getVlan(intfNode); - interfaces.add(new Interface(subject, ips, mac, vlan)); + interfaces.add(new Interface(subject, ips, macAddr, vlan)); } } catch (IllegalArgumentException e) { throw new ConfigException(CONFIG_VALUE_ERROR, e); @@ -79,7 +75,10 @@ public class InterfaceConfig extends Config { */ public void addInterface(Interface intf) { ObjectNode intfNode = array.addObject(); - intfNode.put(MAC, intf.mac().toString()); + + if (intf.mac() != null) { + intfNode.put(MAC, intf.mac().toString()); + } if (!intf.ipAddresses().isEmpty()) { intfNode.set(IPS, putIps(intf.ipAddresses())); diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java b/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java index 69d14bce3b..b9d3eadf63 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java +++ b/incubator/api/src/main/java/org/onosproject/incubator/net/intf/Interface.java @@ -30,7 +30,8 @@ import static com.google.common.base.Preconditions.checkNotNull; /** * An Interface maps network configuration information (such as addresses and - * vlans) to a port in the network. + * vlans) to a port in the network. This is considered a L2/L3 network + * interface. */ @Beta public class Interface { @@ -51,9 +52,9 @@ public class Interface { Set ipAddresses, MacAddress macAddress, VlanId vlan) { this.connectPoint = checkNotNull(connectPoint); - this.ipAddresses = Sets.newHashSet(checkNotNull(ipAddresses)); - this.macAddress = checkNotNull(macAddress); - this.vlan = checkNotNull(vlan); + this.ipAddresses = ipAddresses == null ? Sets.newHashSet() : ipAddresses; + this.macAddress = macAddress == null ? MacAddress.NONE : macAddress; + this.vlan = vlan == null ? VlanId.NONE : vlan; } /** diff --git a/utils/misc/src/main/java/org/onlab/packet/MacAddress.java b/utils/misc/src/main/java/org/onlab/packet/MacAddress.java index 89cddbae6e..cb7f201387 100644 --- a/utils/misc/src/main/java/org/onlab/packet/MacAddress.java +++ b/utils/misc/src/main/java/org/onlab/packet/MacAddress.java @@ -22,6 +22,7 @@ import java.util.Arrays; */ public class MacAddress { + public static final MacAddress NONE = valueOf("a4:23:05:00:00:00"); public static final MacAddress ZERO = valueOf("00:00:00:00:00:00"); public static final MacAddress BROADCAST = valueOf("ff:ff:ff:ff:ff:ff");