diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
commit | 13d05bc8458758ee39cb829098241e89616717ee (patch) | |
tree | 22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java | |
parent | 6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (diff) |
ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60
Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd
Diffstat (limited to 'framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java')
-rw-r--r-- | framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java new file mode 100644 index 00000000..47adf5c7 --- /dev/null +++ b/framework/src/onos/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/InterfaceConfig.java @@ -0,0 +1,87 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onosproject.incubator.net.config.basics; + +import com.fasterxml.jackson.databind.JsonNode; +import com.google.common.collect.Sets; +import org.onlab.packet.MacAddress; +import org.onlab.packet.VlanId; +import org.onosproject.net.config.Config; +import org.onosproject.incubator.net.intf.Interface; +import org.onosproject.net.ConnectPoint; +import org.onosproject.net.host.InterfaceIpAddress; + +import java.util.Set; + +/** + * Configuration for interfaces. + */ +public class InterfaceConfig extends Config<ConnectPoint> { + public static final String IPS = "ips"; + public static final String MAC = "mac"; + public static final String VLAN = "vlan"; + + public static final String IP_MISSING_ERROR = "Must have at least one IP address"; + 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"; + + /** + * Retrieves all interfaces configured on this port. + * + * @return set of interfaces + * @throws ConfigException if there is any error in the JSON config + */ + public Set<Interface> getInterfaces() throws ConfigException { + Set<Interface> interfaces = Sets.newHashSet(); + + try { + for (JsonNode intfNode : array) { + Set<InterfaceIpAddress> ips = getIps(intfNode); + if (ips.isEmpty()) { + throw new ConfigException(IP_MISSING_ERROR); + } + + if (intfNode.path(MAC).isMissingNode()) { + throw new ConfigException(MAC_MISSING_ERROR); + } + + MacAddress mac = MacAddress.valueOf(intfNode.path(MAC).asText()); + + VlanId vlan = VlanId.NONE; + if (!intfNode.path(VLAN).isMissingNode()) { + vlan = VlanId.vlanId(Short.valueOf(intfNode.path(VLAN).asText())); + } + + interfaces.add(new Interface(subject, ips, mac, vlan)); + } + } catch (IllegalArgumentException e) { + throw new ConfigException(CONFIG_VALUE_ERROR, e); + } + + return interfaces; + } + + private Set<InterfaceIpAddress> getIps(JsonNode node) { + Set<InterfaceIpAddress> ips = Sets.newHashSet(); + + JsonNode ipsNode = node.get(IPS); + ipsNode.forEach(jsonNode -> ips.add(InterfaceIpAddress.valueOf(jsonNode.asText()))); + + return ips; + } + +} |