diff options
author | CNlucius <lukai1@huawei.com> | 2016-09-13 11:40:12 +0800 |
---|---|---|
committer | CNlucius <lukai1@huawei.com> | 2016-09-13 11:41:53 +0800 |
commit | b731e2f1dd0972409b136aebc7b463dd72c9cfad (patch) | |
tree | 5107d7d80c19ad8076c2c97c2b5ef8d1cf3ab903 /framework/src/onos/core/api/src/main/java/org/onosproject/net | |
parent | ee93993458266114c29271a481ef9ce7ce621b2a (diff) |
ONOSFW-171
O/S-SFC-ONOS scenario documentation
Change-Id: I51ae1cf736ea24ab6680f8edca1b2bf5dd598365
Signed-off-by: CNlucius <lukai1@huawei.com>
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/net')
483 files changed, 0 insertions, 44207 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java deleted file mode 100644 index e0407e27..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractAnnotated.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2014-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.net; - -import static com.google.common.base.Preconditions.checkArgument; -import static org.onosproject.net.DefaultAnnotations.EMPTY; - -/** - * Base abstraction of an annotated entity. - */ -public abstract class AbstractAnnotated implements Annotated { - - private final Annotations annotations; - - // For serialization - protected AbstractAnnotated() { - this.annotations = null; - } - - /** - * Creates a new entity, annotated with the specified annotations. - * - * @param annotations optional key/value annotations map - */ - protected AbstractAnnotated(Annotations... annotations) { - checkArgument(annotations.length <= 1, "Only one set of annotations is expected"); - this.annotations = annotations.length == 1 ? annotations[0] : EMPTY; - } - - @Override - public Annotations annotations() { - return annotations; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractDescription.java deleted file mode 100644 index 34042dad..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractDescription.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2014 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.net; - -import static com.google.common.base.Preconditions.checkArgument; -import com.google.common.base.Objects; - -/** - * Base implementation of an annotated model description. - */ -public abstract class AbstractDescription implements Annotated { - - private static final SparseAnnotations EMPTY = DefaultAnnotations.builder().build(); - - private final SparseAnnotations annotations; - - // For serialization - protected AbstractDescription() { - this.annotations = null; - } - - /** - * Creates a new entity, annotated with the specified annotations. - * - * @param annotations optional key/value annotations map - */ - protected AbstractDescription(SparseAnnotations... annotations) { - checkArgument(annotations.length <= 1, "Only one set of annotations is expected"); - this.annotations = annotations.length == 1 ? annotations[0] : EMPTY; - } - - @Override - public SparseAnnotations annotations() { - return annotations; - } - - @Override - public int hashCode() { - return Objects.hashCode(annotations); - } - - @Override - public boolean equals(Object object) { - if (object instanceof AbstractDescription) { - AbstractDescription that = (AbstractDescription) object; - return Objects.equal(this.annotations, that.annotations); - } - return false; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractElement.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractElement.java deleted file mode 100644 index 595e7b9c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractElement.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2014 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.net; - -import org.onosproject.net.provider.ProviderId; - -/** - * Base implementation of network elements, i.e. devices or hosts. - */ -public abstract class AbstractElement extends AbstractModel implements Element { - - protected final ElementId id; - - // For serialization - public AbstractElement() { - id = null; - } - - /** - * Creates a network element attributed to the specified provider. - * - * @param providerId identity of the provider - * @param id element identifier - * @param annotations optional key/value annotations - */ - protected AbstractElement(ProviderId providerId, ElementId id, - Annotations... annotations) { - super(providerId, annotations); - this.id = id; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractModel.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractModel.java deleted file mode 100644 index f3cd5efe..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AbstractModel.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2014 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.net; - -import org.onosproject.net.provider.ProviderId; - -/** - * Base implementation of a network model entity. - */ -public abstract class AbstractModel extends AbstractAnnotated implements Provided { - - private final ProviderId providerId; - - // For serialization - public AbstractModel() { - providerId = null; - } - - /** - * Creates a model entity attributed to the specified provider and - * optionally annotated. - * - * @param providerId identity of the provider - * @param annotations optional key/value annotations - */ - protected AbstractModel(ProviderId providerId, Annotations... annotations) { - super(annotations); - this.providerId = providerId; - } - - @Override - public ProviderId providerId() { - return providerId; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Annotated.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Annotated.java deleted file mode 100644 index ac4545ac..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Annotated.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2014 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.net; - -/** - * Represents an entity that carries arbitrary annotations. - */ -public interface Annotated { - - /** - * Returns the key/value annotations. - * - * @return key/value annotations - */ - Annotations annotations(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java deleted file mode 100644 index 38b599de..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AnnotationKeys.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2014-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.net; - -/** - * Collection of keys for annotation. - * <p> - * Number of the annotation keys have been deprecated as the use of annotations - * is being phased out and instead network configuration subsystem is being - * phased-in for majority of model meta-data. - * </p> - */ -public final class AnnotationKeys { - - // Prohibit instantiation - private AnnotationKeys() { - } - - /** - * Annotation key for instance name. - * - * @deprecated since Cardinal - */ - @Deprecated - public static final String NAME = "name"; - - /** - * Annotation key for instance type (e.g. host type). - * - * @deprecated since Cardinal - */ - @Deprecated - public static final String TYPE = "type"; - - /** - * Annotation key for latitude (e.g. latitude of device). - * - * @deprecated since Cardinal - */ - @Deprecated - public static final String LATITUDE = "latitude"; - - /** - * Annotation key for longitute (e.g. longitude of device). - * - * @deprecated since Cardinal - */ - @Deprecated - public static final String LONGITUDE = "longitude"; - - /** - * Annotation key for southbound protocol. - */ - public static final String PROTOCOL = "protocol"; - - /** - * Annotation key for the device driver name. - * - * @deprecated since Cardinal - */ - @Deprecated - public static final String DRIVER = "driver"; - - /** - * Annotation key for durable links. - */ - public static final String DURABLE = "durable"; - - /** - * Annotation key for link metric; used by - * {@link org.onosproject.net.topology.MetricLinkWeight} function. - */ - public static final String METRIC = "metric"; - - /** - * Annotation key for latency. - * - * @deprecated since Cardinal - */ - @Deprecated - public static final String LATENCY = "latency"; - - /** - * Annotation key for bandwidth. - * The value for this key is interpreted as Mbps. - * - * @deprecated since Cardinal - */ - @Deprecated - public static final String BANDWIDTH = "bandwidth"; - - /** - * Annotation key for the number of optical waves. - */ - public static final String OPTICAL_WAVES = "optical.waves"; - - /** - * Annotation key for the port name. - */ - public static final String PORT_NAME = "portName"; - - /** - * Annotation key for the port mac. - */ - public static final String PORT_MAC = "portMac"; - - /** - * Annotation key for the router ID. - */ - public static final String ROUTER_ID = "routerId"; - - /** - * Annotation key for the static lambda. - */ - public static final String STATIC_LAMBDA = "staticLambda"; - - /** - * Annotation key for the static port. - */ - public static final String STATIC_PORT = "staticPort"; - - /** - * Annotation key for device location. - */ - public static final String RACK_ADDRESS = "rackAddress"; - - /** - * Annotation key for device owner. - */ - public static final String OWNER = "owner"; - - /** - * Annotation key for the channel id. - */ - public static final String CHANNEL_ID = "channelId"; - - /** - * Annotation key for the management address. - */ - public static final String MANAGEMENT_ADDRESS = "managementAddress"; - - /** - * Returns the value annotated object for the specified annotation key. - * The annotated value is expected to be String that can be parsed as double. - * If parsing fails, the returned value will be 1.0. - * - * @param annotated annotated object whose annotated value is obtained - * @param key key of annotation - * @return double value of annotated object for the specified key - */ - public static double getAnnotatedValue(Annotated annotated, String key) { - double value; - try { - value = Double.parseDouble(annotated.annotations().value(key)); - } catch (NumberFormatException e) { - value = 1.0; - } - return value; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Annotations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Annotations.java deleted file mode 100644 index 4ed70601..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Annotations.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2014 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.net; - -import java.util.Set; - -/** - * Represents an set of simple key/value string annotations. - */ -public interface Annotations { - - /** - * Returns the set of keys for available annotations. - * - * @return annotation keys - */ - Set<String> keys(); - - /** - * Returns the value of the specified annotation. - * - * @param key annotation key - * @return annotation value - */ - String value(String key); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AnnotationsUtil.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/AnnotationsUtil.java deleted file mode 100644 index d43a304d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/AnnotationsUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2014 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.net; - -/** - * Utility for processing annotations. - */ -public final class AnnotationsUtil { - - public static boolean isEqual(Annotations lhs, Annotations rhs) { - if (lhs == rhs) { - return true; - } - if (lhs == null || rhs == null) { - return false; - } - - if (!lhs.keys().equals(rhs.keys())) { - return false; - } - - for (String key : lhs.keys()) { - if (!lhs.value(key).equals(rhs.value(key))) { - return false; - } - } - return true; - } - - // not to be instantiated - private AnnotationsUtil() {} -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/ChannelSpacing.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/ChannelSpacing.java deleted file mode 100644 index 4da9d6b3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/ChannelSpacing.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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.net; - -import org.onlab.util.Frequency; - -/** - * Represents interval frequency between two neighboring wavelengths. - */ -public enum ChannelSpacing { - CHL_100GHZ(100), // 100 GHz - CHL_50GHZ(50), // 50 GHz - CHL_25GHZ(25), // 25 GHz - CHL_12P5GHZ(12.5), // 12.5 GHz - CHL_6P25GHZ(6.5); // 6.25 GHz - - private final Frequency frequency; - - /** - * Creates an instance with the specified interval in GHz. - * - * @param value interval of neighboring wavelengths in GHz. - */ - ChannelSpacing(double value) { - this.frequency = Frequency.ofGHz(value); - } - - public Frequency frequency() { - return frequency; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/ConnectPoint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/ConnectPoint.java deleted file mode 100644 index 0d13f4aa..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/ConnectPoint.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright 2014 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.net; - -import com.google.common.base.MoreObjects; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of a network connection point expressed as a pair of the - * network element identifier and port number. - */ -public class ConnectPoint { - - private final ElementId elementId; - private final PortNumber portNumber; - - /** - * Creates a new connection point. - * - * @param elementId network element identifier - * @param portNumber port number - */ - public ConnectPoint(ElementId elementId, PortNumber portNumber) { - this.elementId = elementId; - this.portNumber = portNumber; - } - - /** - * Returns the network element identifier. - * - * @return element identifier - */ - public ElementId elementId() { - return elementId; - } - - /** - * Returns the identifier of the infrastructure device if the connection - * point belongs to a network element which is indeed an infrastructure - * device. - * - * @return network element identifier as a device identifier - * @throws java.lang.IllegalStateException if connection point is not - * associated with a device - */ - public DeviceId deviceId() { - if (elementId instanceof DeviceId) { - return (DeviceId) elementId; - } - throw new IllegalStateException("Connection point not associated " + - "with an infrastructure device"); - } - - /** - * Returns the identifier of the infrastructure device if the connection - * point belongs to a network element which is indeed an end-station host. - * - * @return network element identifier as a host identifier - * @throws java.lang.IllegalStateException if connection point is not - * associated with a host - */ - public HostId hostId() { - if (elementId instanceof HostId) { - return (HostId) elementId; - } - throw new IllegalStateException("Connection point not associated " + - "with an end-station host"); - } - - /** - * Returns the identifier of the infrastructure device if the connection - * point belongs to a network element which is indeed an ip of pcc - * client identifier. - * - * @return network element identifier as a pcc client identifier - * @throws java.lang.IllegalStateException if connection point is not - * associated with a pcc client - */ - public IpElementId ipElementId() { - if (elementId instanceof IpElementId) { - return (IpElementId) elementId; - } - throw new IllegalStateException("Connection point not associated " + - "with an pcc client"); - } - - /** - * Returns the connection port number. - * - * @return port number - */ - public PortNumber port() { - return portNumber; - } - - /** - * Parse a device connect point from a string. - * The connect point should be in the format "deviceUri/portNumber". - * - * @param string string to parse - * @return a ConnectPoint based on the information in the string. - */ - public static ConnectPoint deviceConnectPoint(String string) { - checkNotNull(string); - String[] splitted = string.split("/"); - checkArgument(splitted.length == 2, - "Connect point must be in \"deviceUri/portNumber\" format"); - - return new ConnectPoint(DeviceId.deviceId(splitted[0]), - PortNumber.portNumber(splitted[1])); - } - - /** - * Parse a host connect point from a string. - * The connect point should be in the format "hostId/vlanId/portNumber". - * - * @param string string to parse - * @return a ConnectPoint based on the information in the string. - */ - public static ConnectPoint hostConnectPoint(String string) { - checkNotNull(string); - String[] splitted = string.split("/"); - checkArgument(splitted.length == 3, - "Connect point must be in \"hostId/vlanId/portNumber\" format"); - - int lastSlash = string.lastIndexOf("/"); - - return new ConnectPoint(HostId.hostId(string.substring(0, lastSlash)), - PortNumber.portNumber(string.substring(lastSlash + 1, string.length()))); - } - - @Override - public int hashCode() { - return Objects.hash(elementId, portNumber); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ConnectPoint) { - final ConnectPoint other = (ConnectPoint) obj; - return Objects.equals(this.elementId, other.elementId) && - Objects.equals(this.portNumber, other.portNumber); - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("elementId", elementId) - .add("portNumber", portNumber) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java deleted file mode 100644 index 7c97ecdd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright 2014-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.net; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import com.google.common.collect.Maps; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Represents a set of simple annotations that can be used to add arbitrary - * attributes to various parts of the data model. - */ -public final class DefaultAnnotations implements SparseAnnotations { - - public static final SparseAnnotations EMPTY = DefaultAnnotations.builder().build(); - - private final Map<String, String> map; - - // For serialization - private DefaultAnnotations() { - this.map = null; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - DefaultAnnotations that = (DefaultAnnotations) o; - - return Objects.equals(this.map, that.map); - - } - - @Override - public int hashCode() { - return Objects.hashCode(this.map); - } - - /** - * Returns the annotations as a map. - * - * @return a copy of the contents of the annotations as a map. - */ - public HashMap<String, String> asMap() { - return Maps.newHashMap(this.map); - } - - /** - * Creates a new set of annotations using clone of the specified hash map. - * - * @param map hash map of key/value pairs - */ - private DefaultAnnotations(Map<String, String> map) { - this.map = map; - } - - /** - * Creates a new annotations builder. - * - * @return new annotations builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Merges the specified base set of annotations and additional sparse - * annotations into new combined annotations. If the supplied sparse - * annotations are empty, the original base annotations are returned. - * Any keys tagged for removal in the sparse annotations will be omitted - * in the resulting merged annotations. - * - * @param annotations base annotations - * @param sparseAnnotations additional sparse annotations - * @return combined annotations or the original base annotations if there - * are not additional annotations - */ - public static DefaultAnnotations merge(DefaultAnnotations annotations, - SparseAnnotations sparseAnnotations) { - checkNotNull(annotations, "Annotations cannot be null"); - if (sparseAnnotations == null || sparseAnnotations.keys().isEmpty()) { - return annotations; - } - - // Merge the two maps. Yes, this is not very efficient, but the - // use-case implies small maps and infrequent merges, so we opt for - // simplicity. - Map<String, String> merged = copy(annotations.map); - for (String key : sparseAnnotations.keys()) { - if (sparseAnnotations.isRemoved(key)) { - merged.remove(key); - } else { - merged.put(key, sparseAnnotations.value(key)); - } - } - return new DefaultAnnotations(merged); - } - - /** - * Creates the union of two given SparseAnnotations. - * Unlike the {@link #merge(DefaultAnnotations, SparseAnnotations)} method, - * result will be {@link SparseAnnotations} instead of {@link Annotations}. - * - * A key tagged for removal will remain in the output SparseAnnotations, - * if the counterpart of the input does not contain the same key. - * - * @param annotations base annotations - * @param sparseAnnotations additional sparse annotations - * @return combined annotations or the original base annotations if there - * are not additional annotations - */ - public static SparseAnnotations union(SparseAnnotations annotations, - SparseAnnotations sparseAnnotations) { - - if (sparseAnnotations == null || sparseAnnotations.keys().isEmpty()) { - return annotations; - } - - final HashMap<String, String> newMap; - if (annotations instanceof DefaultAnnotations) { - newMap = copy(((DefaultAnnotations) annotations).map); - } else { - newMap = new HashMap<>(annotations.keys().size() + - sparseAnnotations.keys().size()); - putAllSparseAnnotations(newMap, annotations); - } - - putAllSparseAnnotations(newMap, sparseAnnotations); - return new DefaultAnnotations(newMap); - } - - // adds the key-values contained in sparseAnnotations to - // newMap, if sparseAnnotations had a key tagged for removal, - // and corresponding key exist in newMap, entry will be removed. - // if corresponding key does not exist, removal tag will be added to - // the newMap. - private static void putAllSparseAnnotations( - final HashMap<String, String> newMap, - SparseAnnotations sparseAnnotations) { - - for (String key : sparseAnnotations.keys()) { - if (sparseAnnotations.isRemoved(key)) { - if (newMap.containsKey(key)) { - newMap.remove(key); - } else { - newMap.put(key, Builder.REMOVED); - } - } else { - String value = sparseAnnotations.value(key); - newMap.put(key, value); - } - } - } - - @Override - public Set<String> keys() { - return Collections.unmodifiableSet(map.keySet()); - } - - @Override - public String value(String key) { - String value = map.get(key); - return Objects.equals(Builder.REMOVED, value) ? null : value; - } - - @Override - public boolean isRemoved(String key) { - return Objects.equals(Builder.REMOVED, map.get(key)); - } - - @SuppressWarnings("unchecked") - private static HashMap<String, String> copy(Map<String, String> original) { - if (original instanceof HashMap) { - return (HashMap<String, String>) ((HashMap<?, ?>) original).clone(); - } - throw new IllegalArgumentException("Expecting HashMap instance"); - } - - @Override - public String toString() { - return (map == null) ? "null" : map.toString(); - } - - /** - * Facility for gradually building model annotations. - */ - public static final class Builder { - - private static final String REMOVED = "~rEmOvEd~"; - private final Map<String, String> builder = new HashMap<>(); - - // Private construction is forbidden. - private Builder() { - } - - /** - * Adds the specified annotation. Any previous value associated with - * the given annotation key will be overwritten. - * - * @param key annotation key - * @param value annotation value - * @return self - */ - public Builder set(String key, String value) { - builder.put(key, value); - return this; - } - - /** - * Adds the specified annotation. Any previous value associated with - * the given annotation key will be tagged for removal. - * - * @param key annotation key - * @return self - */ - public Builder remove(String key) { - builder.put(key, REMOVED); - return this; - } - - /** - * Returns immutable annotations built from the accrued key/values pairs. - * - * @return annotations - */ - public DefaultAnnotations build() { - return new DefaultAnnotations(copy(builder)); - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultDevice.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultDevice.java deleted file mode 100644 index f3f0fe74..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultDevice.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2014-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.net; - -import org.onosproject.net.provider.ProviderId; -import org.onlab.packet.ChassisId; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Default infrastructure device model implementation. - */ -public class DefaultDevice extends AbstractElement implements Device { - - private final Type type; - private final String manufacturer; - private final String serialNumber; - private final String hwVersion; - private final String swVersion; - private final ChassisId chassisId; - - // For serialization - private DefaultDevice() { - this.type = null; - this.manufacturer = null; - this.hwVersion = null; - this.swVersion = null; - this.serialNumber = null; - this.chassisId = null; - } - - /** - * Creates a network element attributed to the specified provider. - * - * @param providerId identity of the provider - * @param id device identifier - * @param type device type - * @param manufacturer device manufacturer - * @param hwVersion device HW version - * @param swVersion device SW version - * @param serialNumber device serial number - * @param chassisId chassis id - * @param annotations optional key/value annotations - */ - public DefaultDevice(ProviderId providerId, DeviceId id, Type type, - String manufacturer, String hwVersion, String swVersion, - String serialNumber, ChassisId chassisId, - Annotations... annotations) { - super(providerId, id, annotations); - this.type = type; - this.manufacturer = manufacturer; - this.hwVersion = hwVersion; - this.swVersion = swVersion; - this.serialNumber = serialNumber; - this.chassisId = chassisId; - } - - @Override - public DeviceId id() { - return (DeviceId) id; - } - - @Override - public Type type() { - return type; - } - - @Override - public String manufacturer() { - return manufacturer; - } - - @Override - public String hwVersion() { - return hwVersion; - } - - @Override - public String swVersion() { - return swVersion; - } - - @Override - public String serialNumber() { - return serialNumber; - } - - @Override - public ChassisId chassisId() { - return chassisId; - } - - @Override - public int hashCode() { - return Objects.hash(id, type, manufacturer, hwVersion, swVersion, serialNumber); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultDevice) { - final DefaultDevice other = (DefaultDevice) obj; - return Objects.equals(this.id, other.id) && - Objects.equals(this.type, other.type) && - Objects.equals(this.manufacturer, other.manufacturer) && - Objects.equals(this.hwVersion, other.hwVersion) && - Objects.equals(this.swVersion, other.swVersion) && - Objects.equals(this.serialNumber, other.serialNumber); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("id", id) - .add("type", type) - .add("manufacturer", manufacturer) - .add("hwVersion", hwVersion) - .add("swVersion", swVersion) - .add("serialNumber", serialNumber) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultDisjointPath.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultDisjointPath.java deleted file mode 100644 index 4895964f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultDisjointPath.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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.net; - -import org.onosproject.net.provider.ProviderId; - -import java.util.List; -import java.util.Objects; -import static com.google.common.collect.ImmutableSet.of; - -/** - * Default implementation of a network disjoint path pair. - */ -public class DefaultDisjointPath extends DefaultPath implements DisjointPath { - - private final DefaultPath path1; - private final DefaultPath path2; - - boolean usingPath1 = true; - - /** - * Creates a disjoint path pair from two default paths. - * - * @param providerId provider identity - * @param path1 primary path - * @param path2 backup path - */ - public DefaultDisjointPath(ProviderId providerId, DefaultPath path1, DefaultPath path2) { - super(providerId, path1.links(), path1.cost() + path2.cost()); - this.path1 = path1; - this.path2 = path2; - } - - @Override - public List<Link> links() { - if (usingPath1) { - return path1.links(); - } else { - return path2.links(); - } - } - - @Override - public double cost() { - if (usingPath1) { - return path1.cost(); - } - return path2.cost(); - } - - @Override - public Path primary() { - return path1; - } - - @Override - public Path backup() { - return path2; - } - - @Override - public int hashCode() { - return Objects.hash(of(path1, path2), src(), dst()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultDisjointPath) { - final DefaultDisjointPath other = (DefaultDisjointPath) obj; - return Objects.equals(this.path1, other.path1) && Objects.equals(this.path2, other.path2); - } - return false; - } - - @Override - public boolean useBackup() { - if (path2 == null || path2.links() == null) { - return false; - } - usingPath1 = !usingPath1; - return true; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultEdgeLink.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultEdgeLink.java deleted file mode 100644 index 67ceef7a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultEdgeLink.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2014 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.net; - -import org.onosproject.net.provider.ProviderId; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default edge link model implementation. - */ -public class DefaultEdgeLink extends DefaultLink implements EdgeLink { - - private final HostId hostId; - private final HostLocation hostLocation; - - /** - * Creates an edge link using the supplied information. - * - * @param providerId provider identity - * @param hostPoint host-side connection point - * @param hostLocation location where host attaches to the network - * @param isIngress true to indicate host-to-network direction; false - * for network-to-host direction - * @param annotations optional key/value annotations - */ - public DefaultEdgeLink(ProviderId providerId, ConnectPoint hostPoint, - HostLocation hostLocation, boolean isIngress, - Annotations... annotations) { - super(providerId, isIngress ? hostPoint : hostLocation, - isIngress ? hostLocation : hostPoint, Type.EDGE, annotations); - checkArgument(hostPoint.elementId() instanceof HostId, - "Host point does not refer to a host ID"); - this.hostId = (HostId) hostPoint.elementId(); - this.hostLocation = hostLocation; - } - - @Override - public HostId hostId() { - return hostId; - } - - @Override - public HostLocation hostLocation() { - return hostLocation; - } - - /** - * Creates a phantom edge link, to an unspecified end-station. This link - * does not represent any actually discovered link stored in the system. - * - * @param edgePort network edge port - * @param isIngress true to indicate host-to-network direction; false - * for network-to-host direction - * @return new phantom edge link - */ - public static DefaultEdgeLink createEdgeLink(ConnectPoint edgePort, - boolean isIngress) { - checkNotNull(edgePort, "Edge port cannot be null"); - HostLocation location = (edgePort instanceof HostLocation) ? - (HostLocation) edgePort : new HostLocation(edgePort, 0); - return new DefaultEdgeLink(ProviderId.NONE, - new ConnectPoint(HostId.NONE, PortNumber.P0), - location, isIngress); - } - - /** - * Creates a an edge link, to the specified end-station. - * - * @param host host - * @param isIngress true to indicate host-to-network direction; false - * for network-to-host direction - * @return new phantom edge link - */ - public static DefaultEdgeLink createEdgeLink(Host host, boolean isIngress) { - checkNotNull(host, "Host cannot be null"); - return new DefaultEdgeLink(ProviderId.NONE, - new ConnectPoint(host.id(), PortNumber.P0), - host.location(), isIngress); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultHost.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultHost.java deleted file mode 100644 index 557fa5c1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultHost.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2014 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.net; - -import org.onosproject.net.provider.ProviderId; -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * A basic implementation of a Host. - */ -public class DefaultHost extends AbstractElement implements Host { - - private final MacAddress mac; - private final VlanId vlan; - private final HostLocation location; - private final Set<IpAddress> ips; - - /** - * Creates an end-station host using the supplied information. - * - * @param providerId provider identity - * @param id host identifier - * @param mac host MAC address - * @param vlan host VLAN identifier - * @param location host location - * @param ips host IP addresses - * @param annotations optional key/value annotations - */ - public DefaultHost(ProviderId providerId, HostId id, MacAddress mac, - VlanId vlan, HostLocation location, Set<IpAddress> ips, - Annotations... annotations) { - super(providerId, id, annotations); - this.mac = mac; - this.vlan = vlan; - this.location = location; - this.ips = new HashSet<>(ips); - } - - @Override - public HostId id() { - return (HostId) id; - } - - @Override - public MacAddress mac() { - return mac; - } - - @Override - public Set<IpAddress> ipAddresses() { - return Collections.unmodifiableSet(ips); - } - - @Override - public HostLocation location() { - return location; - } - - @Override - public VlanId vlan() { - return vlan; - } - - @Override - public int hashCode() { - return Objects.hash(id, mac, vlan, location); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultHost) { - final DefaultHost other = (DefaultHost) obj; - return Objects.equals(this.id, other.id) && - Objects.equals(this.mac, other.mac) && - Objects.equals(this.vlan, other.vlan) && - Objects.equals(this.location, other.location) && - Objects.equals(this.ipAddresses(), other.ipAddresses()); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("id", id) - .add("mac", mac) - .add("vlan", vlan) - .add("location", location) - .add("ipAddresses", ips) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultLink.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultLink.java deleted file mode 100644 index 4d1ca6de..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultLink.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 2014 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.net; - -import org.onosproject.net.provider.ProviderId; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static org.onosproject.net.Link.State.ACTIVE; - -/** - * Default infrastructure link model implementation. - */ -public class DefaultLink extends AbstractModel implements Link { - - private final ConnectPoint src; - private final ConnectPoint dst; - private final Type type; - private final State state; - private final boolean isDurable; - - /** - * Creates an active infrastructure link using the supplied information. - * - * @param providerId provider identity - * @param src link source - * @param dst link destination - * @param type link type - * @param annotations optional key/value annotations - */ - public DefaultLink(ProviderId providerId, ConnectPoint src, ConnectPoint dst, - Type type, Annotations... annotations) { - this(providerId, src, dst, type, ACTIVE, false, annotations); - } - - /** - * Creates an infrastructure link using the supplied information. - * Links marked as durable will remain in the inventory when a vanish - * message is received and instead will be marked as inactive. - * - * @param providerId provider identity - * @param src link source - * @param dst link destination - * @param type link type - * @param state link state - * @param isDurable indicates if the link is to be considered durable - * @param annotations optional key/value annotations - */ - public DefaultLink(ProviderId providerId, ConnectPoint src, ConnectPoint dst, - Type type, State state, - boolean isDurable, Annotations... annotations) { - super(providerId, annotations); - this.src = src; - this.dst = dst; - this.type = type; - this.state = state; - this.isDurable = isDurable; - } - - @Override - public ConnectPoint src() { - return src; - } - - @Override - public ConnectPoint dst() { - return dst; - } - - @Override - public Type type() { - return type; - } - - @Override - public State state() { - return state; - } - - @Override - public boolean isDurable() { - return isDurable; - } - - // Note: Durability & state are purposefully omitted form equality & hashCode. - - @Override - public int hashCode() { - return Objects.hash(src, dst, type); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultLink) { - final DefaultLink other = (DefaultLink) obj; - return Objects.equals(this.src, other.src) && - Objects.equals(this.dst, other.dst) && - Objects.equals(this.type, other.type); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("src", src) - .add("dst", dst) - .add("type", type) - .add("state", state) - .add("durable", isDurable) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultOchSignalComparator.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultOchSignalComparator.java deleted file mode 100644 index e605dcfd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultOchSignalComparator.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.net; - -import java.util.Comparator; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Comparator implementation for OchSignal. Assumes identical grid type and channel spacing. - */ -public class DefaultOchSignalComparator implements Comparator<OchSignal> { - @Override - public int compare(OchSignal o1, OchSignal o2) { - checkNotNull(o1.gridType()); - checkNotNull(o1.channelSpacing()); - - checkArgument(o1.gridType().equals(o2.gridType())); - checkArgument(o1.channelSpacing().equals(o2.channelSpacing())); - - return o1.spacingMultiplier() * o1.slotGranularity() - o2.spacingMultiplier() * o2.slotGranularity(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultPath.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultPath.java deleted file mode 100644 index 2da2463a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultPath.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright 2014 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.net; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; -import org.onosproject.net.provider.ProviderId; - -import java.util.List; -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default implementation of a network path. - */ -public class DefaultPath extends DefaultLink implements Path { - - private final List<Link> links; - private final double cost; - - /** - * Creates a path from the specified source and destination using the - * supplied list of links. - * - * @param providerId provider identity - * @param links contiguous links that comprise the path - * @param cost unit-less path cost - * @param annotations optional key/value annotations - */ - public DefaultPath(ProviderId providerId, List<Link> links, double cost, - Annotations... annotations) { - super(providerId, source(links), destination(links), Type.INDIRECT, annotations); - this.links = ImmutableList.copyOf(links); - this.cost = cost; - } - - @Override - public List<Link> links() { - return links; - } - - @Override - public double cost() { - return cost; - } - - // Returns the source of the first link. - private static ConnectPoint source(List<Link> links) { - checkNotNull(links, "List of path links cannot be null"); - checkArgument(!links.isEmpty(), "List of path links cannot be empty"); - return links.get(0).src(); - } - - // Returns the destination of the last link. - private static ConnectPoint destination(List<Link> links) { - checkNotNull(links, "List of path links cannot be null"); - checkArgument(!links.isEmpty(), "List of path links cannot be empty"); - return links.get(links.size() - 1).dst(); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("src", src()) - .add("dst", dst()) - .add("type", type()) - .add("state", state()) - .add("durable", isDurable()) - .add("links", links) - .add("cost", cost) - .toString(); - } - - @Override - public int hashCode() { - return links.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultPath) { - final DefaultPath other = (DefaultPath) obj; - return Objects.equals(this.links, other.links); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultPort.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultPort.java deleted file mode 100644 index a6b8441a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DefaultPort.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2014 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.net; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Default port implementation. - */ -public class DefaultPort extends AbstractAnnotated implements Port { - - /** Default port speed in Mbps. */ - public static final long DEFAULT_SPEED = 1_000; - - private final Element element; - private final PortNumber number; - private final boolean isEnabled; - private final Type type; - private final long portSpeed; - - /** - * Creates a network element attributed to the specified provider. - * - * @param element parent network element - * @param number port number - * @param isEnabled indicator whether the port is up and active - * @param annotations optional key/value annotations - */ - public DefaultPort(Element element, PortNumber number, boolean isEnabled, - Annotations... annotations) { - this(element, number, isEnabled, Type.COPPER, DEFAULT_SPEED, annotations); - } - - /** - * Creates a network element attributed to the specified provider. - * - * @param element parent network element - * @param number port number - * @param isEnabled indicator whether the port is up and active - * @param type port type - * @param portSpeed port speed in Mbs - * @param annotations optional key/value annotations - */ - public DefaultPort(Element element, PortNumber number, boolean isEnabled, - Type type, long portSpeed, Annotations... annotations) { - super(annotations); - this.element = element; - this.number = number; - this.isEnabled = isEnabled; - this.type = type; - this.portSpeed = portSpeed; - } - - @Override - public Element element() { - return element; - } - - @Override - public PortNumber number() { - return number; - } - - @Override - public boolean isEnabled() { - return isEnabled; - } - - @Override - public Type type() { - return type; - } - - @Override - public long portSpeed() { - return portSpeed; - } - - @Override - public int hashCode() { - return Objects.hash(number, isEnabled, type, portSpeed, annotations()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultPort) { - final DefaultPort other = (DefaultPort) obj; - return Objects.equals(this.element.id(), other.element.id()) && - Objects.equals(this.number, other.number) && - Objects.equals(this.isEnabled, other.isEnabled) && - Objects.equals(this.type, other.type) && - Objects.equals(this.portSpeed, other.portSpeed) && - Objects.equals(this.annotations(), other.annotations()); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("element", element.id()) - .add("number", number) - .add("isEnabled", isEnabled) - .add("type", type) - .add("portSpeed", portSpeed) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Description.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Description.java deleted file mode 100644 index c01af549..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Description.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2014 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.net; - -/** - * Base abstraction of a piece of information about network elements. - */ -public interface Description extends Annotated { - - @Override - SparseAnnotations annotations(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Device.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Device.java deleted file mode 100644 index ffbf7f96..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Device.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2014-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.net; - -import org.onlab.packet.ChassisId; - -/** - * Representation of a network infrastructure device. - */ -public interface Device extends Element { - - /** - * Coarse classification of the type of the infrastructure device. - */ - enum Type { - SWITCH, ROUTER, ROADM, OTN, ROADM_OTN, FIREWALL, BALANCER, IPS, IDS, CONTROLLER, - VIRTUAL, FIBER_SWITCH, MICROWAVE, OTHER - } - - /** - * Returns the device identifier. - * - * @return device id - */ - @Override - DeviceId id(); - - /** - * Returns the type of the infrastructure device. - * - * @return type of the device - */ - Type type(); - - /** - * Returns the device manufacturer name. - * - * @return manufacturer name - */ - String manufacturer(); - - /** - * Returns the device hardware version. - * - * @return hardware version - */ - String hwVersion(); - - /** - * Returns the device software version. - * - * @return software version - */ - String swVersion(); - - /** - * Returns the device serial number. - * - * @return serial number - */ - String serialNumber(); - - /** - * Returns the device chassis id. - * - * @return chassis id - */ - ChassisId chassisId(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DeviceId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DeviceId.java deleted file mode 100644 index e2c1214f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DeviceId.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2014 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.net; - -import java.net.URI; -import java.util.Objects; - -/** - * Immutable representation of a device identity. - */ -public final class DeviceId extends ElementId { - - /** - * Represents either no device, or an unspecified device. - */ - public static final DeviceId NONE = deviceId("none:none"); - - private final URI uri; - private final String str; - - // Public construction is prohibited - private DeviceId(URI uri) { - this.uri = uri; - this.str = uri.toString().toLowerCase(); - } - - - // Default constructor for serialization - protected DeviceId() { - this.uri = null; - this.str = null; - } - - /** - * Creates a device id using the supplied URI. - * - * @param uri device URI - * @return DeviceId - */ - public static DeviceId deviceId(URI uri) { - return new DeviceId(uri); - } - - /** - * Creates a device id using the supplied URI string. - * - * @param string device URI string - * @return DeviceId - */ - public static DeviceId deviceId(String string) { - return deviceId(URI.create(string)); - } - - /** - * Returns the backing URI. - * - * @return backing URI - */ - public URI uri() { - return uri; - } - - @Override - public int hashCode() { - return str.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DeviceId) { - final DeviceId that = (DeviceId) obj; - return this.getClass() == that.getClass() && - Objects.equals(this.str, that.str); - } - return false; - } - - @Override - public String toString() { - return str; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DisjointPath.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/DisjointPath.java deleted file mode 100644 index 3d54cbfc..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/DisjointPath.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.net; - - -/** - * Representation of a contiguous directed path in a network. Path comprises - * of a sequence of links, where adjacent links must share the same device, - * meaning that destination of the source of one link must coincide with the - * destination of the previous link. - */ -public interface DisjointPath extends Path { - - /** - * Uses backup path. - * - * @return boolean corresponding to whether request to use - * backup was successful. - */ - boolean useBackup(); - - /** - * Gets primary path. - * - * @return primary path - */ - Path primary(); - - /** - * Gets secondary path. - * - * @return secondary path - */ - Path backup(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/EdgeLink.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/EdgeLink.java deleted file mode 100644 index 73b916b2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/EdgeLink.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2014 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.net; - -/** - * Abstraction of a link between an end-station host and the network - * infrastructure. - */ -public interface EdgeLink extends Link { - - /** - * Returns the host identification. - * - * @return host identifier - */ - HostId hostId(); - - /** - * Returns the connection point where the host attaches to the - * network infrastructure. - * - * @return host location point - */ - HostLocation hostLocation(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Element.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Element.java deleted file mode 100644 index 6cdab9e4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Element.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2014 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.net; - -/** - * Base abstraction of a network element, i.e. an infrastructure device or an end-station host. - */ -public interface Element extends Annotated, Provided { - - /** - * Returns the network element identifier. - * - * @return element identifier - */ - ElementId id(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/ElementId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/ElementId.java deleted file mode 100644 index 87defb26..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/ElementId.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2014-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.net; - -/** - * Immutable representation of a network element identity. - */ -public abstract class ElementId implements NetworkResource { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/EncapsulationType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/EncapsulationType.java deleted file mode 100644 index 63ff46d3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/EncapsulationType.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2014-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.net; - -public enum EncapsulationType { - /** - * Indicates an MPLS encapsulation. - */ - MPLS, - /** - * Indicates a VLAN encapsulation. - */ - VLAN, -}; - - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/GridType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/GridType.java deleted file mode 100644 index 8e9bc5b9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/GridType.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.net; - -/** - * Represents type of wavelength grid. - * - * <p> - * See Open Networking Foundation "Optical Transport Protocol Extensions Version 1.0". - * </p> - */ -public enum GridType { - DWDM, // Dense Wavelength Division Multiplexing - CWDM, // Coarse WDM - FLEX // Flex Grid -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Host.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Host.java deleted file mode 100644 index 646f2283..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Host.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2014 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.net; - -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; - -import java.util.Set; - -/** - * Abstraction of an end-station host on the network, essentially a NIC. - */ -public interface Host extends Element { - - /** - * Host identification. - * - * @return host id - */ - @Override - HostId id(); - - /** - * Returns the host MAC address. - * - * @return mac address - */ - MacAddress mac(); - - /** - * Returns the VLAN ID tied to this host. - * - * @return VLAN ID value - */ - VlanId vlan(); - - /** - * Returns set of IP addresses currently bound to the host MAC address. - * - * @return set of IP addresses; empty if no IP address is bound - */ - Set<IpAddress> ipAddresses(); - - /** - * Returns the most recent host location where the host attaches to the - * network edge. - * - * @return host location - */ - HostLocation location(); - - // TODO: explore capturing list of recent locations to aid in mobility - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/HostId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/HostId.java deleted file mode 100644 index 3e0d2b24..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/HostId.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright 2014 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.net; - -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkArgument; - -/** - * Immutable representation of a host identity. - */ -public final class HostId extends ElementId { - - /** - * Represents either no host, or an unspecified host; used for creating - * open ingress/egress edge links. - */ - public static final HostId NONE = new HostId(MacAddress.ZERO, VlanId.NONE); - - private static final int MAC_LENGTH = 17; - private static final int MIN_ID_LENGTH = 19; - - private final MacAddress mac; - private final VlanId vlanId; - - // Public construction is prohibited - private HostId(MacAddress mac, VlanId vlanId) { - this.mac = mac; - this.vlanId = vlanId; - } - - // Default constructor for serialization - private HostId() { - this.mac = null; - this.vlanId = null; - } - - /** - * Returns the host MAC address. - * - * @return MAC address - */ - public MacAddress mac() { - return mac; - } - - /** - * Returns the host vlan Id. - * - * @return vlan Id - */ - public VlanId vlanId() { - return vlanId; - } - - /** - * Creates a device id using the supplied ID string. - * - * @param string device URI string - * @return host identifier - */ - public static HostId hostId(String string) { - checkArgument(string.length() >= MIN_ID_LENGTH, - "Host ID must be at least %s characters", MIN_ID_LENGTH); - MacAddress mac = MacAddress.valueOf(string.substring(0, MAC_LENGTH)); - VlanId vlanId = VlanId.vlanId(Short.parseShort(string.substring(MAC_LENGTH + 1))); - return new HostId(mac, vlanId); - } - - /** - * Creates a device id using the supplied MAC & VLAN ID. - * - * @param mac mac address - * @param vlanId vlan identifier - * @return host identifier - */ - public static HostId hostId(MacAddress mac, VlanId vlanId) { - return new HostId(mac, vlanId); - } - - /** - * Creates a device id using the supplied MAC and default VLAN. - * - * @param mac mac address - * @return host identifier - */ - public static HostId hostId(MacAddress mac) { - return hostId(mac, VlanId.vlanId(VlanId.UNTAGGED)); - } - - public String toString() { - return mac + "/" + vlanId; - } - - @Override - public int hashCode() { - return Objects.hash(mac, vlanId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof HostId) { - final HostId other = (HostId) obj; - return Objects.equals(this.mac, other.mac) && - Objects.equals(this.vlanId, other.vlanId); - } - return false; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/HostLocation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/HostLocation.java deleted file mode 100644 index b0553a2b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/HostLocation.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2014 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.net; - -import static org.onosproject.net.PortNumber.P0; - -/** - * Representation of a network edge location where an end-station host is - * connected. - */ -public class HostLocation extends ConnectPoint { - - /** - * Represents a no location or an unknown location. - */ - public static final HostLocation NONE = new HostLocation(DeviceId.NONE, P0, 0L); - - // Note that time is explicitly excluded from the notion of equality. - private final long time; - - /** - * Creates a new host location using the supplied device & port. - * - * @param deviceId device identity - * @param portNumber device port number - * @param time time when detected, in millis since start of epoch - */ - public HostLocation(DeviceId deviceId, PortNumber portNumber, long time) { - super(deviceId, portNumber); - this.time = time; - } - - /** - * Creates a new host location derived from the supplied connection point. - * - * @param connectPoint connection point - * @param time time when detected, in millis since start of epoch - */ - public HostLocation(ConnectPoint connectPoint, long time) { - super(connectPoint.deviceId(), connectPoint.port()); - this.time = time; - } - - /** - * Returns the time when the location was established, given in - * milliseconds since start of epoch. - * - * @return time in milliseconds since start of epoch - */ - public long time() { - return time; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/IndexedLambda.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/IndexedLambda.java deleted file mode 100644 index 6b5fa652..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/IndexedLambda.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * 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.net; - -import com.google.common.base.MoreObjects; - -/** - * Implementation of Lambda simply designated by an index number of wavelength. - */ -public class IndexedLambda implements Lambda { - - private final long index; - - /** - * Creates an instance representing the wavelength specified by the given index number. - * It is recommended to use {@link Lambda#indexedLambda(long)} unless you want to use the - * concrete type, IndexedLambda, directly. - * - * @param index index number of wavelength - */ - public IndexedLambda(long index) { - this.index = index; - } - - /** - * Returns the index number of lambda. - * - * @return the index number of lambda - */ - public long index() { - return index; - } - - @Override - public int hashCode() { - return Long.hashCode(index); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof IndexedLambda)) { - return false; - } - - final IndexedLambda that = (IndexedLambda) obj; - return this.index == that.index; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("lambda", index) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/IpElementId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/IpElementId.java deleted file mode 100644 index aba8ae47..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/IpElementId.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.net; - -import java.util.Objects; -import org.onlab.packet.IpAddress; -import com.google.common.base.MoreObjects; - -/** - * Represent for a Element ID using ip address. - */ -public final class IpElementId extends ElementId { - - private final IpAddress ipAddress; - - /** - * Public construction is prohibited. - * @param ipAddress ip address - */ - private IpElementId(IpAddress ipAddress) { - this.ipAddress = ipAddress; - } - - /** - * Create a IP Element ID. - * @param ipAddress IP address - * @return IpElementId - */ - public static IpElementId ipElement(IpAddress ipAddress) { - return new IpElementId(ipAddress); - } - - /** - * Returns the ip address. - * - * @return ipAddress - */ - public IpAddress ipAddress() { - return ipAddress; - } - - @Override - public int hashCode() { - return Objects.hash(ipAddress); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IpElementId) { - final IpElementId other = (IpElementId) obj; - return Objects.equals(this.ipAddress, other.ipAddress); - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()).add("ipAddress", ipAddress).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Lambda.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Lambda.java deleted file mode 100644 index 47d0d5f0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Lambda.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.net; - -/** - * Abstraction of wavelength. Currently, this is just a marker interface - */ -public interface Lambda { - /** - * Create an Lambda instance with the specified wavelength index number. - * - * @param lambda index number - * @return an instance - */ - static Lambda indexedLambda(long lambda) { - return new IndexedLambda(lambda); - } - - /** - * Creates a Lambda instance with the specified arguments. - * - * @param gridType grid type - * @param channelSpacing channel spacing - * @param spacingMultiplier channel spacing multiplier - * @param slotGranularity slot width granularity - * @return new lambda with specified arguments - */ - static Lambda ochSignal(GridType gridType, ChannelSpacing channelSpacing, - int spacingMultiplier, int slotGranularity) { - return new OchSignal(gridType, channelSpacing, spacingMultiplier, slotGranularity); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Link.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Link.java deleted file mode 100644 index 7541f751..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Link.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2014 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.net; - -/** - * Abstraction of a network infrastructure link. - */ -public interface Link extends Annotated, Provided, NetworkResource { - - /** - * Coarse representation of the link type. - */ - enum Type { - /** - * Signifies that this is a direct single-segment link. - */ - DIRECT, - - /** - * Signifies that this link is potentially comprised from multiple - * underlying segments or hops, and as such should be used to tag - * links traversing optical paths, tunnels or intervening 'dark' - * switches. - */ - INDIRECT, - - /** - * Signifies that this link is an edge, i.e. host link. - */ - EDGE, - - /** - * Signifies that this link represents a logical link backed by - * some form of a tunnel, e.g., GRE, MPLS, ODUk, OCH. - */ - TUNNEL, - - /** - * Signifies that this link is realized by fiber (either single channel or WDM). - */ - OPTICAL, - - /** - * Signifies that this link is a virtual link or a pseudo-wire. - */ - VIRTUAL - } - - /** - * Representation of the link state, which applies primarily only to - * configured durable links, i.e. those that need to remain present, - * but instead be marked as inactive. - */ - enum State { - /** - * Signifies that a link is currently active. - */ - ACTIVE, - - /** - * Signifies that a link is currently active. - */ - INACTIVE - } - - /** - * Returns the link source connection point. - * - * @return link source connection point - */ - ConnectPoint src(); - - /** - * Returns the link destination connection point. - * - * @return link destination connection point - */ - ConnectPoint dst(); - - /** - * Returns the link type. - * - * @return link type - */ - Type type(); - - /** - * Returns the link state. - * - * @return link state - */ - State state(); - - /** - * Indicates if the link is to be considered durable. - * - * @return true if the link is durable - */ - boolean isDurable(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/LinkKey.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/LinkKey.java deleted file mode 100644 index 9cb66492..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/LinkKey.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2014 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.net; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Objects; - -import com.google.common.base.MoreObjects; - -// TODO Consider renaming. -// it's an identifier for a Link, but it's not ElementId, so not using LinkId. - -/** - * Immutable representation of a link identity. - */ -public final class LinkKey { - - private final ConnectPoint src; - private final ConnectPoint dst; - - /** - * Returns source connection point. - * - * @return source connection point - */ - public ConnectPoint src() { - return src; - } - - /** - * Returns destination connection point. - * - * @return destination connection point - */ - public ConnectPoint dst() { - return dst; - } - - /** - * Creates a link identifier with source and destination connection point. - * - * @param src source connection point - * @param dst destination connection point - */ - private LinkKey(ConnectPoint src, ConnectPoint dst) { - this.src = checkNotNull(src); - this.dst = checkNotNull(dst); - } - - /** - * Creates a link identifier with source and destination connection point. - * - * @param src source connection point - * @param dst destination connection point - * @return a link identifier - */ - public static LinkKey linkKey(ConnectPoint src, ConnectPoint dst) { - return new LinkKey(src, dst); - } - - /** - * Creates a link identifier for the specified link. - * - * @param link link descriptor - * @return a link identifier - */ - public static LinkKey linkKey(Link link) { - return new LinkKey(link.src(), link.dst()); - } - - @Override - public int hashCode() { - return Objects.hash(src, dst); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof LinkKey) { - final LinkKey other = (LinkKey) obj; - return Objects.equals(this.src, other.src) && - Objects.equals(this.dst, other.dst); - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("src", src) - .add("dst", dst) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/MastershipRole.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/MastershipRole.java deleted file mode 100644 index 78f65864..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/MastershipRole.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2014 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.net; - -/** - * Representation of a relationship role of a controller instance to a device - * or a region of network environment. - */ -public enum MastershipRole { - - /** - * Represents a relationship where the controller instance is the master - * to a device or a region of network environment. - */ - MASTER, - - /** - * Represents a relationship where the controller instance is the standby, - * i.e. potential master to a device or a region of network environment. - */ - STANDBY, - - /** - * Represents that the controller instance is not eligible to be the master - * to a device or a region of network environment. - */ - NONE - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/MutableAnnotations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/MutableAnnotations.java deleted file mode 100644 index 9b7f328e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/MutableAnnotations.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.net; - -/** - * Represents an mutable set of simple key/value string annotations. - */ -public interface MutableAnnotations extends Annotations { - - /** - * Returns the value of the specified annotation. - * - * @param key annotation key - * @param value annotation value - * @return self - */ - MutableAnnotations set(String key, String value); - - /** - * Clears the specified keys or the all keys if none were specified. - * - * @param keys keys to be cleared - * @return self - */ - MutableAnnotations clear(String... keys); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NetTools.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/NetTools.java deleted file mode 100644 index fc561884..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NetTools.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.net; - -/** - * Networking domain tools. - */ -public final class NetTools { - - private NetTools() { - } - - /** - * Converts DPIDs of the form xx:xx:xx:xx:xx:xx:xx to OpenFlow provider - * device URIs. The is helpful for converting DPIDs coming from configuration - * or REST to URIs that the core understands. - * - * @param dpid the DPID string to convert - * @return the URI string for this device - */ - public static String dpidToUri(String dpid) { - return "of:" + dpid.replace(":", ""); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NetworkResource.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/NetworkResource.java deleted file mode 100644 index 502208a0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NetworkResource.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2014 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.net; - -/** - * Representation of a network resource, e.g. a link, lambda, MPLS tag. - */ -public interface NetworkResource { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshContextHeader.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshContextHeader.java deleted file mode 100644 index 745b616f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshContextHeader.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.net; - -import java.util.Objects; - -import com.google.common.base.MoreObjects; - -/* - * Representation of NSH context header value - */ -public final class NshContextHeader { - - private final int nshContextHeader; - - /** - * Default constructor. - * - * @param nshContextHeader nsh context header value. - */ - private NshContextHeader(int nshContextHeader) { - this.nshContextHeader = nshContextHeader; - } - - /** - * Returns the NshContextHeader by setting its value. - * - * @param nshContextHeader nsh context header value. - * @return NshContextHeader - */ - public static NshContextHeader of(int nshContextHeader) { - return new NshContextHeader(nshContextHeader); - } - - - /** - * Returns nsh context header value. - * - * @return the nsh context header - */ - public int nshContextHeader() { - return nshContextHeader; - } - - - @Override - public int hashCode() { - return Objects.hash(nshContextHeader); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof NshContextHeader)) { - return false; - } - final NshContextHeader other = (NshContextHeader) obj; - return Objects.equals(this.nshContextHeader, other.nshContextHeader); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("nshContextHeader", nshContextHeader) - .toString(); - } -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshServiceIndex.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshServiceIndex.java deleted file mode 100644 index 7e0c914c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshServiceIndex.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.net; - -import java.util.Objects; - -import com.google.common.base.MoreObjects; - -/* - * Representation of NSH Service index - */ -public final class NshServiceIndex { - private static final short MASK = 0xFF; - private final short serviceIndex; - - /** - * Default constructor. - * - * @param serviceIndex nsh service index - */ - private NshServiceIndex(short serviceIndex) { - this.serviceIndex = (short) (serviceIndex & MASK); - } - - /** - * Returns the NshServiceIndex by setting its value. - * - * @param serviceIndex nsh service index - * @return NshServiceIndex - */ - public static NshServiceIndex of(short serviceIndex) { - return new NshServiceIndex(serviceIndex); - } - - - /** - * Returns nsh service index value. - * - * @return the nsh service index - */ - public short serviceIndex() { - return serviceIndex; - } - - - @Override - public int hashCode() { - return Objects.hash(serviceIndex); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof NshServiceIndex)) { - return false; - } - final NshServiceIndex other = (NshServiceIndex) obj; - return Objects.equals(this.serviceIndex, other.serviceIndex); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("serviceIndex", serviceIndex) - .toString(); - } -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshServicePathId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshServicePathId.java deleted file mode 100644 index 16fbc4e7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/NshServicePathId.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.net; - -import java.util.Objects; - -import com.google.common.base.MoreObjects; - -/* - * Representation of NSH Service path Identifier - */ -public final class NshServicePathId { - - private final int servicePathId; - - /** - * Default constructor. - * - * @param servicePathId nsh service path identifier - */ - private NshServicePathId(int servicePathId) { - this.servicePathId = servicePathId; - } - - /** - * Returns the NshServicePathId by setting its value. - * - * @param servicePathId nsh service path identifier - * @return NshServicePathId - */ - public static NshServicePathId of(int servicePathId) { - return new NshServicePathId(servicePathId); - } - - - /** - * Returns nsh context service path identifier. - * - * @return the nsh context service path id - */ - public int servicePathId() { - return servicePathId; - } - - - @Override - public int hashCode() { - return Objects.hash(servicePathId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof NshServicePathId)) { - return false; - } - final NshServicePathId other = (NshServicePathId) obj; - return Objects.equals(this.servicePathId, other.servicePathId); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("servicePathId", servicePathId) - .toString(); - } -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchPort.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchPort.java deleted file mode 100644 index 94d4d321..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchPort.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * 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.net; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Implementation of OCh port (Optical Channel). - * Also referred to as a line side port (L-port) or narrow band port. - * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)" - */ -public class OchPort extends DefaultPort { - - private final OduSignalType signalType; - private final boolean isTunable; - private final OchSignal lambda; - - /** - * Creates an OCh port in the specified network element. - * - * @param element parent network element - * @param number port number - * @param isEnabled port enabled state - * @param signalType ODU signal type - * @param isTunable tunable wavelength capability - * @param lambda OCh signal - * @param annotations optional key/value annotations - */ - public OchPort(Element element, PortNumber number, boolean isEnabled, OduSignalType signalType, - boolean isTunable, OchSignal lambda, Annotations... annotations) { - super(element, number, isEnabled, Type.OCH, 0, annotations); - this.signalType = signalType; - this.isTunable = isTunable; - this.lambda = checkNotNull(lambda); - } - - /** - * Returns ODU signal type. - * - * @return ODU signal type - */ - public OduSignalType signalType() { - return signalType; - } - - /** - * Returns true if port is wavelength tunable. - * - * @return tunable wavelength capability - */ - public boolean isTunable() { - return isTunable; - } - - /** - * Returns OCh signal. - * - * @return OCh signal - */ - public OchSignal lambda() { - return lambda; - } - - @Override - public int hashCode() { - return Objects.hash(number(), isEnabled(), type(), signalType, isTunable, lambda, annotations()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - // Subclass is considered as a change of identity, hence equals() will return false if class type don't match - if (obj != null && getClass() == obj.getClass()) { - final OchPort other = (OchPort) obj; - return Objects.equals(this.element().id(), other.element().id()) && - Objects.equals(this.number(), other.number()) && - Objects.equals(this.isEnabled(), other.isEnabled()) && - Objects.equals(this.signalType, other.signalType) && - Objects.equals(this.isTunable, other.isTunable) && - Objects.equals(this.lambda, other.lambda) && - Objects.equals(this.annotations(), other.annotations()); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("element", element().id()) - .add("number", number()) - .add("isEnabled", isEnabled()) - .add("type", type()) - .add("signalType", signalType) - .add("isTunable", isTunable) - .add("lambda", lambda) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchSignal.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchSignal.java deleted file mode 100644 index 3adc9086..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchSignal.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * 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.net; - -import com.google.common.base.MoreObjects; -import org.onlab.util.Frequency; -import org.onlab.util.Spectrum; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Implementation of Lambda representing OCh (Optical Channel) Signal. - * - * <p> - * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)". - * </p> - */ -public class OchSignal implements Lambda { - - public static final Frequency FLEX_GRID_SLOT = Frequency.ofGHz(12.5); - private static final GridType DEFAULT_OCH_GRIDTYPE = GridType.DWDM; - private static final ChannelSpacing DEFAULT_CHANNEL_SPACING = ChannelSpacing.CHL_50GHZ; - - - private final GridType gridType; - private final ChannelSpacing channelSpacing; - // Frequency = 193.1 THz + spacingMultiplier * channelSpacing - private final int spacingMultiplier; - // Slot width = slotGranularity * 12.5 GHz - private final int slotGranularity; - - /** - * Creates an instance with the specified arguments. - * It it recommended to use {@link Lambda#ochSignal(GridType, ChannelSpacing, int, int)} - * unless you want to use the concrete type, OchSignal, directly. - * - * @param gridType grid type - * @param channelSpacing channel spacing - * @param spacingMultiplier channel spacing multiplier - * @param slotGranularity slot width granularity - */ - public OchSignal(GridType gridType, ChannelSpacing channelSpacing, - int spacingMultiplier, int slotGranularity) { - this.gridType = checkNotNull(gridType); - this.channelSpacing = checkNotNull(channelSpacing); - // Negative values are permitted for spacingMultiplier - this.spacingMultiplier = spacingMultiplier; - checkArgument(slotGranularity > 0, "slotGranularity must be larger than 0, received %s", slotGranularity); - this.slotGranularity = slotGranularity; - } - - /** - * Create OCh signal from channel number. - * - * @param channel channel number - * @param maxFrequency maximum frequency - * @param grid grid spacing frequency - */ - public OchSignal(int channel, Frequency maxFrequency, Frequency grid) { - // Calculate center frequency - Frequency centerFrequency = maxFrequency.subtract(grid.multiply(channel - 1)); - - this.gridType = DEFAULT_OCH_GRIDTYPE; - this.channelSpacing = DEFAULT_CHANNEL_SPACING; - this.spacingMultiplier = (int) (centerFrequency.subtract(Spectrum.CENTER_FREQUENCY).asHz() / grid.asHz()); - this.slotGranularity = (int) Math.round((double) grid.asHz() / ChannelSpacing.CHL_12P5GHZ.frequency().asHz()); - } - - public OchSignal(Frequency centerFrequency, ChannelSpacing channelSpacing, int slotGranularity) { - this.gridType = DEFAULT_OCH_GRIDTYPE; - this.channelSpacing = channelSpacing; - this.spacingMultiplier = (int) Math.round((double) centerFrequency. - subtract(Spectrum.CENTER_FREQUENCY).asHz() / channelSpacing().frequency().asHz()); - this.slotGranularity = slotGranularity; - } - - /** - * Returns grid type. - * - * @return grid type - */ - public GridType gridType() { - return gridType; - } - - /** - * Returns channel spacing. - * - * @return channel spacing - */ - public ChannelSpacing channelSpacing() { - return channelSpacing; - } - - /** - * Returns spacing multiplier. - * - * @return spacing multiplier - */ - public int spacingMultiplier() { - return spacingMultiplier; - } - - /** - * Returns slow width granularity. - * - * @return slow width granularity - */ - public int slotGranularity() { - return slotGranularity; - } - - /** - * Returns central frequency in MHz. - * - * @return frequency in MHz - */ - public Frequency centralFrequency() { - return Spectrum.CENTER_FREQUENCY.add(channelSpacing().frequency().multiply(spacingMultiplier)); - } - - /** - * Returns slot width. - * - * @return slot width - */ - public Frequency slotWidth() { - return FLEX_GRID_SLOT.multiply(slotGranularity); - } - - @Override - public int hashCode() { - return Objects.hash(gridType, channelSpacing, spacingMultiplier, slotGranularity); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof OchSignal)) { - return false; - } - final OchSignal other = (OchSignal) obj; - return Objects.equals(this.gridType, other.gridType) - && Objects.equals(this.channelSpacing, other.channelSpacing) - && Objects.equals(this.spacingMultiplier, other.spacingMultiplier) - && Objects.equals(this.slotGranularity, other.slotGranularity); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("gridType", gridType) - .add("channelSpacing", channelSpacing) - .add("spacingMultiplier", spacingMultiplier) - .add("slotGranularity", slotGranularity) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchSignalType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchSignalType.java deleted file mode 100644 index 9caf3f34..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OchSignalType.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.net; - -/** - * Represents OCh (Optical Channel) signal type defined in - * Open Networking Foundation "Optical Transport Protocol Extensions Version 1.0". - */ -public enum OchSignalType { - /** - * Represents fixed grid. - */ - FIXED_GRID, - - /** - * Represents flex grid. - */ - FLEX_GRID -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduCltPort.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduCltPort.java deleted file mode 100644 index f51393a4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduCltPort.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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.net; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of ODU client port (Optical channel Data Unit). - * Also referred to as a T-port or wide band port. - * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)" - */ - -public class OduCltPort extends DefaultPort { - - public enum SignalType { - CLT_1GBE, - CLT_10GBE, - CLT_40GBE, - CLT_100GBE - } - - private final SignalType signalType; - - - /** - * Creates an ODU client port in the specified network element. - * - * @param element parent network element - * @param number port number - * @param isEnabled port enabled state - * @param signalType ODU client signal type - * @param annotations optional key/value annotations - */ - public OduCltPort(Element element, PortNumber number, boolean isEnabled, - SignalType signalType, Annotations... annotations) { - super(element, number, isEnabled, Type.ODUCLT, 0, annotations); - this.signalType = signalType; - } - - /** - * Returns ODU client signal type. - * - * @return ODU client signal type - */ - public SignalType signalType() { - return signalType; - } - - @Override - public int hashCode() { - return Objects.hash(number(), isEnabled(), type(), signalType, annotations()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj != null && getClass() == obj.getClass()) { - final OduCltPort other = (OduCltPort) obj; - return Objects.equals(this.element().id(), other.element().id()) && - Objects.equals(this.number(), other.number()) && - Objects.equals(this.isEnabled(), other.isEnabled()) && - Objects.equals(this.signalType, other.signalType) && - Objects.equals(this.annotations(), other.annotations()); - } - return false; - } - - - @Override - public String toString() { - return toStringHelper(this) - .add("element", element().id()) - .add("number", number()) - .add("isEnabled", isEnabled()) - .add("type", type()) - .add("signalType", signalType) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduSignalId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduSignalId.java deleted file mode 100644 index e19a673d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduSignalId.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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.net; - -import static com.google.common.base.Preconditions.checkArgument; - -import java.util.Arrays; -import java.util.Objects; - -import org.onlab.util.HexString; - -import com.google.common.base.MoreObjects; -/** - * Implementation of ODU Signal ID. - * - * <p> - * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)". - * </p> - */ -public class OduSignalId { - - private final int tributaryPortNumber; // Tributary Port number - private final int tributarySlotLength; // Number of Tributary Slots included in tsmap - private final byte[] tributarySlotBitmap; // Tributary slot bitmap - - public static final int TRIBUTARY_SLOT_BITMAP_SIZE = 10; - - /** - * Creates an instance with the specified arguments. - * - * @param tributaryPortNumber tributary port number - * @param tributarySlotLen tributary slot len - * @param tributarySlotBitmap tributary slot bitmap - */ - public OduSignalId(int tributaryPortNumber, int tributarySlotLen, - byte[] tributarySlotBitmap) { - - checkArgument(tributaryPortNumber <= 80 , - "tributaryPortNumber %s must be <= 80 ", - tributaryPortNumber); - - checkArgument(tributarySlotBitmap.length == TRIBUTARY_SLOT_BITMAP_SIZE, - "number of elements in list " + HexString.toHexString(tributarySlotBitmap) - + " must be equal to " + TRIBUTARY_SLOT_BITMAP_SIZE); - - checkArgument(tributarySlotLen <= 80 , - "tributarySlotLen %s must be <= 80 ", - tributarySlotLen); - - this.tributaryPortNumber = tributaryPortNumber; - this.tributarySlotLength = tributarySlotLen; - this.tributarySlotBitmap = Arrays.copyOf(tributarySlotBitmap, tributarySlotBitmap.length); - } - - /** - * Returns the OduSignalId representing the specified parameters. - * - * @param tributaryPortNumber tributary port number - * @param tributarySlotLen tributary slot len - * @param tributarySlotBitmap tributary slot bitmap - * @return OduSignalId - */ - public static OduSignalId oduSignalId(int tributaryPortNumber, int tributarySlotLen, - byte[] tributarySlotBitmap) { - return new OduSignalId(tributaryPortNumber, tributarySlotLen, tributarySlotBitmap); - } - - - /** - * Returns tributary port number. - * - * @return the tributaryPortNumber - */ - public int tributaryPortNumber() { - return tributaryPortNumber; - } - - /** - * Returns tributary slot length. - * - * @return the tributarySlotLen - */ - public int tributarySlotLength() { - return tributarySlotLength; - } - - /** - * Returns tributary slot bitmap. - * - * @return the tributarySlotBitmap - */ - public byte[] tributarySlotBitmap() { - return Arrays.copyOf(tributarySlotBitmap, tributarySlotBitmap.length); - } - - @Override - public int hashCode() { - return Objects.hash(tributaryPortNumber, tributarySlotLength, Arrays.hashCode(tributarySlotBitmap)); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof OduSignalId)) { - return false; - } - final OduSignalId other = (OduSignalId) obj; - return Objects.equals(this.tributaryPortNumber, other.tributaryPortNumber) - && Objects.equals(this.tributarySlotLength, other.tributarySlotLength) - && Arrays.equals(tributarySlotBitmap, other.tributarySlotBitmap); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .omitNullValues() - .add("tributaryPortNumber", tributaryPortNumber) - .add("tributarySlotLength", tributarySlotLength) - .add("tributarySlotBitmap", HexString.toHexString(tributarySlotBitmap)) - .toString(); - } - -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduSignalType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduSignalType.java deleted file mode 100644 index 014c893b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OduSignalType.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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.net; - -/** - * Represents ODU (Optical channel Data Unit) signal type. - * - * <p> - * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)" and - * Open Networking Foundation "Optical Transport Protocol Extensions Version 1.0". - * </p> - */ -public enum OduSignalType { - ODU0, - ODU1, - ODU2, - ODU2e, - ODU3, - ODU4 -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OmsPort.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/OmsPort.java deleted file mode 100644 index d37fe75d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/OmsPort.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * 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.net; - -import org.onlab.util.Frequency; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of OMS port (Optical Multiplexing Section). - * Also referred to as a WDM port or W-port. - * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)" - * - * Assumes we only support fixed grid for now. - */ -public class OmsPort extends DefaultPort { - - private final Frequency minFrequency; // Minimum frequency - private final Frequency maxFrequency; // Maximum frequency - private final Frequency grid; // Grid spacing frequency - - - /** - * Creates an OMS port in the specified network element. - * - * @param element parent network element - * @param number port number - * @param isEnabled port enabled state - * @param minFrequency minimum frequency - * @param maxFrequency maximum frequency - * @param grid grid spacing frequency - * @param annotations optional key/value annotations - */ - public OmsPort(Element element, PortNumber number, boolean isEnabled, - Frequency minFrequency, Frequency maxFrequency, Frequency grid, Annotations... annotations) { - super(element, number, isEnabled, Type.OMS, 0, annotations); - this.minFrequency = minFrequency; - this.maxFrequency = maxFrequency; - this.grid = grid; - } - - /** - * Returns the total number of channels on the port. - * - * @return total number of channels - */ - public short totalChannels() { - Frequency diff = maxFrequency.subtract(minFrequency); - return (short) (diff.asHz() / (grid.asHz() + 1)); - } - - /** - * Returns the minimum frequency. - * - * @return minimum frequency - */ - public Frequency minFrequency() { - return minFrequency; - } - - /** - * Returns the maximum frequency. - * - * @return maximum frequency - */ - public Frequency maxFrequency() { - return maxFrequency; - } - - /** - * Returns the grid spacing frequency. - * - * @return grid spacing frequency - */ - public Frequency grid() { - return grid; - } - - @Override - public int hashCode() { - return Objects.hash(number(), isEnabled(), type(), - minFrequency, maxFrequency, grid, annotations()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj != null && getClass() == obj.getClass()) { - final OmsPort other = (OmsPort) obj; - return Objects.equals(this.element().id(), other.element().id()) && - Objects.equals(this.number(), other.number()) && - Objects.equals(this.isEnabled(), other.isEnabled()) && - Objects.equals(this.minFrequency, other.minFrequency) && - Objects.equals(this.maxFrequency, other.maxFrequency) && - Objects.equals(this.grid, other.grid) && - Objects.equals(this.annotations(), other.annotations()); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("element", element().id()) - .add("number", number()) - .add("isEnabled", isEnabled()) - .add("type", type()) - .add("minFrequency", minFrequency) - .add("maxFrequency", maxFrequency) - .add("grid", grid) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Path.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Path.java deleted file mode 100644 index c9c20c4c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Path.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2014 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.net; - -import java.util.List; - -/** - * Representation of a contiguous directed path in a network. Path comprises - * of a sequence of links, where adjacent links must share the same device, - * meaning that destination of the source of one link must coincide with the - * destination of the previous link. - */ -public interface Path extends Link { - - /** - * Returns sequence of links comprising the path. - * - * @return list of links - */ - List<Link> links(); - - /** - * Returns the path cost as a unit-less value. - * - * @return unit-less path cost - */ - double cost(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Port.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Port.java deleted file mode 100644 index d70b1e17..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Port.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2014 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.net; - - -/** - * Abstraction of a network port. - */ -public interface Port extends Annotated { - - /** Represents coarse port type classification. */ - enum Type { - /** - * Signifies copper-based connectivity. - */ - COPPER, - - /** - * Signifies optical fiber-based connectivity. - */ - FIBER, - - /** - * Signifies optical fiber-based packet port. - */ - PACKET, - - /** - * Signifies optical fiber-based optical tributary port (called T-port). - * The signal from the client side will be formed into a ITU G.709 (OTN) frame. - */ - ODUCLT, - - /** - * Signifies optical fiber-based Line-side port (called L-port). - */ - OCH, - - /** - * Signifies optical fiber-based WDM port (called W-port). - * Optical Multiplexing Section (See ITU G.709). - */ - OMS, - - /** - * Signifies virtual port. - */ - VIRTUAL - } - - /** - * Returns the parent network element to which this port belongs. - * - * @return parent network element - */ - Element element(); - - /** - * Returns the port number. - * - * @return port number - */ - PortNumber number(); - - /** - * Indicates whether or not the port is currently up and active. - * - * @return true if the port is operational - */ - boolean isEnabled(); - - /** - * Returns the port type. - * - * @return port type - */ - Type type(); - - /** - * Returns the current port speed in Mbps. - * - * @return current port speed - */ - long portSpeed(); - - // TODO: more attributes? -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/PortNumber.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/PortNumber.java deleted file mode 100644 index 8c9b1349..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/PortNumber.java +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright 2014-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.net; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import com.google.common.base.Supplier; -import com.google.common.base.Suppliers; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMap.Builder; -import com.google.common.primitives.UnsignedLongs; - -/** - * Representation of a port number. - */ -public final class PortNumber { - - public static final PortNumber P0 = portNumber(0); - - // TODO: revisit the max and the logical port value assignments - - static final long MAX_NUMBER = (2L * Integer.MAX_VALUE) + 1; - - static final long IN_PORT_NUMBER = -8L; - static final long TABLE_NUMBER = -7L; - static final long NORMAL_NUMBER = -6L; - static final long FLOOD_NUMBER = -5L; - static final long ALL_NUMBER = -4L; - static final long LOCAL_NUMBER = -2L; - static final long CONTROLLER_NUMBER = -3L; - - /** - * Logical PortNumbers. - */ - public static enum Logical { - IN_PORT(IN_PORT_NUMBER), - TABLE(TABLE_NUMBER), - NORMAL(NORMAL_NUMBER), - FLOOD(FLOOD_NUMBER), - ALL(ALL_NUMBER), - LOCAL(LOCAL_NUMBER), - CONTROLLER(CONTROLLER_NUMBER); - - private final long number; - private final PortNumber instance; - - public long number() { - return number; - } - - /** - * PortNumber instance for the logical port. - * @return {@link PortNumber} - */ - public PortNumber instance() { - return instance; - } - - Logical(long number) { - this.number = number; - this.instance = new PortNumber(number); - } - } - - public static final PortNumber IN_PORT = new PortNumber(IN_PORT_NUMBER); - public static final PortNumber TABLE = new PortNumber(TABLE_NUMBER); - public static final PortNumber NORMAL = new PortNumber(NORMAL_NUMBER); - public static final PortNumber FLOOD = new PortNumber(FLOOD_NUMBER); - public static final PortNumber ALL = new PortNumber(ALL_NUMBER); - public static final PortNumber LOCAL = new PortNumber(LOCAL_NUMBER); - public static final PortNumber CONTROLLER = new PortNumber(CONTROLLER_NUMBER); - - // lazily populated Logical port number to PortNumber - static final Supplier<Map<Long, Logical>> LOGICAL = Suppliers.memoize(() -> { - Builder<Long, Logical> builder = ImmutableMap.<Long, Logical>builder(); - for (Logical lp : Logical.values()) { - builder.put(lp.number(), lp); - } - return builder.build(); - }); - - private final long number; - private final String name; - private final boolean hasName; - - // Public creation is prohibited - private PortNumber(long number) { - this.number = number; - this.name = UnsignedLongs.toString(number); - this.hasName = false; - } - - private PortNumber(long number, String name) { - this.number = number; - this.name = name; - this.hasName = true; - } - - /** - * Returns the port number representing the specified long value. - * - * @param number port number as long value - * @return port number - */ - public static PortNumber portNumber(long number) { - return new PortNumber(number); - } - - /** - * Returns the port number representing the specified string value. - * - * @param string port number as string value - * @return port number - */ - public static PortNumber portNumber(String string) { - return new PortNumber(UnsignedLongs.decode(string)); - } - - /** - * Returns the port number representing the specified long value and name. - * - * @param number port number as long value - * @param name port name as string value - * @return port number - */ - public static PortNumber portNumber(long number, String name) { - return new PortNumber(number, name); - } - - /** - * Indicates whether or not this port number is a reserved logical one or - * whether it corresponds to a normal physical port of a device or NIC. - * - * @return true if logical port number - */ - public boolean isLogical() { - if (hasName) { - return false; - } else { - return (number < 0 || number > MAX_NUMBER); - } - } - - /** - * Returns the backing long value. - * - * @return port number as long - */ - public long toLong() { - return number; - } - - /** - * Returns the backing string value. - * - * @return port name as string value - */ - public String name() { - return name; - } - - /** - * Indicates whether this port number was created with a port name, - * or only with a number. - * - * @return true if port was created with name - */ - public boolean hasName() { - return hasName; - } - - private String decodeLogicalPort() { - Logical logical = LOGICAL.get().get(number); - if (logical != null) { - // enum name - return logical.toString(); - } - return String.format("UNKNOWN(%s)", UnsignedLongs.toString(number)); - } - - - /** - * Regular expression to match String representation of named PortNumber. - * - * Format: "[name](num:unsigned decimal string)" - */ - private static final Pattern NAMED = Pattern.compile("^\\[(?<name>.*)\\]\\((?<num>\\d+)\\)$"); - - private static boolean isAsciiDecimal(char c) { - return '0' <= c && c <= '9'; - } - - /** - * Returns PortNumber instance from String representation. - * - * @param s String representation equivalent to {@link PortNumber#toString()} - * @return {@link PortNumber} instance - * @throws IllegalArgumentException if given String was malformed - */ - public static PortNumber fromString(String s) { - checkNotNull(s); - checkArgument(!s.isEmpty(), "cannot be empty"); - - if (isAsciiDecimal(s.charAt(0))) { - // unsigned decimal string - return portNumber(s); - } else if (s.startsWith("[")) { - // named PortNumber - Matcher matcher = NAMED.matcher(s); - checkArgument(matcher.matches(), "Invalid named PortNumber %s", s); - - String name = matcher.group("name"); - String num = matcher.group("num"); - return portNumber(UnsignedLongs.parseUnsignedLong(num), name); - } - - // Logical - if (s.startsWith("UNKNOWN(") && s.endsWith(")")) { - return portNumber(s.substring("UNKNOWN(".length(), s.length() - 1)); - } else { - return Logical.valueOf(s).instance; - } - } - - @Override - public String toString() { - if (isLogical()) { - return decodeLogicalPort(); - } else if (hasName()) { - // named port - return String.format("[%s](%d)", name, number); - } else { - // unsigned decimal string - return name; - } - } - - @Override - public int hashCode() { - return Long.hashCode(number); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof PortNumber) { - final PortNumber other = (PortNumber) obj; - return this.number == other.number; - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Provided.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/Provided.java deleted file mode 100644 index daf85e75..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/Provided.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2014 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.net; - -import org.onosproject.net.provider.ProviderId; - -/** - * Abstraction of an entity supplied by a provider. - */ -public interface Provided { - - /** - * Returns the identifier of the provider which supplied the entity. - * - * @return provider identification - */ - ProviderId providerId(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/SparseAnnotations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/SparseAnnotations.java deleted file mode 100644 index 97961b3a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/SparseAnnotations.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2014 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.net; - -import java.util.Set; - -/** - * Represents an set of sparse key/value string annotations capable of carrying - * annotation keys tagged for removal. - */ -public interface SparseAnnotations extends Annotations { - - /** - * {@inheritDoc} - * <p> - * Note that this set includes keys for any attributes tagged for removal. - * </p> - */ - @Override - Set<String> keys(); - - /** - * Indicates whether the specified key has been tagged as removed. This is - * used for merging sparse annotation sets. - * - * @param key annotation key - * @return true if the previous annotation has been tagged for removal - */ - boolean isRemoved(String key); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/TributarySlot.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/TributarySlot.java deleted file mode 100644 index d8a10c81..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/TributarySlot.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.net; - -import com.google.common.base.MoreObjects; - -/** - * Implementation of ODU Tributary Slot simply designated by an index number of slot. - */ -public class TributarySlot { - - private final long index; - - /** - * Creates an instance representing the TributarySlot specified by the given index number. - * - * @param index index number of wavelength - */ - public TributarySlot(long index) { - this.index = index; - } - - public static TributarySlot of(long index) { - return new TributarySlot(index); - } - - /** - * Returns the index number of TributarySlot. - * - * @return the index number of TributarySlot - */ - public long index() { - return index; - } - - @Override - public int hashCode() { - return Long.hashCode(index); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof TributarySlot)) { - return false; - } - - final TributarySlot that = (TributarySlot) obj; - return this.index == that.index; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("index", index) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java deleted file mode 100644 index cf7bed6d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeConfig.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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.net.behaviour; - -import java.util.Collection; -import java.util.List; -import java.util.Set; - -import org.onosproject.net.PortNumber; -import org.onosproject.net.device.PortDescription; -import org.onosproject.net.driver.HandlerBehaviour; - -/** - * Behaviour for handling various drivers for bridge configurations. - */ -public interface BridgeConfig extends HandlerBehaviour { - - /** - * Add a bridge. - * - * @param bridgeName bridge name - */ - void addBridge(BridgeName bridgeName); - - /** - * Adds a bridge with given bridge name, dpid and exPortName. - * - * @param bridgeName bridge name - * @param dpid dpid - * @param exPortName external port name - */ - void addBridge(BridgeName bridgeName, String dpid, String exPortName); - - /** - * Adds a bridge with given bridge name and dpid, and sets the controller - * of the bridge with given controllers. - * - * @param bridgeName bridge name - * @param dpid dpid - * @param controllers list of controller - * @return true if succeeds, fail otherwise - */ - boolean addBridge(BridgeName bridgeName, String dpid, List<ControllerInfo> controllers); - - /** - * Remove a bridge. - * - * @param bridgeName bridge name - */ - void deleteBridge(BridgeName bridgeName); - - /** - * Remove a bridge. - * - * @return bridge collection - */ - Collection<BridgeDescription> getBridges(); - - /** - * Add a logical/virtual port. - * - * @param port port number - */ - void addPort(PortDescription port); - - /** - * Delete a logical/virtual port. - * - * @param port port number - */ - void deletePort(PortDescription port); - - /** - * Delete a logical/virtual port. - * - * @return collection of port - */ - Collection<PortDescription> getPorts(); - - /** - * Get a collection of port. - * - * @return portNumbers set of PortNumber - */ - Set<PortNumber> getPortNumbers(); - - /** - * Get logical/virtual ports by ifaceIds. - * - * @param ifaceIds the ifaceid that needed - * @return list of PortNumber - */ - List<PortNumber> getLocalPorts(Iterable<String> ifaceIds); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java deleted file mode 100644 index 3c1d5542..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeDescription.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2014-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.net.behaviour; - -import org.onosproject.net.Description; -import org.onosproject.net.DeviceId; - -/** - * The abstraction of bridge in OVSDB protocol. - */ -public interface BridgeDescription extends Description { - - /** - * Returns bridge name. - * - * @return bridge name - */ - BridgeName bridgeName(); - - /** - * Returns controller identifier that this bridge belongs to. - * - * @return controller identifier - */ - DeviceId cotrollerDeviceId(); - - /** - * Returns bridge identifier . - * - * @return bridge identifier - */ - DeviceId deviceId(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeName.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeName.java deleted file mode 100644 index a15217c6..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/BridgeName.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2014-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.net.behaviour; - -import java.util.Objects; - -import com.google.common.base.MoreObjects; - -/** - * Represents for a bridge name. - */ -public final class BridgeName { - - private final String name; - - // Public construction is prohibited - private BridgeName(String name) { - this.name = name; - } - - /** - * Creates a bridge name using the supplied string. - * - * @param name bridge name - * @return BridgeName - */ - public static BridgeName bridgeName(String name) { - return new BridgeName(name); - } - - /** - * Returns the bridge name string. - * - * @return name string - */ - public String name() { - return name; - } - - @Override - public int hashCode() { - return name.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof BridgeName) { - final BridgeName that = (BridgeName) obj; - return this.getClass() == that.getClass() && - Objects.equals(this.name, that.name); - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("name", name) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ControllerConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ControllerConfig.java deleted file mode 100644 index cd7cb977..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ControllerConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.net.behaviour; - -import org.onosproject.net.driver.HandlerBehaviour; - -import java.util.List; - -/** - * Device behaviour to obtain and set controllers at the device. - */ -public interface ControllerConfig extends HandlerBehaviour { - - //TODO: add other controller parameters as needed. - - /** - * Obtain the list of controller which are currently configured. - * - * @return a list for controller descriptions - */ - List<ControllerInfo> getControllers(); - - /** - * Set a list of controllers on a device. - * - * @param controllers a list of controller descriptions - */ - void setControllers(List<ControllerInfo> controllers); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ControllerInfo.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ControllerInfo.java deleted file mode 100644 index 0e509562..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ControllerInfo.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.base.Preconditions; -import org.onlab.packet.IpAddress; - -import java.util.Objects; - -/** - * Represents information for a device to connect to a controller. - */ -public class ControllerInfo { - - private IpAddress ip = IpAddress.valueOf("0.0.0.0"); - private int port = 6653; - private String type = "error"; - - /** - * Information for contacting the controller. - * - * @param ip the ip address - * @param port the tcp port - * @param type the connection type - */ - public ControllerInfo(IpAddress ip, int port, String type) { - this.ip = ip; - this.port = port; - this.type = type; - } - - /** - * Information for contacting the controller, if some information - * is not contained in the target string because it's optional - * it's leaved as in the field declaration (default values). - * - * @param target column returned from ovsdb query - */ - public ControllerInfo(String target) { - String[] data = target.split(":"); - this.type = data[0]; - Preconditions.checkArgument(!data[0].contains("unix"), - "Unable to create controller info " + - "from {} because it's based " + - "on unix sockets", target); - if (data[0].startsWith("p")) { - if (data.length >= 2) { - this.port = Integer.parseInt(data[1]); - } - if (data.length == 3) { - this.ip = IpAddress.valueOf(data[2]); - } - } else { - this.ip = IpAddress.valueOf(data[1]); - if (data.length == 3) { - this.port = Integer.parseInt(data[2]); - } - } - } - - /** - * Exposes the ip address of the controller. - * - * @return IpAddress ip address - */ - public IpAddress ip() { - return ip; - } - - /** - * Exposes the tcp port of the controller. - * - * @return int tcp port - */ - public int port() { - return port; - } - - /** - * Exposes the type of the controller connection. - * - * @return String type - */ - public String type() { - return type; - } - - public String target() { - if (type.startsWith("p")) { - return type + ":" + port + ":" + ip; - } else { - return type + ":" + ip + ":" + port; - } - } - - - @Override - public int hashCode() { - return Objects.hash(ip, port, type); - } - - @Override - public boolean equals(Object toBeCompared) { - if (toBeCompared instanceof ControllerInfo) { - ControllerInfo controllerInfo = (ControllerInfo) toBeCompared; - if (controllerInfo.type().equals(this.type) - && controllerInfo.ip().equals(this.ip()) - && controllerInfo.port() == this.port) { - return true; - } - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java deleted file mode 100644 index 6a6f670f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultBridgeDescription.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2014-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.net.behaviour; - -import java.util.Objects; - -import org.onosproject.net.AbstractDescription; -import org.onosproject.net.DeviceId; -import org.onosproject.net.SparseAnnotations; - -import com.google.common.base.MoreObjects; - -/** - * The default implementation of bridge. - */ -public final class DefaultBridgeDescription extends AbstractDescription - implements BridgeDescription { - - private final BridgeName name; - private final DeviceId deviceId; - private final DeviceId controllerId; - - public DefaultBridgeDescription(BridgeName name, DeviceId controllerId, - DeviceId deviceId, - SparseAnnotations... annotations) { - super(annotations); - this.name = name; - this.deviceId = deviceId; - this.controllerId = controllerId; - } - - @Override - public BridgeName bridgeName() { - return name; - } - - @Override - public DeviceId deviceId() { - return deviceId; - } - - @Override - public DeviceId cotrollerDeviceId() { - return controllerId; - } - - @Override - public int hashCode() { - return Objects.hash(name, deviceId, controllerId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultBridgeDescription) { - final DefaultBridgeDescription that = (DefaultBridgeDescription) obj; - return this.getClass() == that.getClass() - && Objects.equals(this.name, that.name) - && Objects.equals(this.deviceId, that.deviceId) - && Objects.equals(this.controllerId, that.controllerId); - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()).add("name", name) - .add("deviceId", deviceId).add("controllerId", controllerId) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultNextGroup.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultNextGroup.java deleted file mode 100644 index ef1f9de7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultNextGroup.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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.net.behaviour; - -/** - * Default implementation of a next group. - */ -public class DefaultNextGroup implements NextGroup { - - private final byte[] data; - - public DefaultNextGroup(byte[] data) { - this.data = data; - } - - @Override - public byte[] data() { - return data; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultTunnelDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultTunnelDescription.java deleted file mode 100644 index 7554a3cb..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/DefaultTunnelDescription.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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.net.behaviour; - -import org.onosproject.net.AbstractDescription; -import org.onosproject.net.SparseAnnotations; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; - -/** - * Default implementation of immutable tunnel description entity. - */ -@Beta -public class DefaultTunnelDescription extends AbstractDescription - implements TunnelDescription { - - private final TunnelEndPoint src; - private final TunnelEndPoint dst; - private final Type type; - // which a tunnel match up - // tunnel producer - private final TunnelName tunnelName; // name of a tunnel - - /** - * Creates a tunnel description using the supplied information. - * - * @param src TunnelPoint source - * @param dst TunnelPoint destination - * @param type tunnel type - * @param tunnelName tunnel name - * @param annotations optional key/value annotations - */ - public DefaultTunnelDescription(TunnelEndPoint src, - TunnelEndPoint dst, Type type, - TunnelName tunnelName, - SparseAnnotations... annotations) { - super(annotations); - this.src = src; - this.dst = dst; - this.type = type; - this.tunnelName = tunnelName; - } - - @Override - public TunnelEndPoint src() { - return src; - } - - @Override - public TunnelEndPoint dst() { - return dst; - } - - @Override - public Type type() { - return type; - } - - @Override - public TunnelName tunnelName() { - return tunnelName; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("src", src()) - .add("dst", dst()) - .add("type", type()) - .add("tunnelName", tunnelName()) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ExtensionSelectorResolver.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ExtensionSelectorResolver.java deleted file mode 100644 index d45dd53c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ExtensionSelectorResolver.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.annotations.Beta; -import org.onosproject.net.driver.HandlerBehaviour; -import org.onosproject.net.flow.criteria.ExtensionSelector; -import org.onosproject.net.flow.criteria.ExtensionSelectorType; - -/** - * Provides access to the extension selectors implemented by this driver. - */ -@Beta -public interface ExtensionSelectorResolver extends HandlerBehaviour { - - /** - * Gets an extension selector instance of the specified type, if supported - * by the driver. - * - * @param type type of extension to get - * @return extension selector - * @throws UnsupportedOperationException if the extension type is not - * supported by this driver - */ - ExtensionSelector getExtensionSelector(ExtensionSelectorType type); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ExtensionTreatmentResolver.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ExtensionTreatmentResolver.java deleted file mode 100644 index 8ca05af3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/ExtensionTreatmentResolver.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.annotations.Beta; -import org.onosproject.net.driver.HandlerBehaviour; -import org.onosproject.net.flow.instructions.ExtensionTreatment; -import org.onosproject.net.flow.instructions.ExtensionTreatmentType; - -/** - * Provides access to the extension treatments implemented by this driver. - */ -@Beta -public interface ExtensionTreatmentResolver extends HandlerBehaviour { - - /** - * Gets an extension treatment instance of the specified type, if supported - * by the driver. - * - * @param type type of extension to get - * @return extension instruction - * @throws UnsupportedOperationException if the extension type is not - * supported by this driver - */ - ExtensionTreatment getExtensionInstruction(ExtensionTreatmentType type); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/IpTunnelEndPoint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/IpTunnelEndPoint.java deleted file mode 100644 index 83ad4756..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/IpTunnelEndPoint.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.behaviour; - -import java.util.Objects; - -import com.google.common.annotations.Beta; -import org.onlab.packet.IpAddress; - -import com.google.common.base.MoreObjects; - -/** - * Represent for a tunnel point using ip address. - */ -@Beta -public final class IpTunnelEndPoint implements TunnelEndPoint { - - private final IpAddress ip; - - /** - * Public construction is prohibited. - * @param ip ip address - */ - private IpTunnelEndPoint(IpAddress ip) { - this.ip = ip; - } - - /** - * Create a IP tunnel end point. - * @param ip IP address - * @return IpTunnelEndPoint - */ - public static IpTunnelEndPoint ipTunnelPoint(IpAddress ip) { - return new IpTunnelEndPoint(ip); - } - - /** - * Returns IP address. - * @return IP address - */ - public IpAddress ip() { - return ip; - } - - @Override - public int hashCode() { - return Objects.hash(ip); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IpTunnelEndPoint) { - final IpTunnelEndPoint other = (IpTunnelEndPoint) obj; - return Objects.equals(this.ip, other.ip); - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()).add("ip", ip).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/LambdaQuery.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/LambdaQuery.java deleted file mode 100644 index e3b1d963..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/LambdaQuery.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.annotations.Beta; -import org.onosproject.net.OchSignal; -import org.onosproject.net.PortNumber; -import org.onosproject.net.driver.HandlerBehaviour; - -import java.util.SortedSet; - -/** - * A HandlerBehaviour to retrieve available wavelength resources. - */ -@Beta -public interface LambdaQuery extends HandlerBehaviour { - - // Currently returns set of FLEX GridType ochSignal instances - /** - * Returns set of Lambda instances which can be used at the port. - * - * @param port to be checked for the available resources. - * @return Set of OchSignals which can be used at the port. - */ - SortedSet<OchSignal> queryLambdas(PortNumber port); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/MplsQuery.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/MplsQuery.java deleted file mode 100644 index 0e9f466d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/MplsQuery.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.annotations.Beta; -import org.onosproject.net.PortNumber; -import org.onosproject.net.driver.HandlerBehaviour; - -/** - * A HandlerBehaviour to check the capability of MPLS. - */ -@Beta -public interface MplsQuery extends HandlerBehaviour { - - /** - * Indicates if MPLS can be used at the port. - - * @param port port to be checked for the capability - * @return true if MPLS can be used at the port, false otherwise. - */ - boolean isEnabled(PortNumber port); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/NextGroup.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/NextGroup.java deleted file mode 100644 index b5a3891c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/NextGroup.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.net.behaviour; - -/** - * Opaque data type for carrying group-like information. - * Only relevant to a pipeliner driver. - */ -public interface NextGroup { - - /** - * Serialized form of the next group. - * @return a byte array. - */ - byte[] data(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/Pipeliner.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/Pipeliner.java deleted file mode 100644 index dcfc5883..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/Pipeliner.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.net.behaviour; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.driver.HandlerBehaviour; -import org.onosproject.net.flowobjective.FilteringObjective; -import org.onosproject.net.flowobjective.ForwardingObjective; -import org.onosproject.net.flowobjective.NextObjective; - -/** - * Behaviour for handling various pipelines. - */ -public interface Pipeliner extends HandlerBehaviour { - - /** - * Initializes the driver with context required for its operation. - * - * @param deviceId the deviceId - * @param context processing context - */ - void init(DeviceId deviceId, PipelinerContext context); - - /** - * Installs the filtering rules onto the device. - * - * @param filterObjective a filtering objective - */ - void filter(FilteringObjective filterObjective); - - /** - * Installs the forwarding rules onto the device. - * - * @param forwardObjective a forwarding objective - */ - void forward(ForwardingObjective forwardObjective); - - /** - * Installs the next hop elements into the device. - * - * @param nextObjective a next objectives - */ - void next(NextObjective nextObjective); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PipelinerContext.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PipelinerContext.java deleted file mode 100644 index d0ca42b1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PipelinerContext.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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.net.behaviour; - -import org.onlab.osgi.ServiceDirectory; -import org.onosproject.net.flowobjective.FlowObjectiveStore; - -/** - * Processing context and supporting services for the pipeline behaviour. - */ -public interface PipelinerContext { - - /** - * Returns the service directory which can be used to obtain references - * to various supporting services. - * - * @return service directory - */ - ServiceDirectory directory(); - - /** - * Returns the Objective Store where data can be stored and retrieved. - * @return the flow objective store - */ - FlowObjectiveStore store(); - - // TODO: add means to store and access shared state -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PortAdmin.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PortAdmin.java deleted file mode 100644 index 141e27dc..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PortAdmin.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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.net.behaviour; - -import org.onosproject.net.device.PortDescription; -import org.onosproject.net.driver.HandlerBehaviour; - -/** - * Means to administratively enable/disable a logical port at the device. - */ -public interface PortAdmin extends HandlerBehaviour { - - /** - * Enable/disable administratively a port. - * - * @param port a port description containing the desired port state - */ - void enable(PortDescription port); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PortConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PortConfig.java deleted file mode 100644 index 83dd99d8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/PortConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.primitives.UnsignedInteger; -import org.onosproject.net.device.PortDescription; -import org.onosproject.net.driver.HandlerBehaviour; - -/** - * Means to configure a logical port at the device. - */ -public interface PortConfig extends HandlerBehaviour { - - /** - * Apply QoS configuration on a device. - * @param port a port description - * @param queueId an unsigned integer - */ - void applyQoS(PortDescription port, UnsignedInteger queueId); - - /** - * Remove a QoS configuration. - * @param port a port description - */ - void removeQoS(PortDescription port); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/QueueConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/QueueConfig.java deleted file mode 100644 index 22f3ecb7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/QueueConfig.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.primitives.UnsignedInteger; - -import java.util.Set; - -/** - * Means to alter a device's dataplane queues. - */ -public interface QueueConfig { - - /** - * Obtain all queues configured on a device. - * - * @return a list of queue descriptions - */ - Set<QueueInfo> getQueues(); - - /** - * Obtain a specific queue given a queue id. - * - * @param queueId an unsigned integer representing a queue id - * @return a queue description - */ - QueueInfo getQueue(UnsignedInteger queueId); - - /** - * Add a queue to a device. - * - * @param queue a queue description - */ - void addQueue(QueueInfo queue); - - /** - * Remove a queue from a device. - * - * @param queueId an unsigned integer - */ - void removeQueue(UnsignedInteger queueId); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/QueueInfo.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/QueueInfo.java deleted file mode 100644 index 25852b36..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/QueueInfo.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.primitives.UnsignedInteger; - -/** - * Represents a dataplane queue. - */ -public class QueueInfo { - - public enum Type { - /** - * Supports burst and priority as well as min and max rates. - */ - FULL, - - /** - * Only support min and max rates. - */ - MINMAX - } - - private final UnsignedInteger queueId; - private final Type type; - private final long minRate; - private final long maxRate; - private final long burst; - private final long priority; - - public QueueInfo(UnsignedInteger queueId, Type type, long minRate, - long maxRate, long burst, long priority) { - this.queueId = queueId; - this.type = type; - this.minRate = minRate; - this.maxRate = maxRate; - this.burst = burst; - this.priority = priority; - } - - //TODO builder - // public static QueueInfoBuilder builder() {} -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java deleted file mode 100644 index a1b97ffd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.net.behaviour; - -import java.util.Collection; - -import org.onosproject.net.driver.HandlerBehaviour; - -/** - * Behaviour for handling various drivers for tunnel configuration. - */ -public interface TunnelConfig extends HandlerBehaviour { - - /** - * Creates a tunnel on this device. - * - * @param tunnel tunnel descriptor - */ - @Deprecated - void createTunnel(TunnelDescription tunnel); - - /** - * Creates a tunnel interface on a given bridge of this device. - * - * @param bridgeName bridge name - * @param tunnel tunnel description - * @return true if succeeds, false otherwise - */ - boolean createTunnelInterface(BridgeName bridgeName, TunnelDescription tunnel); - - /** - * Removes a tunnel on this device. - * - * @param tunnel tunnel descriptor - */ - void removeTunnel(TunnelDescription tunnel); - - /** - * Updates a tunnel on this device. - * - * @param tunnel tunnel descriptor - */ - void updateTunnel(TunnelDescription tunnel); - - /** - * Returns tunnels created on this device. - * - * @return collection of tunnels - */ - Collection<TunnelDescription> getTunnels(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java deleted file mode 100755 index b2fb6996..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.net.behaviour; - -import org.onosproject.net.Annotated; -import org.onosproject.net.Description; - -import com.google.common.annotations.Beta; - -/** - * Describes a tunnel. - */ -@Beta -public interface TunnelDescription extends Description, Annotated { - - /** - * Tunnel technology type. - */ - enum Type { - /** - * Signifies that this is a MPLS tunnel. - */ - MPLS, - /** - * Signifies that this is a L2 tunnel. - */ - VLAN, - /** - * Signifies that this is a DC L2 extension tunnel. - */ - VXLAN, - /** - * Signifies that this is a L3 tunnel. - */ - GRE, - /** - * Signifies that this is a L1 OTN tunnel. - */ - ODUK, - /** - * Signifies that this is a L0 OCH tunnel. - */ - OCH - } - - /** - * Returns the connection point source. - * - * @return tunnel source ConnectionPoint - */ - TunnelEndPoint src(); - - /** - * Returns the connection point destination. - * - * @return tunnel destination - */ - TunnelEndPoint dst(); - - /** - * Returns the tunnel type. - * - * @return tunnel type - */ - Type type(); - - /** - * Return the name of a tunnel. - * - * @return Tunnel Name - */ - TunnelName tunnelName(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelEndPoint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelEndPoint.java deleted file mode 100644 index c354c38d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelEndPoint.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.annotations.Beta; - -/** - * Represents for source end point or destination end point of a tunnel. Maybe a tunnel - * based on ConnectPoint, IpAddress, MacAddress and so on is built. - */ -@Beta -public interface TunnelEndPoint { - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelName.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelName.java deleted file mode 100644 index 9be26549..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/TunnelName.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.annotations.Beta; - -import java.util.Objects; - -/** - * Represents for a unique tunnel name. TunnelId is generated by ONOS while - * TunnelName is given by producer. The consumer can borrow tunnels with - * TunnelId or TunnelName. - */ -@Beta -public final class TunnelName { - private final String str; - - // Default constructor for serialization - private TunnelName(String tunnelName) { - this.str = tunnelName; - } - - - /** - * Creates a tunnel name using the supplied URI string. - * - * @param tunnelName tunnel name string - * @return tunnel name object - */ - public static TunnelName tunnelName(String tunnelName) { - return new TunnelName(tunnelName); - } - - /** - * The string of tunnel name. - * - * @return the string of tunnel name - */ - public String value() { - return str; - } - - @Override - public int hashCode() { - return Objects.hash(str); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof TunnelName) { - final TunnelName that = (TunnelName) obj; - return this.getClass() == that.getClass() - && Objects.equals(this.str, that.str); - } - return false; - } - - @Override - public String toString() { - return str; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/VlanQuery.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/VlanQuery.java deleted file mode 100644 index a1057c90..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/VlanQuery.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.net.behaviour; - -import com.google.common.annotations.Beta; -import org.onosproject.net.PortNumber; -import org.onosproject.net.driver.HandlerBehaviour; - -/** - * A HandlerBehaviour to check the capability of VLAN. - */ -@Beta -public interface VlanQuery extends HandlerBehaviour { - - /** - * Indicates if VLAN can be used at the port. - * - * @param port port to be checked for the capability - * @return true if VLAN can be used at the port, false otherwise. - */ - boolean isEnabled(PortNumber port); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/package-info.java deleted file mode 100644 index f0a9a5e5..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/behaviour/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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. - */ - -/** - * Abstractions of various device configuration or device adaptation behaviours; - * counterpart to the device driver subsystem. - */ -package org.onosproject.net.behaviour;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/Config.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/Config.java deleted file mode 100644 index 5f2c9f3a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/Config.java +++ /dev/null @@ -1,475 +0,0 @@ -/* - * 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.net.config; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterators; -import com.google.common.collect.Lists; -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; - -import java.util.Collection; -import java.util.List; -import java.util.Set; -import java.util.function.Function; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Base abstraction of a configuration facade for a specific subject. Derived - * classes should keep all state in the specified JSON tree as that is the - * only state that will be distributed or persisted; this class is merely - * a facade for interacting with a particular facet of configuration on a - * given subject. - * - * @param <S> type of subject - */ -@Beta -public abstract class Config<S> { - - protected S subject; - protected String key; - - protected JsonNode node; - protected ObjectNode object; - protected ArrayNode array; - protected ObjectMapper mapper; - - protected ConfigApplyDelegate delegate; - - /** - * Indicator of whether a configuration JSON field is required. - */ - public enum FieldPresence { - /** - * Signifies that config field is an optional one. - */ - OPTIONAL, - - /** - * Signifies that config field is mandatory. - */ - MANDATORY - } - - /** - * Initializes the configuration behaviour with necessary context. - * - * @param subject configuration subject - * @param key configuration key - * @param node JSON node where configuration data is stored - * @param mapper JSON object mapper - * @param delegate delegate context - */ - public void init(S subject, String key, JsonNode node, ObjectMapper mapper, - ConfigApplyDelegate delegate) { - this.subject = checkNotNull(subject); - this.key = key; - this.node = checkNotNull(node); - this.object = node instanceof ObjectNode ? (ObjectNode) node : null; - this.array = node instanceof ArrayNode ? (ArrayNode) node : null; - this.mapper = checkNotNull(mapper); - this.delegate = checkNotNull(delegate); - } - - /** - * Indicates whether or not the backing JSON node contains valid data. - * <p> - * Default implementation returns true. - * Subclasses are expected to override this with their own validation. - * </p> - * - * @return true if the data is valid; false otherwise - */ - public boolean isValid() { - // TODO: figure out what assertions could be made in the base class - // NOTE: The thought is to have none, but instead to provide a set - // of predicates to allow configs to test validity of present fields, - // e.g.: - // isString(path) - // isBoolean(path) - // isNumber(path, [min, max]) - // isDecimal(path, [min, max]) - // isMacAddress(path) - // isIpAddress(path) - return true; - } - - /** - * Returns the specific subject to which this configuration pertains. - * - * @return configuration subject - */ - public S subject() { - return subject; - } - - /** - * Returns the configuration key. This is primarily aimed for use in - * composite JSON trees in external representations and has no bearing on - * the internal behaviours. - * - * @return configuration key - */ - public String key() { - return key; - } - - /** - * Returns the JSON node that contains the configuration data. - * - * @return JSON node backing the configuration - */ - public JsonNode node() { - return node; - } - - /** - * Applies any configuration changes made via this configuration. - */ - public void apply() { - delegate.onApply(this); - } - - - // Miscellaneous helpers for interacting with JSON - - /** - * Gets the specified property as a string. - * - * @param name property name - * @param defaultValue default value if property not set - * @return property value or default value - */ - protected String get(String name, String defaultValue) { - return object.path(name).asText(defaultValue); - } - - /** - * Sets the specified property as a string or clears it if null value given. - * - * @param name property name - * @param value new value or null to clear the property - * @return self - */ - protected Config<S> setOrClear(String name, String value) { - if (value != null) { - object.put(name, value); - } else { - object.remove(name); - } - return this; - } - - /** - * Gets the specified property as a boolean. - * - * @param name property name - * @param defaultValue default value if property not set - * @return property value or default value - */ - protected boolean get(String name, boolean defaultValue) { - return object.path(name).asBoolean(defaultValue); - } - - /** - * Sets the specified property as a boolean or clears it if null value given. - * - * @param name property name - * @param value new value or null to clear the property - * @return self - */ - protected Config<S> setOrClear(String name, Boolean value) { - if (value != null) { - object.put(name, value.booleanValue()); - } else { - object.remove(name); - } - return this; - } - - /** - * Gets the specified property as an integer. - * - * @param name property name - * @param defaultValue default value if property not set - * @return property value or default value - */ - protected int get(String name, int defaultValue) { - return object.path(name).asInt(defaultValue); - } - - /** - * Sets the specified property as an integer or clears it if null value given. - * - * @param name property name - * @param value new value or null to clear the property - * @return self - */ - protected Config<S> setOrClear(String name, Integer value) { - if (value != null) { - object.put(name, value.intValue()); - } else { - object.remove(name); - } - return this; - } - - /** - * Gets the specified property as a long. - * - * @param name property name - * @param defaultValue default value if property not set - * @return property value or default value - */ - protected long get(String name, long defaultValue) { - return object.path(name).asLong(defaultValue); - } - - /** - * Sets the specified property as a long or clears it if null value given. - * - * @param name property name - * @param value new value or null to clear the property - * @return self - */ - protected Config<S> setOrClear(String name, Long value) { - if (value != null) { - object.put(name, value.longValue()); - } else { - object.remove(name); - } - return this; - } - - /** - * Gets the specified property as a double. - * - * @param name property name - * @param defaultValue default value if property not set - * @return property value or default value - */ - protected double get(String name, double defaultValue) { - return object.path(name).asDouble(defaultValue); - } - - /** - * Sets the specified property as a double or clears it if null value given. - * - * @param name property name - * @param value new value or null to clear the property - * @return self - */ - protected Config<S> setOrClear(String name, Double value) { - if (value != null) { - object.put(name, value.doubleValue()); - } else { - object.remove(name); - } - return this; - } - - /** - * Gets the specified property as an enum. - * - * @param name property name - * @param defaultValue default value if property not set - * @param enumClass the enum class - * @param <E> type of enum - * @return property value or default value - */ - protected <E extends Enum<E>> E get(String name, E defaultValue, Class<E> enumClass) { - return Enum.valueOf(enumClass, object.path(name).asText(defaultValue.toString())); - } - - /** - * Sets the specified property as a double or clears it if null value given. - * - * @param name property name - * @param value new value or null to clear the property - * @param <E> type of enum - * @return self - */ - protected <E extends Enum> Config<S> setOrClear(String name, E value) { - if (value != null) { - object.put(name, value.toString()); - } else { - object.remove(name); - } - return this; - } - - /** - * Gets the specified array property as a list of items. - * - * @param name property name - * @param function mapper from string to item - * @param <T> type of item - * @return list of items - */ - protected <T> List<T> getList(String name, Function<String, T> function) { - List<T> list = Lists.newArrayList(); - ArrayNode arrayNode = (ArrayNode) object.path(name); - arrayNode.forEach(i -> list.add(function.apply(i.asText()))); - return list; - } - - /** - * Gets the specified array property as a list of items. - * - * @param name property name - * @param function mapper from string to item - * @param defaultValue default value if property not set - * @param <T> type of item - * @return list of items - */ - protected <T> List<T> getList(String name, Function<String, T> function, List<T> defaultValue) { - List<T> list = Lists.newArrayList(); - JsonNode jsonNode = object.path(name); - if (jsonNode.isMissingNode()) { - return defaultValue; - } - ArrayNode arrayNode = (ArrayNode) jsonNode; - arrayNode.forEach(i -> list.add(function.apply(i.asText()))); - return list; - } - - /** - * Sets the specified property as an array of items in a given collection or - * clears it if null is given. - * - * @param name propertyName - * @param collection collection of items - * @param <T> type of items - * @return self - */ - protected <T> Config<S> setOrClear(String name, Collection<T> collection) { - if (collection == null) { - object.remove(name); - } else { - ArrayNode arrayNode = mapper.createArrayNode(); - collection.forEach(i -> arrayNode.add(i.toString())); - object.set(name, arrayNode); - } - return this; - } - - /** - * Indicates whether only the specified fields are present in the backing JSON. - * - * @param allowedFields allowed field names - * @return true if all allowedFields are present; false otherwise - */ - protected boolean hasOnlyFields(String... allowedFields) { - Set<String> fields = ImmutableSet.copyOf(allowedFields); - return !Iterators.any(object.fieldNames(), f -> !fields.contains(f)); - } - - /** - * Indicates whether the specified field holds a valid MAC address. - * - * @param field JSON field name - * @param presence specifies if field is optional or mandatory - * @return true if valid; false otherwise - * @throws IllegalArgumentException if field is present, but not valid MAC - */ - protected boolean isMacAddress(String field, FieldPresence presence) { - JsonNode node = object.path(field); - return isValid(node, presence, node.isTextual() && - MacAddress.valueOf(node.asText()) != null); - } - - /** - * Indicates whether the specified field holds a valid IP address. - * - * @param field JSON field name - * @param presence specifies if field is optional or mandatory - * @return true if valid; false otherwise - * @throws IllegalArgumentException if field is present, but not valid IP - */ - protected boolean isIpAddress(String field, FieldPresence presence) { - JsonNode node = object.path(field); - return isValid(node, presence, node.isTextual() && - IpAddress.valueOf(node.asText()) != null); - } - - /** - * Indicates whether the specified field holds a valid string value. - * - * @param field JSON field name - * @param presence specifies if field is optional or mandatory - * @param pattern optional regex pattern - * @return true if valid; false otherwise - * @throws IllegalArgumentException if field is present, but not valid MAC - */ - protected boolean isString(String field, FieldPresence presence, String... pattern) { - JsonNode node = object.path(field); - return isValid(node, presence, node.isTextual() && - (pattern.length > 0 && node.asText().matches(pattern[0]) || pattern.length < 1)); - } - - /** - * Indicates whether the specified field holds a valid number. - * - * @param field JSON field name - * @param presence specifies if field is optional or mandatory - * @param minMax optional min/max values - * @return true if valid; false otherwise - * @throws IllegalArgumentException if field is present, but not valid - */ - protected boolean isNumber(String field, FieldPresence presence, long... minMax) { - JsonNode node = object.path(field); - return isValid(node, presence, (node.isLong() || node.isInt()) && - (minMax.length > 0 && minMax[0] <= node.asLong() || minMax.length < 1) && - (minMax.length > 1 && minMax[1] > node.asLong() || minMax.length < 2)); - } - - /** - * Indicates whether the specified field holds a valid decimal number. - * - * @param field JSON field name - * @param presence specifies if field is optional or mandatory - * @param minMax optional min/max values - * @return true if valid; false otherwise - * @throws IllegalArgumentException if field is present, but not valid - */ - protected boolean isDecimal(String field, FieldPresence presence, double... minMax) { - JsonNode node = object.path(field); - return isValid(node, presence, (node.isDouble() || node.isFloat()) && - (minMax.length > 0 && minMax[0] <= node.asDouble() || minMax.length < 1) && - (minMax.length > 1 && minMax[1] > node.asDouble() || minMax.length < 2)); - } - - /** - * Indicates whether the node is present and of correct value or not - * mandatory and absent. - * - * @param node JSON node - * @param presence specifies if field is optional or mandatory - * @param correctValue true if the value is correct - * @return true if the field is as expected - */ - private boolean isValid(JsonNode node, FieldPresence presence, boolean correctValue) { - boolean isMandatory = presence == FieldPresence.MANDATORY; - return isMandatory && correctValue || !isMandatory && !node.isNull() || correctValue; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigApplyDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigApplyDelegate.java deleted file mode 100644 index 1160a097..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigApplyDelegate.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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.net.config; - -import com.google.common.annotations.Beta; - -/** - * Delegate for notification when configuration changes have been applied. - */ -@Beta -public interface ConfigApplyDelegate { - - /** - * Processes changes applied to the specified configuration. - * - * @param config changed configuration - */ - void onApply(Config config); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigFactory.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigFactory.java deleted file mode 100644 index 25a34025..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigFactory.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * 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.net.config; - - -import com.google.common.annotations.Beta; - -/** - * Base abstract factory for creating configurations for the specified subject type. - * - * @param <S> type of subject - * @param <C> type of configuration - */ -@Beta -public abstract class ConfigFactory<S, C extends Config<S>> { - - private final SubjectFactory<S> subjectFactory; - private final Class<C> configClass; - private final String configKey; - private final boolean isList; - - /** - * Creates a new configuration factory for the specified class of subjects - * capable of generating the configurations of the specified class. The - * subject and configuration class keys are used merely as keys for use in - * composite JSON trees. - * - * @param subjectFactory subject factory - * @param configClass configuration class - * @param configKey configuration class key - */ - protected ConfigFactory(SubjectFactory<S> subjectFactory, - Class<C> configClass, String configKey) { - this(subjectFactory, configClass, configKey, false); - } - - /** - * Creates a new configuration factory for the specified class of subjects - * capable of generating the configurations of the specified class. The - * subject and configuration class keys are used merely as keys for use in - * composite JSON trees. - * <p> - * Note that configurations backed by JSON array are not easily extensible - * at the top-level as they are inherently limited to holding an ordered - * list of items. - * </p> - * - * @param subjectFactory subject factory - * @param configClass configuration class - * @param configKey configuration class key - * @param isList true to indicate backing by JSON array - */ - protected ConfigFactory(SubjectFactory<S> subjectFactory, - Class<C> configClass, String configKey, - boolean isList) { - this.subjectFactory = subjectFactory; - this.configClass = configClass; - this.configKey = configKey; - this.isList = isList; - } - - /** - * Returns the class of the subject to which this factory applies. - * - * @return subject type - */ - public SubjectFactory<S> subjectFactory() { - return subjectFactory; - } - - /** - * Returns the class of the configuration which this factory generates. - * - * @return configuration type - */ - public Class<C> configClass() { - return configClass; - } - - /** - * Returns the unique key (within subject class) of this configuration. - * This is primarily aimed for use in composite JSON trees in external - * representations and has no bearing on the internal behaviours. - * - * @return configuration key - */ - public String configKey() { - return configKey; - } - - /** - * Creates a new but uninitialized configuration. Framework will initialize - * the configuration via {@link Config#init} method. - * - * @return new uninitialized configuration - */ - public abstract C createConfig(); - - /** - * Indicates whether the configuration is a list and should be backed by - * a JSON array rather than JSON object. - * - * @return true if backed by JSON array - */ - public boolean isList() { - return isList; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigOperator.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigOperator.java deleted file mode 100644 index 505e8b3b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/ConfigOperator.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2014-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.net.config; - -/** - * An interface signifying a class that implements network configuration - * information from multiple sources. There is a natural ordering to the - * precedence of information, depending on its source: - * <ol> - * <li>Intents (from applications), which override</li> - * <li>Configs (from the network configuration subsystem), which override</li> - * <li>Descriptions (from southbound)</li> - * </ol> - * i.e., for a field representing the same attribute, the value from a Config - * entity will be used over that from the Description. - */ -public interface ConfigOperator { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigEvent.java deleted file mode 100644 index ee9ceadf..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigEvent.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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.net.config; - -import org.onosproject.event.AbstractEvent; - -/** - * Describes network configuration event. - */ -public class NetworkConfigEvent extends AbstractEvent<NetworkConfigEvent.Type, Object> { - - private final Class configClass; - - /** - * Type of network configuration events. - */ - public enum Type { - /** - * Signifies that a network configuration was registered. - */ - CONFIG_REGISTERED, - - /** - * Signifies that a network configuration was unregistered. - */ - CONFIG_UNREGISTERED, - - /** - * Signifies that network configuration was added. - */ - CONFIG_ADDED, - - /** - * Signifies that network configuration was updated. - */ - CONFIG_UPDATED, - - /** - * Signifies that network configuration was removed. - */ - CONFIG_REMOVED - } - - /** - * Creates an event of a given type and for the specified subject and the - * current time. - * - * @param type event type - * @param subject event subject - * @param configClass configuration class - */ - public NetworkConfigEvent(Type type, Object subject, Class configClass) { - super(type, subject); - this.configClass = configClass; - } - - /** - * Creates an event of a given type and for the specified subject and time. - * - * @param type device event type - * @param subject event subject - * @param configClass configuration class - * @param time occurrence time - */ - public NetworkConfigEvent(Type type, Object subject, Class configClass, long time) { - super(type, subject, time); - this.configClass = configClass; - } - - /** - * Returns the class of configuration that has been changed. - * - * @return configuration class - */ - public Class configClass() { - return configClass; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigListener.java deleted file mode 100644 index 73177755..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.net.config; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving network configuration related events. - */ -public interface NetworkConfigListener extends EventListener<NetworkConfigEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigRegistry.java deleted file mode 100644 index b4937d74..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigRegistry.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.config; - -import com.google.common.annotations.Beta; - -import java.util.Set; - -/** - * Service for tracking network configuration factories. It is the basis for - * extensibility to allow various core subsystems or apps to register their - * own configuration factories that permit use to inject additional meta - * information about how various parts of the network should be viewed and - * treated. - */ -@Beta -public interface NetworkConfigRegistry extends NetworkConfigService { - - /** - * Registers the specified configuration factory. - * - * @param configFactory configuration factory - */ - void registerConfigFactory(ConfigFactory configFactory); - - /** - * Unregisters the specified configuration factory. - * - * @param configFactory configuration factory - */ - void unregisterConfigFactory(ConfigFactory configFactory); - - /** - * Returns set of all registered configuration factories. - * - * @return set of config factories - */ - Set<ConfigFactory> getConfigFactories(); - - /** - * Returns set of all configuration factories registered for the specified - * class of subject. - * - * @param subjectClass subject class - * @param <S> type of subject - * @param <C> type of configuration - * @return set of config factories - */ - <S, C extends Config<S>> Set<ConfigFactory<S, C>> getConfigFactories(Class<S> subjectClass); - - /** - * Returns the configuration factory that produces the specified class of - * configurations. - * - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - * @return config factory - */ - <S, C extends Config<S>> ConfigFactory<S, C> getConfigFactory(Class<C> configClass); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigService.java deleted file mode 100644 index f1b22c41..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigService.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * 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.net.config; - -import com.fasterxml.jackson.databind.JsonNode; -import com.google.common.annotations.Beta; -import org.onosproject.event.ListenerService; - -import java.util.Set; - -/** - * Service for tracking network configurations which specify how the discovered - * network information should be interpreted and how the core or applications - * should act on or configure the network. - */ -@Beta -public interface NetworkConfigService - extends ListenerService<NetworkConfigEvent, NetworkConfigListener> { - - /** - * Returns the set of subject classes for which configuration may be - * available. - * - * @return set of subject classes - */ - Set<Class> getSubjectClasses(); - - /** - * Returns the subject factory with the specified key. - * - * @param subjectClassKey subject class key - * @return subject class - */ - SubjectFactory getSubjectFactory(String subjectClassKey); - - /** - * Returns the subject factory for the specified class. - * - * @param subjectClass subject class - * @return subject class factory - */ - SubjectFactory getSubjectFactory(Class subjectClass); - - /** - * Returns the configuration class with the specified key. - * - * @param subjectClassKey subject class key - * @param configKey subject class name - * @return subject class - */ - Class<? extends Config> getConfigClass(String subjectClassKey, String configKey); - - /** - * Returns the set of subjects for which some configuration is available. - * - * @param subjectClass subject class - * @param <S> type of subject - * @return set of configured subjects - */ - <S> Set<S> getSubjects(Class<S> subjectClass); - - /** - * Returns the set of subjects for which the specified configuration is - * available. - * - * @param subjectClass subject class - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - * @return set of configured subjects - */ - <S, C extends Config<S>> Set<S> getSubjects(Class<S> subjectClass, Class<C> configClass); - - /** - * Returns all configurations for the specified subject. - * - * @param subject configuration subject - * @param <S> type of subject - * @return set of configurations - */ - <S> Set<? extends Config<S>> getConfigs(S subject); - - /** - * Returns the configuration for the specified subject and configuration - * class if one is available; null otherwise. - * - * @param subject configuration subject - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - * @return configuration or null if one is not available - */ - <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass); - - /** - * Creates a new configuration for the specified subject and configuration - * class. If one already exists, it is simply returned. - * - * @param subject configuration subject - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - * @return configuration or null if one is not available - */ - <S, C extends Config<S>> C addConfig(S subject, Class<C> configClass); - - /** - * Applies configuration for the specified subject and configuration - * class using the raw JSON node. If configuration already exists, it - * will be updated. - * - * @param subject configuration subject - * @param configClass configuration class - * @param json raw JSON node containing the configuration data - * @param <S> type of subject - * @param <C> type of configuration - * @return configuration or null if one is not available - * @throws IllegalArgumentException if the supplied JSON node contains - * invalid data - */ - <S, C extends Config<S>> C applyConfig(S subject, Class<C> configClass, - JsonNode json); - - /** - * Clears any configuration for the specified subject and configuration - * class. If one does not exist, this call has no effect. - * - * @param subject configuration subject - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - */ - <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigStore.java deleted file mode 100644 index 9be4b120..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigStore.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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.net.config; - -import com.fasterxml.jackson.databind.JsonNode; -import org.onosproject.store.Store; - -import java.util.Set; - -/** - * Mechanism for distributing and storing network configuration information. - */ -public interface NetworkConfigStore extends Store<NetworkConfigEvent, NetworkConfigStoreDelegate> { - - /** - * Adds a new configuration factory. - * - * @param configFactory configuration factory to add - */ - void addConfigFactory(ConfigFactory configFactory); - - /** - * Removes a configuration factory. - * - * @param configFactory configuration factory to remove - */ - void removeConfigFactory(ConfigFactory configFactory); - - /** - * Returns the configuration factory for the specified configuration class. - * - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - * @return configuration factory or null - */ - <S, C extends Config<S>> ConfigFactory<S, C> getConfigFactory(Class<C> configClass); - - /** - * Returns set of subjects of the specified class, which have some - * network configuration associated with them. - * - * @param subjectClass subject class - * @param <S> type of subject - * @return set of subject - */ - <S> Set<S> getSubjects(Class<S> subjectClass); - - /** - * Returns set of subjects of the specified class, which have the - * specified class of network configuration associated with them. - * - * @param subjectClass subject class - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - * @return set of subject - */ - <S, C extends Config<S>> Set<S> getSubjects(Class<S> subjectClass, Class<C> configClass); - - /** - * Returns set of configuration classes available for the specified subject. - * - * @param subject configuration subject - * @param <S> type of subject - * @return set of configuration classes - */ - <S> Set<Class<? extends Config<S>>> getConfigClasses(S subject); - - /** - * Get the configuration of the given class and for the specified subject. - * - * @param subject configuration subject - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - * @return configuration object - */ - <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass); - - /** - * Creates a new configuration of the given class for the specified subject. - * - * @param subject configuration subject - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - * @return configuration object - */ - <S, C extends Config<S>> C createConfig(S subject, Class<C> configClass); - - /** - * Applies configuration for the specified subject and configuration - * class using the raw JSON object. If configuration already exists, it - * will be updated. - * - * @param subject configuration subject - * @param configClass configuration class - * @param json raw JSON node containing the configuration data - * @param <S> type of subject - * @param <C> type of configuration - * @return configuration object - * @throws IllegalArgumentException if the supplied JSON node contains - * invalid data - */ - <S, C extends Config<S>> C applyConfig(S subject, Class<C> configClass, - JsonNode json); - - /** - * Clears the configuration of the given class for the specified subject. - * - * @param subject configuration subject - * @param configClass configuration class - * @param <S> type of subject - * @param <C> type of configuration - */ - <S, C extends Config<S>> void clearConfig(S subject, Class<C> configClass); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigStoreDelegate.java deleted file mode 100644 index 15d3d3e8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/NetworkConfigStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.net.config; - -import org.onosproject.store.StoreDelegate; - -/** - * Network configuration store delegate abstraction. - */ -public interface NetworkConfigStoreDelegate extends StoreDelegate<NetworkConfigEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/SubjectFactory.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/SubjectFactory.java deleted file mode 100644 index f992d727..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/SubjectFactory.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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.net.config; - - -import com.google.common.annotations.Beta; - -/** - * Base abstract factory for creating configuration subjects from their - * string key image. - * - * @param <S> subject class - */ -@Beta -public abstract class SubjectFactory<S> { - - private final Class<S> subjectClass; - private final String subjectClassKey; - - /** - * Creates a new configuration factory for the specified class of subjects - * capable of generating the configurations of the specified class. The - * subject and configuration class keys are used merely as keys for use in - * composite JSON trees. - * - * @param subjectClass subject class - * @param subjectClassKey subject class key - */ - protected SubjectFactory(Class<S> subjectClass, String subjectClassKey) { - this.subjectClass = subjectClass; - this.subjectClassKey = subjectClassKey; - } - - /** - * Returns the class of the subject to which this factory applies. - * - * @return subject type - */ - public Class<S> subjectClass() { - return subjectClass; - } - - /** - * Returns the unique key of this configuration subject class. - * This is primarily aimed for use in composite JSON trees in external - * representations and has no bearing on the internal behaviours. - * - * @return configuration key - */ - public String subjectClassKey() { - return subjectClassKey; - } - - /** - * Returns the unique key of the specified configuration subject. - * This is primarily aimed for use in composite JSON trees in external - * representations and has no bearing on the internal behaviours. - * - * @param subject specific subject - * @return subject key - */ - public String subjectKey(S subject) { - return subject.toString(); - } - - /** - * Creates a configuration subject from its key image. - * - * @param subjectKey subject class key - * @return configuration subject - */ - public abstract S createSubject(String subjectKey); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/AllowedEntityConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/AllowedEntityConfig.java deleted file mode 100644 index 6e6663c4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/AllowedEntityConfig.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.net.config.basics; - -import org.onosproject.net.config.Config; - -/** - * Base abstraction for network entities for which admission into control - * domain can be selectively configured, e.g. devices, end-stations, links - */ -public abstract class AllowedEntityConfig<S> extends Config<S> { - - private static final String ALLOWED = "allowed"; - - /** - * Indicates whether the element is allowed for admission into the control - * domain. - * - * @return true if element is allowed - */ - public boolean isAllowed() { - return get(ALLOWED, true); - } - - /** - * Specifies whether the element is to be allowed for admission into the - * control domain. - * - * @param isAllowed true to allow; false to forbid; null to clear - * @return self - */ - public AllowedEntityConfig isAllowed(Boolean isAllowed) { - return (AllowedEntityConfig) setOrClear(ALLOWED, isAllowed); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java deleted file mode 100644 index afde9a9e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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.net.config.basics; - -import org.onosproject.net.Device; -import org.onosproject.net.DeviceId; - -/** - * Basic configuration for network infrastructure devices. - */ -public class BasicDeviceConfig extends BasicElementConfig<DeviceId> { - - public static final String TYPE = "type"; - public static final String DRIVER = "driver"; - public static final String MANAGEMENT_ADDRESS = "managementAddress"; - - /** - * Returns the device type. - * - * @return device type override - */ - public Device.Type type() { - return get(TYPE, Device.Type.SWITCH, Device.Type.class); - } - - /** - * Sets the device type. - * - * @param type device type override - * @return self - */ - public BasicDeviceConfig type(Device.Type type) { - return (BasicDeviceConfig) setOrClear(TYPE, type); - } - - /** - * Returns the device driver name. - * - * @return driver name of null if not set - */ - public String driver() { - return get(DRIVER, subject.toString()); - } - - /** - * Sets the driver name. - * - * @param driverName new driver name; null to clear - * @return self - */ - public BasicElementConfig driver(String driverName) { - return (BasicElementConfig) setOrClear(DRIVER, driverName); - } - - /** - * Returns the device management ip (ip:port). - * - * @return device management address (ip:port) or null if not set - */ - public String managementAddress() { - return get(MANAGEMENT_ADDRESS, null); - } - - /** - * Sets the driver name. - * - * @param managementAddress new device management address (ip:port); null to clear - * @return self - */ - public BasicElementConfig managementAddress(String managementAddress) { - return (BasicElementConfig) setOrClear(MANAGEMENT_ADDRESS, managementAddress); - } - - // TODO: device port meta-data to be configured via BasicPortsConfig - // TODO: device credentials/keys - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java deleted file mode 100644 index 7b3248c9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * 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.net.config.basics; - -/** - * Basic configuration for network elements, e.g. devices, hosts. Such elements - * can have a friendly name, geo-coordinates, logical rack coordinates and - * an owner entity. - */ -public abstract class BasicElementConfig<S> extends AllowedEntityConfig<S> { - - public static final String NAME = "name"; - - public static final String LATITUDE = "latitude"; - public static final String LONGITUDE = "longitude"; - - public static final String RACK_ADDRESS = "rackAddress"; - public static final String OWNER = "owner"; - - protected static final double DEFAULT_COORD = -1.0; - - /** - * Returns friendly label for the element. - * - * @return friendly label or element id itself if not set - */ - public String name() { - return get(NAME, subject.toString()); - } - - /** - * Sets friendly label for the element. - * - * @param name new friendly label; null to clear - * @return self - */ - public BasicElementConfig name(String name) { - return (BasicElementConfig) setOrClear(NAME, name); - } - - /** - * Returns element latitude. - * - * @return element latitude; -1 if not set - */ - public double latitude() { - return get(LATITUDE, DEFAULT_COORD); - } - - /** - * Sets the element latitude. - * - * @param latitude new latitude; null to clear - * @return self - */ - public BasicElementConfig latitude(Double latitude) { - return (BasicElementConfig) setOrClear(LATITUDE, latitude); - } - - /** - * Returns element latitude. - * - * @return element latitude; -1 if not set - */ - public double longitude() { - return get(LONGITUDE, DEFAULT_COORD); - } - - /** - * Sets the element longitude. - * - * @param longitude new longitude; null to clear - * @return self - */ - public BasicElementConfig longitude(Double longitude) { - return (BasicElementConfig) setOrClear(LONGITUDE, longitude); - } - - /** - * Returns the element rack address. - * - * @return rack address; null if not set - */ - public String rackAddress() { - return get(RACK_ADDRESS, null); - } - - /** - * Sets element rack address. - * - * @param address new rack address; null to clear - * @return self - */ - public BasicElementConfig rackAddress(String address) { - return (BasicElementConfig) setOrClear(RACK_ADDRESS, address); - } - - /** - * Returns owner of the element. - * - * @return owner or null if not set - */ - public String owner() { - return get(OWNER, null); - } - - /** - * Sets the owner of the element. - * - * @param owner new owner; null to clear - * @return self - */ - public BasicElementConfig owner(String owner) { - return (BasicElementConfig) setOrClear(OWNER, owner); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicFeatureConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicFeatureConfig.java deleted file mode 100644 index fcf24bc6..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicFeatureConfig.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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.net.config.basics; - -import org.onosproject.net.config.Config; - -/** - * Base abstraction for configuring feature on subject. - * - * @param <S> Subject type - */ -public abstract class BasicFeatureConfig<S> extends Config<S> { - - private static final String ENABLED = "enabled"; - - private final boolean defaultValue; - - protected BasicFeatureConfig(boolean defaultValue) { - this.defaultValue = defaultValue; - } - - /** - * Indicates whether the feature for the subject is enabled. - * - * @return true if feature is enabled - */ - public boolean enabled() { - return get(ENABLED, defaultValue); - } - - /** - * Specifies whether the feature for the subject is to be enabled. - * - * @param enabled true to enable; false to disable; null to clear - * @return self - */ - public BasicFeatureConfig<S> enabled(Boolean enabled) { - return (BasicFeatureConfig<S>) setOrClear(ENABLED, enabled); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicHostConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicHostConfig.java deleted file mode 100644 index 92946312..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicHostConfig.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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.net.config.basics; - -import com.fasterxml.jackson.databind.node.ArrayNode; -import org.onlab.packet.IpAddress; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.HostId; -import java.util.HashSet; -import java.util.Set; - -/** - * Basic configuration for network end-station hosts. - */ -public class BasicHostConfig extends BasicElementConfig<HostId> { - private static final String IPS = "ips"; - private static final String LOCATION = "location"; - - @Override - public boolean isValid() { - return hasOnlyFields(IPS, LOCATION) && - this.location() != null && - this.ipAddresses() != null; - } - - /** - * Gets location of the host. - * - * @return location of the host. Or null if not specified with correct format. - */ - public ConnectPoint location() { - String location = get(LOCATION, null); - - if (location != null) { - try { - return ConnectPoint.deviceConnectPoint(location); - } catch (Exception e) { - return null; - } - } - return null; - } - - /** - * Sets the location of the host. - * - * @param location location of the host. - * @return the config of the host. - */ - public BasicHostConfig setLocation(String location) { - return (BasicHostConfig) setOrClear(LOCATION, location); - } - - /** - * Gets IP addresses of the host. - * - * @return IP addresses of the host. Or null if not specified with correct format. - */ - public Set<IpAddress> ipAddresses() { - HashSet<IpAddress> ipAddresses = new HashSet<>(); - if (object.has(IPS)) { - ArrayNode ipNodes = (ArrayNode) object.path(IPS); - try { - ipNodes.forEach(ipNode -> { - ipAddresses.add(IpAddress.valueOf(ipNode.asText())); - }); - return ipAddresses; - } catch (Exception e) { - return null; - } - } - return null; - } - - /** - * Sets the IP addresses of the host. - * - * @param ipAddresses IP addresses of the host. - * @return the config of the host. - */ - public BasicHostConfig setIps(Set<IpAddress> ipAddresses) { - return (BasicHostConfig) setOrClear(IPS, ipAddresses); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java deleted file mode 100644 index ed807b8f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * 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.net.config.basics; - -import com.fasterxml.jackson.databind.JsonNode; -import org.onosproject.net.Link; -import org.onosproject.net.LinkKey; - -import java.time.Duration; - -import static org.onosproject.net.config.Config.FieldPresence.OPTIONAL; - -/** - * Basic configuration for network infrastructure link. - */ -public class BasicLinkConfig extends AllowedEntityConfig<LinkKey> { - - public static final String TYPE = "type"; - public static final String METRIC = "metric"; - public static final String LATENCY = "latency"; - public static final String BANDWIDTH = "bandwidth"; - public static final String IS_DURABLE = "durable"; - - @Override - public boolean isValid() { - return hasOnlyFields(TYPE, METRIC, LATENCY, BANDWIDTH, IS_DURABLE) && - isNumber(METRIC, OPTIONAL) && isNumber(LATENCY, OPTIONAL) && - isNumber(BANDWIDTH, OPTIONAL); - } - - /** - * Returns the link type. - * - * @return link type override - */ - public Link.Type type() { - return get(TYPE, Link.Type.DIRECT, Link.Type.class); - } - - /** - * Sets the link type. - * - * @param type link type override - * @return self - */ - public BasicLinkConfig type(Link.Type type) { - return (BasicLinkConfig) setOrClear(TYPE, type); - } - - /** - * Returns link metric value for use by - * {@link org.onosproject.net.topology.MetricLinkWeight} function. - * - * @return link metric; -1 if not set - */ - public double metric() { - return get(METRIC, -1); - } - - /** - * Sets the link metric for use by - * {@link org.onosproject.net.topology.MetricLinkWeight} function. - * - * @param metric new metric; null to clear - * @return self - */ - public BasicLinkConfig metric(Double metric) { - return (BasicLinkConfig) setOrClear(METRIC, metric); - } - - /** - * Returns link latency in terms of nanos. - * - * @return link latency; -1 if not set - */ - public Duration latency() { - return Duration.ofNanos(get(LATENCY, -1)); - } - - /** - * Sets the link latency. - * - * @param latency new latency; null to clear - * @return self - */ - public BasicLinkConfig latency(Duration latency) { - Long nanos = latency == null ? null : latency.toNanos(); - return (BasicLinkConfig) setOrClear(LATENCY, nanos); - } - - /** - * Returns link bandwidth in terms of Mbps. - * - * @return link bandwidth; -1 if not set - */ - public long bandwidth() { - return get(BANDWIDTH, -1); - } - - /** - * Sets the link bandwidth. - * - * @param bandwidth new bandwidth; null to clear - * @return self - */ - public BasicLinkConfig bandwidth(Long bandwidth) { - return (BasicLinkConfig) setOrClear(BANDWIDTH, bandwidth); - } - - /** - * Returns if link is durable in the network model or not. - * - * @return true for durable, false otherwise - */ - public Boolean isDurable() { - JsonNode res = object.path(IS_DURABLE); - if (res.isMissingNode()) { - return null; - } - return res.asBoolean(); - } - - /** - * Sets durability for this link. - * - * @param isDurable true for durable, false otherwise - * @return this BasicLinkConfig - */ - public BasicLinkConfig isDurable(Boolean isDurable) { - return (BasicLinkConfig) setOrClear(IS_DURABLE, isDurable); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java deleted file mode 100644 index dfb494d6..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * 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.net.config.basics; - -import java.util.Optional; - -import org.onosproject.net.config.Config; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.Port; - -import com.fasterxml.jackson.databind.JsonNode; - - -/** - * Configurations for an optical port on a device. - */ -public class OpticalPortConfig extends Config<ConnectPoint> { - // optical type {OMS, OCH, ODUClt, fiber} - public static final String TYPE = "type"; - - // port name. "name" is the alphanumeric name of the port, but "port" refers - // to the port number used as a name string (i.e., for ports without - // alphanumeric names). - public static final String NAME = "name"; - public static final String PORT = "port"; - public static final String STATIC_PORT = "staticPort"; - public static final String STATIC_LAMBDA = "staticLambda"; - - // **Linc-OE : remove if it's not needed after all.** - public static final String SPEED = "speed"; - - /** - * Returns the Enum value representing the type of port. - * - * @return the port type, or null if invalid or unset - */ - public Port.Type type() { - JsonNode type = object.path(TYPE); - if (type.isMissingNode()) { - return null; - } - return Port.Type.valueOf(type.asText()); - } - - /** - * Returns the port name associated with this port configuration. The Name - * is an alphanumeric string. - * - * @return the name of this port, else, an empty string - */ - public String name() { - return getStringValue(NAME); - } - - /** - * Returns a stringified representation of the port number, configured in - * some port types without an alphanumeric name as the port name. - * - * @return A string representation of the port number - */ - public String numberName() { - return getStringValue(PORT); - } - - /** - * Returns the string-representation of name of the output port. This is - * usually an OMS port for an OCH input ports, or an OCH port for ODU input - * ports. - * - * @return the name of this port, else, an empty string - */ - public String staticPort() { - return getStringValue(STATIC_PORT); - } - - private String getStringValue(String field) { - JsonNode name = object.path(field); - return name.isMissingNode() ? "" : name.asText(); - } - - /** - * Returns the output lambda configured for this port. The lambda value is - * expressed as a frequency value. If the port type doesn't have a notion of - * lambdas, this returns an empty Optional. - * - * @return an Optional that may contain a frequency value. - */ - public Optional<Long> staticLambda() { - JsonNode sl = object.path(STATIC_LAMBDA); - if (sl.isMissingNode()) { - return Optional.empty(); - } - return Optional.of(sl.asLong()); - } - - /** - * Returns the port speed configured for this port. If the port doesn't have - * a notion of speed, this returns an empty Optional. - * - * @return a port speed value whose default is 0. - */ - public Optional<Integer> speed() { - JsonNode s = object.path(SPEED); - if (s.isMissingNode()) { - return Optional.empty(); - } - return Optional.of(s.asInt()); - } - - /** - * Sets the port type, or updates it if it's already set. A null argument removes - * this field. - * - * @param type the port type - * @return this OpticalPortConfig instance - */ - public OpticalPortConfig portType(Port.Type type) { - // if unspecified, ideally fall back on FIBER or PACKET. - String pt = (type == null) ? null : type.toString(); - return (OpticalPortConfig) setOrClear(TYPE, pt); - } - - /** - * Sets the port name, or updates it if already set. A null argument removes - * this field. - * - * @param name the port's name - * @return this OpticalPortConfig instance - */ - public OpticalPortConfig portName(String name) { - return (OpticalPortConfig) setOrClear(NAME, name); - } - - /** - * Sets the port name from port number, or updates it if already set. A null - * argument removes this field. - * - * @param name the port number, to be used as name - * @return this OpticalPortConfig instance - */ - public OpticalPortConfig portNumberName(Long name) { - return (OpticalPortConfig) setOrClear(PORT, name); - } - - /** - * Sets the output port name, or updates it if already set. A null argument - * removes this field. - * - * @param name the output port's name - * @return this OpticalPortConfig instance - */ - public OpticalPortConfig staticPort(String name) { - return (OpticalPortConfig) setOrClear(STATIC_PORT, name); - } - - /** - * Sets the output lambda index, or updates it if already set. A null argument - * removes this field. - * - * @param index the output lambda - * @return this OpticalPortConfig instance - */ - public OpticalPortConfig staticLambda(Long index) { - return (OpticalPortConfig) setOrClear(STATIC_LAMBDA, index); - } - - /** - * Sets the port speed, or updates it if already set. A null argument - * removes this field. - * - * @param bw the port bandwidth - * @return this OpticalPortConfig instance - */ - public OpticalPortConfig speed(Integer bw) { - return (OpticalPortConfig) setOrClear(SPEED, bw); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/SubjectFactories.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/SubjectFactories.java deleted file mode 100644 index 311566b3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/SubjectFactories.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * 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.net.config.basics; - -import org.onosproject.core.ApplicationId; -import org.onosproject.core.CoreService; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.HostId; -import org.onosproject.net.LinkKey; -import org.onosproject.net.config.SubjectFactory; - -import static com.google.common.base.Preconditions.checkArgument; - -/** - * Set of subject factories for potential configuration subjects. - */ -public final class SubjectFactories { - - // Construction forbidden - private SubjectFactories() { - } - - // Required for resolving application identifiers - private static CoreService coreService; - - public static final SubjectFactory<ApplicationId> APP_SUBJECT_FACTORY = - new SubjectFactory<ApplicationId>(ApplicationId.class, "apps") { - @Override - public ApplicationId createSubject(String key) { - return coreService.registerApplication(key); - } - @Override - public String subjectKey(ApplicationId subject) { - return subject.name(); - } - }; - - public static final SubjectFactory<DeviceId> DEVICE_SUBJECT_FACTORY = - new SubjectFactory<DeviceId>(DeviceId.class, "devices") { - @Override - public DeviceId createSubject(String key) { - return DeviceId.deviceId(key); - } - }; - - public static final SubjectFactory<ConnectPoint> CONNECT_POINT_SUBJECT_FACTORY = - new SubjectFactory<ConnectPoint>(ConnectPoint.class, "ports") { - @Override - public ConnectPoint createSubject(String key) { - return ConnectPoint.deviceConnectPoint(key); - } - @Override - public String subjectKey(ConnectPoint subject) { - return key(subject); - } - }; - - public static final SubjectFactory<HostId> HOST_SUBJECT_FACTORY = - new SubjectFactory<HostId>(HostId.class, "hosts") { - @Override - public HostId createSubject(String key) { - return HostId.hostId(key); - } - }; - - public static final SubjectFactory<LinkKey> LINK_SUBJECT_FACTORY = - new SubjectFactory<LinkKey>(LinkKey.class, "links") { - @Override - public LinkKey createSubject(String key) { - String[] cps = key.split("-"); - checkArgument(cps.length == 2, "Incorrect link key format: %s", key); - return LinkKey.linkKey(ConnectPoint.deviceConnectPoint(cps[0]), - ConnectPoint.deviceConnectPoint(cps[1])); - } - @Override - public String subjectKey(LinkKey subject) { - return key(subject.src()) + "-" + key(subject.dst()); - } - }; - - /** - * Provides reference to the core service, which is required for - * application subject factory. - * - * @param service core service reference - */ - public static void setCoreService(CoreService service) { - coreService = service; - } - - private static String key(ConnectPoint subject) { - return subject.deviceId() + "/" + subject.port(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/package-info.java deleted file mode 100644 index 4d0f27e9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/** - * Various basic builtin network configurations. - */ -package org.onosproject.net.config.basics;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/package-info.java deleted file mode 100644 index f300717a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/** - * Subsystem for tracking network environment configuration. - */ -package org.onosproject.net.config; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java deleted file mode 100644 index 9074792c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultDeviceDescription.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 2014-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.net.device; - -import org.onosproject.net.AbstractDescription; -import org.onosproject.net.SparseAnnotations; -import org.onlab.packet.ChassisId; - -import java.net.URI; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; -import static org.onosproject.net.Device.Type; -import com.google.common.base.Objects; - -/** - * Default implementation of immutable device description entity. - */ -public class DefaultDeviceDescription extends AbstractDescription - implements DeviceDescription { - private final URI uri; - private final Type type; - private final String manufacturer; - private final String hwVersion; - private final String swVersion; - private final String serialNumber; - private final ChassisId chassisId; - - /** - * Creates a device description using the supplied information. - * - * @param uri device URI - * @param type device type - * @param manufacturer device manufacturer - * @param hwVersion device HW version - * @param swVersion device SW version - * @param serialNumber device serial number - * @param chassis chassis id - * @param annotations optional key/value annotations map - */ - public DefaultDeviceDescription(URI uri, Type type, String manufacturer, - String hwVersion, String swVersion, - String serialNumber, ChassisId chassis, - SparseAnnotations... annotations) { - super(annotations); - this.uri = checkNotNull(uri, "Device URI cannot be null"); - this.type = checkNotNull(type, "Device type cannot be null"); - this.manufacturer = manufacturer; - this.hwVersion = hwVersion; - this.swVersion = swVersion; - this.serialNumber = serialNumber; - this.chassisId = chassis; - } - - /** - * Creates a device description using the supplied information. - * @param base DeviceDescription to basic information - * @param annotations Annotations to use. - */ - public DefaultDeviceDescription(DeviceDescription base, - SparseAnnotations... annotations) { - this(base.deviceUri(), base.type(), base.manufacturer(), - base.hwVersion(), base.swVersion(), base.serialNumber(), - base.chassisId(), annotations); - } - - /** - * Creates a device description using the supplied information. - * @param base DeviceDescription to basic information (except for type) - * @param type device type - * @param annotations Annotations to use. - */ - public DefaultDeviceDescription(DeviceDescription base, Type type, SparseAnnotations... annotations) { - this(base.deviceUri(), type, base.manufacturer(), - base.hwVersion(), base.swVersion(), base.serialNumber(), - base.chassisId(), annotations); - } - - @Override - public URI deviceUri() { - return uri; - } - - @Override - public Type type() { - return type; - } - - @Override - public String manufacturer() { - return manufacturer; - } - - @Override - public String hwVersion() { - return hwVersion; - } - - @Override - public String swVersion() { - return swVersion; - } - - @Override - public String serialNumber() { - return serialNumber; - } - - @Override - public ChassisId chassisId() { - return chassisId; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("uri", uri).add("type", type).add("mfr", manufacturer) - .add("hw", hwVersion).add("sw", swVersion) - .add("serial", serialNumber) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hashCode(super.hashCode(), uri, type, manufacturer, - hwVersion, swVersion, serialNumber, chassisId); - } - - @Override - public boolean equals(Object object) { - if (object instanceof DefaultDeviceDescription) { - if (!super.equals(object)) { - return false; - } - DefaultDeviceDescription that = (DefaultDeviceDescription) object; - return Objects.equal(this.uri, that.uri) - && Objects.equal(this.type, that.type) - && Objects.equal(this.manufacturer, that.manufacturer) - && Objects.equal(this.hwVersion, that.hwVersion) - && Objects.equal(this.swVersion, that.swVersion) - && Objects.equal(this.serialNumber, that.serialNumber) - && Objects.equal(this.chassisId, that.chassisId); - } - return false; - } - - // default constructor for serialization - private DefaultDeviceDescription() { - this.uri = null; - this.type = null; - this.manufacturer = null; - this.hwVersion = null; - this.swVersion = null; - this.serialNumber = null; - this.chassisId = null; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java deleted file mode 100644 index d62e932c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2014 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.net.device; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.AbstractDescription; -import org.onosproject.net.PortNumber; -import org.onosproject.net.SparseAnnotations; - -import static org.onosproject.net.Port.Type; -import com.google.common.base.Objects; - -/** - * Default implementation of immutable port description. - */ -public class DefaultPortDescription extends AbstractDescription - implements PortDescription { - - private static final long DEFAULT_SPEED = 1_000; - - private final PortNumber number; - private final boolean isEnabled; - private final Type type; - private final long portSpeed; - - /** - * Creates a port description using the supplied information. - * - * @param number port number - * @param isEnabled port enabled state - * @param annotations optional key/value annotations map - */ - public DefaultPortDescription(PortNumber number, boolean isEnabled, - SparseAnnotations... annotations) { - this(number, isEnabled, Type.COPPER, DEFAULT_SPEED, annotations); - } - - /** - * Creates a port description using the supplied information. - * - * @param number port number - * @param isEnabled port enabled state - * @param type port type - * @param portSpeed port speed in Mbps - * @param annotations optional key/value annotations map - */ - public DefaultPortDescription(PortNumber number, boolean isEnabled, - Type type, long portSpeed, - SparseAnnotations...annotations) { - super(annotations); - this.number = number; - this.isEnabled = isEnabled; - this.type = type; - this.portSpeed = portSpeed; - } - - // Default constructor for serialization - private DefaultPortDescription() { - this.number = null; - this.isEnabled = false; - this.portSpeed = DEFAULT_SPEED; - this.type = Type.COPPER; - } - - /** - * Creates a port description using the supplied information. - * - * @param base PortDescription to get basic information from - * @param annotations optional key/value annotations map - */ - public DefaultPortDescription(PortDescription base, - SparseAnnotations annotations) { - this(base.portNumber(), base.isEnabled(), base.type(), base.portSpeed(), - annotations); - } - - @Override - public PortNumber portNumber() { - return number; - } - - @Override - public boolean isEnabled() { - return isEnabled; - } - - @Override - public Type type() { - return type; - } - - @Override - public long portSpeed() { - return portSpeed; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("number", number) - .add("isEnabled", isEnabled) - .add("type", type) - .add("portSpeed", portSpeed) - .add("annotations", annotations()) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hashCode(super.hashCode(), number, isEnabled, type, - portSpeed); - } - - @Override - public boolean equals(Object object) { - if (object != null && getClass() == object.getClass()) { - if (!super.equals(object)) { - return false; - } - DefaultPortDescription that = (DefaultPortDescription) object; - return Objects.equal(this.number, that.number) - && Objects.equal(this.isEnabled, that.isEnabled) - && Objects.equal(this.type, that.type) - && Objects.equal(this.portSpeed, that.portSpeed); - } - return false; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultPortStatistics.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultPortStatistics.java deleted file mode 100644 index 540a945f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DefaultPortStatistics.java +++ /dev/null @@ -1,346 +0,0 @@ -/* - * 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.net.device; - -import org.onosproject.net.DeviceId; - -/** - * Default implementation of immutable port statistics. - */ -public final class DefaultPortStatistics implements PortStatistics { - - private final DeviceId deviceId; - private final int port; - private final long packetsReceived; - private final long packetsSent; - private final long bytesReceived; - private final long bytesSent; - private final long packetsRxDropped; - private final long packetsTxDropped; - private final long packetsRxErrors; - private final long packetsTxErrors; - private final long durationSec; - private final long durationNano; - - private DefaultPortStatistics(DeviceId deviceId, - int port, - long packetsReceived, - long packetsSent, - long bytesReceived, - long bytesSent, - long packetsRxDropped, - long packetsTxDropped, - long packetsRxErrors, - long packetsTxErrors, - long durationSec, - long durationNano) { - this.deviceId = deviceId; - this.port = port; - this.packetsReceived = packetsReceived; - this.packetsSent = packetsSent; - this.bytesReceived = bytesReceived; - this.bytesSent = bytesSent; - this.packetsRxDropped = packetsRxDropped; - this.packetsTxDropped = packetsTxDropped; - this.packetsRxErrors = packetsRxErrors; - this.packetsTxErrors = packetsTxErrors; - this.durationSec = durationSec; - this.durationNano = durationNano; - } - - // Constructor for serializer - private DefaultPortStatistics() { - this.deviceId = null; - this.port = 0; - this.packetsReceived = 0; - this.packetsSent = 0; - this.bytesReceived = 0; - this.bytesSent = 0; - this.packetsRxDropped = 0; - this.packetsTxDropped = 0; - this.packetsRxErrors = 0; - this.packetsTxErrors = 0; - this.durationSec = 0; - this.durationNano = 0; - } - - /** - * Creates a builder for DefaultPortStatistics object. - * - * @return builder object for DefaultPortStatistics object - */ - public static DefaultPortStatistics.Builder builder() { - return new Builder(); - } - - @Override - public int port() { - return this.port; - } - - @Override - public long packetsReceived() { - return this.packetsReceived; - } - - @Override - public long packetsSent() { - return this.packetsSent; - } - - @Override - public long bytesReceived() { - return this.bytesReceived; - } - - @Override - public long bytesSent() { - return this.bytesSent; - } - - @Override - public long packetsRxDropped() { - return this.packetsRxDropped; - } - - @Override - public long packetsTxDropped() { - return this.packetsTxDropped; - } - - @Override - public long packetsRxErrors() { - return this.packetsRxErrors; - } - - @Override - public long packetsTxErrors() { - return this.packetsTxErrors; - } - - @Override - public long durationSec() { - return this.durationSec; - } - - @Override - public long durationNano() { - return this.durationNano; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder("device: " + deviceId + ", "); - - sb.append("port: " + this.port + ", "); - sb.append("pktRx: " + this.packetsReceived + ", "); - sb.append("pktTx: " + this.packetsSent + ", "); - sb.append("byteRx: " + this.bytesReceived + ", "); - sb.append("byteTx: " + this.bytesSent + ", "); - sb.append("pktRxErr: " + this.packetsRxErrors + ", "); - sb.append("pktTxErr: " + this.packetsTxErrors + ", "); - sb.append("pktRxDrp: " + this.packetsRxDropped + ", "); - sb.append("pktTxDrp: " + this.packetsTxDropped); - - return sb.toString(); - } - - public static final class Builder { - - DeviceId deviceId; - int port; - long packetsReceived; - long packetsSent; - long bytesReceived; - long bytesSent; - long packetsRxDropped; - long packetsTxDropped; - long packetsRxErrors; - long packetsTxErrors; - long durationSec; - long durationNano; - - private Builder() { - - } - - /** - * Sets port number. - * - * @param port port number - * @return builder object - */ - public Builder setPort(int port) { - this.port = port; - - return this; - } - - /** - * Sets the device identifier. - * - * @param deviceId device identifier - * @return builder object - */ - public Builder setDeviceId(DeviceId deviceId) { - this.deviceId = deviceId; - - return this; - } - - /** - * Sets the number of packet received. - * - * @param packets number of packets received - * @return builder object - */ - public Builder setPacketsReceived(long packets) { - packetsReceived = packets; - - return this; - } - - /** - * Sets the number of packets sent. - * - * @param packets number of packets sent - * @return builder object - */ - public Builder setPacketsSent(long packets) { - packetsSent = packets; - - return this; - } - - /** - * Sets the number of received bytes. - * - * @param bytes number of received bytes. - * @return builder object - */ - public Builder setBytesReceived(long bytes) { - bytesReceived = bytes; - - return this; - } - - /** - * Sets the number of sent bytes. - * - * @param bytes number of sent bytes - * @return builder object - */ - public Builder setBytesSent(long bytes) { - bytesSent = bytes; - - return this; - } - - /** - * Sets the number of packets dropped by RX. - * - * @param packets number of packets dropped by RX - * @return builder object - */ - public Builder setPacketsRxDropped(long packets) { - packetsRxDropped = packets; - - return this; - } - - /** - * Sets the number of packets dropped by TX. - * - * @param packets number of packets - * @return builder object - */ - public Builder setPacketsTxDropped(long packets) { - packetsTxDropped = packets; - - return this; - } - - /** - * Sets the number of receive errors. - * - * @param packets number of receive errors - * @return builder object - */ - public Builder setPacketsRxErrors(long packets) { - packetsRxErrors = packets; - - return this; - } - - /** - * Sets the number of transmit errors. - * - * @param packets number of transmit errors - * @return builder object - */ - public Builder setPacketsTxErrors(long packets) { - packetsTxErrors = packets; - - return this; - } - - /** - * Sets the time port has been alive in seconds. - * - * @param sec time port has been alive in seconds - * @return builder object - */ - public Builder setDurationSec(long sec) { - durationSec = sec; - - return this; - } - - /** - * Sets the time port has been alive in nano seconds. - * - * @param nano time port has been alive in nano seconds - * @return builder object - */ - public Builder setDurationNano(long nano) { - durationNano = nano; - - return this; - } - - /** - * Creates a PortStatistics object. - * - * @return DefaultPortStatistics object - */ - public DefaultPortStatistics build() { - return new DefaultPortStatistics( - deviceId, - port, - packetsReceived, - packetsSent, - bytesReceived, - bytesSent, - packetsRxDropped, - packetsTxDropped, - packetsRxErrors, - packetsTxErrors, - durationSec, - durationNano); - } - - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceAdminService.java deleted file mode 100644 index 500b6359..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceAdminService.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2014-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.net.device; - -import org.onosproject.net.DeviceId; - -/** - * Service for administering the inventory of infrastructure devices. - */ -public interface DeviceAdminService extends DeviceService { - - /** - * Removes the device with the specified identifier. - * - * @param deviceId device identifier - */ - void removeDevice(DeviceId deviceId); - - // TODO: add ability to administratively suspend/resume device - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceClockService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceClockService.java deleted file mode 100644 index 5391999a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceClockService.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2014 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.net.device; - -import org.onosproject.net.DeviceId; -import org.onosproject.store.Timestamp; - -/** - * Interface for a logical clock service that vends per device timestamps. - */ -public interface DeviceClockService { - - /** - * Checks if this service can issue Timestamp for specified device. - * - * @param deviceId device identifier. - * @return true if timestamp can be issued for specified device - */ - boolean isTimestampAvailable(DeviceId deviceId); - - /** - * Returns a new timestamp for the specified deviceId. - * - * @param deviceId device identifier. - * @return timestamp. - */ - Timestamp getTimestamp(DeviceId deviceId); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceDescription.java deleted file mode 100644 index f206b080..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceDescription.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2014-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.net.device; - -import org.onosproject.net.Description; -import org.onosproject.net.Device; -import org.onlab.packet.ChassisId; - -import java.net.URI; - -/** - * Carrier of immutable information about a device. - */ -public interface DeviceDescription extends Description { - - /** - * Protocol/provider specific URI that can be used to encode the identity - * information required to communicate with the device externally, e.g. - * datapath ID. - * - * @return provider specific URI for the device - */ - URI deviceUri(); - - /** - * Returns the type of the infrastructure device. - * - * @return type of the device - */ - Device.Type type(); - - /** - * Returns the device manufacturer name. - * - * @return manufacturer name - */ - String manufacturer(); - - /** - * Returns the device hardware version. - * - * @return hardware version - */ - String hwVersion(); - - /** - * Returns the device software version. - * - * @return software version - */ - String swVersion(); - - /** - * Returns the device serial number. - * - * @return serial number - */ - String serialNumber(); - - /** - * Returns a device chassis id. - * - * @return chassis id - */ - ChassisId chassisId(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceEvent.java deleted file mode 100644 index 18ab046f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceEvent.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2014-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.net.device; - -import org.joda.time.LocalDateTime; -import org.onosproject.event.AbstractEvent; -import org.onosproject.net.Device; -import org.onosproject.net.Port; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Describes infrastructure device event. - */ -public class DeviceEvent extends AbstractEvent<DeviceEvent.Type, Device> { - - private final Port port; - - /** - * Type of device events. - */ - public enum Type { - /** - * Signifies that a new device has been detected. - */ - DEVICE_ADDED, - - /** - * Signifies that some device attributes have changed; excludes - * availability changes. - */ - DEVICE_UPDATED, - - /** - * Signifies that a device has been removed. - */ - DEVICE_REMOVED, - - /** - * Signifies that a device has been administratively suspended. - */ - DEVICE_SUSPENDED, - - /** - * Signifies that a device has come online or has gone offline. - */ - DEVICE_AVAILABILITY_CHANGED, - - /** - * Signifies that a port has been added. - */ - PORT_ADDED, - - /** - * Signifies that a port has been updated. - */ - PORT_UPDATED, - - /** - * Signifies that a port has been removed. - */ - PORT_REMOVED, - - /** - * Signifies that port statistics has been updated. - */ - PORT_STATS_UPDATED - } - - /** - * Creates an event of a given type and for the specified device and the - * current time. - * - * @param type device event type - * @param device event device subject - */ - public DeviceEvent(Type type, Device device) { - this(type, device, null); - } - - /** - * Creates an event of a given type and for the specified device, port - * and the current time. - * - * @param type device event type - * @param device event device subject - * @param port optional port subject - */ - public DeviceEvent(Type type, Device device, Port port) { - super(type, device); - this.port = port; - } - - /** - * Creates an event of a given type and for the specified device and time. - * - * @param type device event type - * @param device event device subject - * @param port optional port subject - * @param time occurrence time - */ - public DeviceEvent(Type type, Device device, Port port, long time) { - super(type, device, time); - this.port = port; - } - - /** - * Returns the port subject. - * - * @return port subject or null if the event is not port specific. - */ - public Port port() { - return port; - } - - @Override - public String toString() { - if (port == null) { - return super.toString(); - } - return toStringHelper(this) - .add("time", new LocalDateTime(time())) - .add("type", type()) - .add("subject", subject()) - .add("port", port) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceListener.java deleted file mode 100644 index c9809b81..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.device; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving infrastructure device related events. - */ -public interface DeviceListener extends EventListener<DeviceEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java deleted file mode 100644 index d8adbb0e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProvider.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2014 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.net.device; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.MastershipRole; -import org.onosproject.net.provider.Provider; - -/** - * Abstraction of a device information provider. - */ -public interface DeviceProvider extends Provider { - - // TODO: consider how dirty the triggerProbe gets; if it costs too much, let's drop it - - /** - * Triggers an asynchronous probe of the specified device, intended to - * determine whether the device is present or not. An indirect result of this - * should be invocation of - * {@link org.onosproject.net.device.DeviceProviderService#deviceConnected} )} or - * {@link org.onosproject.net.device.DeviceProviderService#deviceDisconnected} - * at some later point in time. - * - * @param deviceId ID of device to be probed - */ - void triggerProbe(DeviceId deviceId); - - /** - * Notifies the provider of a mastership role change for the specified - * device as decided by the core. - * - * @param deviceId device identifier - * @param newRole newly determined mastership role - */ - void roleChanged(DeviceId deviceId, MastershipRole newRole); - - /** - * Checks the reachability (connectivity) of a device from this provider. - * - * @param deviceId device identifier - * @return true if reachable, false otherwise - */ - boolean isReachable(DeviceId deviceId); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProviderRegistry.java deleted file mode 100644 index a7ab7e36..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProviderRegistry.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.device; - -import org.onosproject.net.provider.ProviderRegistry; - -/** - * Abstraction of a device provider registry. - */ -public interface DeviceProviderRegistry - extends ProviderRegistry<DeviceProvider, DeviceProviderService> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java deleted file mode 100644 index e266df09..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceProviderService.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2014-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.net.device; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.MastershipRole; -import org.onosproject.net.provider.ProviderService; - -import java.util.Collection; -import java.util.List; - -/** - * Service through which device providers can inject device information into - * the core. - */ -public interface DeviceProviderService extends ProviderService<DeviceProvider> { - - // TODO: define suspend and remove actions on the mezzanine administrative API - - /** - * Signals the core that a device has connected or has been detected somehow. - * - * @param deviceId device identifier - * @param deviceDescription information about network device - */ - void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription); - - /** - * Signals the core that a device has disconnected or is no longer reachable. - * - * @param deviceId identity of the device to be removed - */ - void deviceDisconnected(DeviceId deviceId); - - /** - * Sends information about all ports of a device. It is up to the core to - * determine what has changed. - * - * @param deviceId identity of the device - * @param portDescriptions list of device ports - */ - void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions); - - /** - * Used to notify the core about port status change of a single port. - * - * @param deviceId identity of the device - * @param portDescription description of the port that changed - */ - void portStatusChanged(DeviceId deviceId, PortDescription portDescription); - - /** - * Notifies the core about the result of a RoleRequest sent to a device. - * - * @param deviceId identity of the device - * @param requested mastership role that was requested by the node - * @param response mastership role the switch accepted - */ - void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response); - - /** - * Sends statistics about all ports of a device. - * - * @param deviceId identity of the device - * @param portStatistics list of device port statistics - */ - void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceService.java deleted file mode 100644 index f4671fb4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceService.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2014-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.net.device; - -import org.onosproject.event.ListenerService; -import org.onosproject.net.Device; -import org.onosproject.net.DeviceId; -import org.onosproject.net.MastershipRole; -import org.onosproject.net.Port; -import org.onosproject.net.PortNumber; - -import java.util.List; - -/** - * Service for interacting with the inventory of infrastructure devices. - */ -public interface DeviceService - extends ListenerService<DeviceEvent, DeviceListener> { - - /** - * Returns the number of infrastructure devices known to the system. - * - * @return number of infrastructure devices - */ - int getDeviceCount(); - - /** - * Returns a collection of the currently known infrastructure - * devices. - * - * @return collection of devices - */ - Iterable<Device> getDevices(); - - /** - * Returns a collection of the currently known infrastructure - * devices by device type. - * - * @param type device type - * @return collection of devices - */ - Iterable<Device> getDevices(Device.Type type); - - /** - * Returns an iterable collection of all devices - * currently available to the system. - * - * @return device collection - */ - Iterable<Device> getAvailableDevices(); - - /** - * Returns an iterable collection of all devices currently available to the system by device type. - * - * @param type device type - * @return device collection - */ - Iterable<Device> getAvailableDevices(Device.Type type); - - /** - * Returns the device with the specified identifier. - * - * @param deviceId device identifier - * @return device or null if one with the given identifier is not known - */ - Device getDevice(DeviceId deviceId); - - /** - * Returns the current mastership role for the specified device. - * - * @param deviceId device identifier - * @return designated mastership role - */ - //XXX do we want this method here when MastershipService already does? - MastershipRole getRole(DeviceId deviceId); - - - /** - * Returns the list of ports associated with the device. - * - * @param deviceId device identifier - * @return list of ports - */ - List<Port> getPorts(DeviceId deviceId); - - /** - * Returns the list of port statistics associated with the device. - * - * @param deviceId device identifier - * @return list of port statistics - */ - List<PortStatistics> getPortStatistics(DeviceId deviceId); - - /** - * Returns the list of port delta statistics associated with the device. - * - * @param deviceId device identifier - * @return list of port statistics - */ - List<PortStatistics> getPortDeltaStatistics(DeviceId deviceId); - - /** - * Returns the port with the specified number and hosted by the given device. - * - * @param deviceId device identifier - * @param portNumber port number - * @return device port - */ - Port getPort(DeviceId deviceId, PortNumber portNumber); - - /** - * Indicates whether or not the device is presently online and available. - * - * @param deviceId device identifier - * @return true if the device is available - */ - boolean isAvailable(DeviceId deviceId); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java deleted file mode 100644 index 851b9709..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceStore.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 2014-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.net.device; - -import org.onosproject.net.Device; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Port; -import org.onosproject.net.PortNumber; -import org.onosproject.net.provider.ProviderId; -import org.onosproject.store.Store; - -import java.util.Collection; -import java.util.List; - -/** - * Manages inventory of infrastructure devices; not intended for direct use. - */ -public interface DeviceStore extends Store<DeviceEvent, DeviceStoreDelegate> { - - /** - * Returns the number of devices known to the system. - * - * @return number of devices - */ - int getDeviceCount(); - - /** - * Returns an iterable collection of all devices known to the system. - * - * @return device collection - */ - Iterable<Device> getDevices(); - - /** - * Returns an iterable collection of all devices currently available to the system. - * - * @return device collection - */ - Iterable<Device> getAvailableDevices(); - - - - /** - * Returns the device with the specified identifier. - * - * @param deviceId device identifier - * @return device - */ - Device getDevice(DeviceId deviceId); - - /** - * Creates a new infrastructure device, or updates an existing one using - * the supplied device description. - * - * @param providerId provider identifier - * @param deviceId device identifier - * @param deviceDescription device description - * @return ready to send event describing what occurred; null if no change - */ - DeviceEvent createOrUpdateDevice(ProviderId providerId, DeviceId deviceId, - DeviceDescription deviceDescription); - - // TODO: We may need to enforce that ancillary cannot interfere this state - /** - * Removes the specified infrastructure device. - * - * @param deviceId device identifier - * @return ready to send event describing what occurred; null if no change - */ - DeviceEvent markOffline(DeviceId deviceId); - - /** - * Updates the ports of the specified infrastructure device using the given - * list of port descriptions. The list is assumed to be comprehensive. - * - * @param providerId provider identifier - * @param deviceId device identifier - * @param portDescriptions list of port descriptions - * @return ready to send events describing what occurred; empty list if no change - */ - List<DeviceEvent> updatePorts(ProviderId providerId, DeviceId deviceId, - List<PortDescription> portDescriptions); - - /** - * Updates the port status of the specified infrastructure device using the - * given port description. - * - * @param providerId provider identifier - * @param deviceId device identifier - * @param portDescription port description - * @return ready to send event describing what occurred; null if no change - */ - DeviceEvent updatePortStatus(ProviderId providerId, DeviceId deviceId, - PortDescription portDescription); - - /** - * Returns the list of ports that belong to the specified device. - * - * @param deviceId device identifier - * @return list of device ports - */ - List<Port> getPorts(DeviceId deviceId); - - /** - * Updates the port statistics of the specified device using the give port - * statistics. - * - * @param providerId provider identifier - * @param deviceId device identifier - * @param portStats list of port statistics - * @return ready to send event describing what occurred; - */ - DeviceEvent updatePortStatistics(ProviderId providerId, DeviceId deviceId, - Collection<PortStatistics> portStats); - - /** - * Returns the list of port statistics of the specified device. - * - * @param deviceId device identifier - * @return list of port statistics of all ports of the device - */ - List<PortStatistics> getPortStatistics(DeviceId deviceId); - - /** - * Returns the list of delta port statistics of the specified device. - * - * @param deviceId device identifier - * @return list of delta port statistics of all ports of the device - */ - List<PortStatistics> getPortDeltaStatistics(DeviceId deviceId); - - /** - * Returns the specified device port. - * - * @param deviceId device identifier - * @param portNumber port number - * @return device port - */ - Port getPort(DeviceId deviceId, PortNumber portNumber); - - /** - * Indicates whether the specified device is available/online. - * - * @param deviceId device identifier - * @return true if device is available - */ - boolean isAvailable(DeviceId deviceId); - - /** - * Administratively removes the specified device from the store. - * - * @param deviceId device to be removed - * @return null if no such device, or was forwarded to remove master - */ - DeviceEvent removeDevice(DeviceId deviceId); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceStoreDelegate.java deleted file mode 100644 index 1a4fc67d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/DeviceStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.device; - -import org.onosproject.store.StoreDelegate; - -/** - * Infrastructure device store delegate abstraction. - */ -public interface DeviceStoreDelegate extends StoreDelegate<DeviceEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OchPortDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OchPortDescription.java deleted file mode 100644 index c3a7f415..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OchPortDescription.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * 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.net.device; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.OchSignal; -import org.onosproject.net.OduSignalType; -import org.onosproject.net.Port; -import org.onosproject.net.PortNumber; -import org.onosproject.net.SparseAnnotations; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default implementation of immutable OCh port description. - */ -public class OchPortDescription extends DefaultPortDescription { - - private final OduSignalType signalType; - private final boolean isTunable; - private final OchSignal lambda; - - /** - * Creates OCH port description based on the supplied information. - * - * @param number port number - * @param isEnabled port enabled state - * @param signalType ODU signal type - * @param isTunable tunable wavelength capability - * @param lambda OCh signal - * @param annotations optional key/value annotations map - */ - public OchPortDescription(PortNumber number, boolean isEnabled, OduSignalType signalType, - boolean isTunable, OchSignal lambda, SparseAnnotations... annotations) { - super(number, isEnabled, Port.Type.OCH, 0, annotations); - this.signalType = signalType; - this.isTunable = isTunable; - this.lambda = checkNotNull(lambda); - } - - /** - * Creates OCH port description based on the supplied information. - * - * @param base PortDescription to get basic information from - * @param signalType ODU signal type - * @param isTunable tunable wavelength capability - * @param lambda OCh signal - * @param annotations optional key/value annotations map - */ - public OchPortDescription(PortDescription base, OduSignalType signalType, boolean isTunable, - OchSignal lambda, SparseAnnotations annotations) { - super(base, annotations); - this.signalType = signalType; - this.isTunable = isTunable; - this.lambda = checkNotNull(lambda); - } - - /** - * Returns ODU signal type. - * - * @return ODU signal type - */ - public OduSignalType signalType() { - return signalType; - } - - /** - * Returns true if port is wavelength tunable. - * - * @return tunable wavelength capability - */ - public boolean isTunable() { - return isTunable; - } - - /** - * Returns OCh signal. - * - * @return OCh signal - */ - public OchSignal lambda() { - return lambda; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("number", portNumber()) - .add("isEnabled", isEnabled()) - .add("type", type()) - .add("signalType", signalType) - .add("isTunable", isTunable) - .add("lambda", lambda) - .add("annotations", annotations()) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java deleted file mode 100644 index eee7de2d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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.net.device; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.OduCltPort; -import org.onosproject.net.Port; -import org.onosproject.net.PortNumber; -import org.onosproject.net.SparseAnnotations; - -/** - * Default implementation of immutable ODU client port description. - */ -public class OduCltPortDescription extends DefaultPortDescription { - - private final OduCltPort.SignalType signalType; - - /** - * Creates ODU client port description based on the supplied information. - * - * @param number port number - * @param isEnabled port enabled state - * @param signalType ODU client signal type - * @param annotations optional key/value annotations map - */ - public OduCltPortDescription(PortNumber number, boolean isEnabled, OduCltPort.SignalType signalType, - SparseAnnotations... annotations) { - super(number, isEnabled, Port.Type.ODUCLT, 0, annotations); - this.signalType = signalType; - } - - /** - * Creates ODU client port description based on the supplied information. - * - * @param base PortDescription to get basic information from - * @param signalType ODU client signal type - * @param annotations optional key/value annotations map - */ - public OduCltPortDescription(PortDescription base, OduCltPort.SignalType signalType, - SparseAnnotations annotations) { - super(base, annotations); - this.signalType = signalType; - } - - /** - * Returns ODU client signal type. - * - * @return ODU client signal type - */ - public OduCltPort.SignalType signalType() { - return signalType; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("number", portNumber()) - .add("isEnabled", isEnabled()) - .add("type", type()) - .add("signalType", signalType) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OmsPortDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OmsPortDescription.java deleted file mode 100644 index 131314a3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/OmsPortDescription.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * 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.net.device; - -import com.google.common.base.MoreObjects; -import org.onlab.util.Frequency; -import org.onosproject.net.Port; -import org.onosproject.net.PortNumber; -import org.onosproject.net.SparseAnnotations; - -/** - * Default implementation of immutable OMS port description. - */ -public class OmsPortDescription extends DefaultPortDescription { - - private final Frequency minFrequency; - private final Frequency maxFrequency; - private final Frequency grid; - - /** - * Creates OMS port description based on the supplied information. - * - * @param number port number - * @param isEnabled port enabled state - * @param minFrequency minimum frequency - * @param maxFrequency maximum frequency - * @param grid grid spacing frequency - * @param annotations optional key/value annotations map - */ - public OmsPortDescription(PortNumber number, boolean isEnabled, Frequency minFrequency, Frequency maxFrequency, - Frequency grid, SparseAnnotations... annotations) { - super(number, isEnabled, Port.Type.OMS, 0, annotations); - this.minFrequency = minFrequency; - this.maxFrequency = maxFrequency; - this.grid = grid; - } - - /** - * Creates OMS port description based on the supplied information. - * - * @param base PortDescription to get basic information from - * @param minFrequency minimum frequency - * @param maxFrequency maximum frequency - * @param grid grid spacing frequency - * @param annotations optional key/value annotations map - */ - public OmsPortDescription(PortDescription base, Frequency minFrequency, Frequency maxFrequency, - Frequency grid, SparseAnnotations annotations) { - super(base, annotations); - this.minFrequency = minFrequency; - this.maxFrequency = maxFrequency; - this.grid = grid; - } - - /** - * Returns minimum frequency. - * - * @return minimum frequency - */ - public Frequency minFrequency() { - return minFrequency; - } - - /** - * Returns maximum frequency. - * - * @return maximum frequency - */ - public Frequency maxFrequency() { - return maxFrequency; - } - - /** - * Returns grid spacing frequency. - * - * @return grid spacing frequency - */ - public Frequency grid() { - return grid; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("number", portNumber()) - .add("isEnabled", isEnabled()) - .add("type", type()) - .add("minFrequency", minFrequency) - .add("maxFrequency", maxFrequency) - .add("grid", grid) - .add("annotations", annotations()) - .toString(); - } - -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/PortDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/PortDescription.java deleted file mode 100644 index 3ed3efce..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/PortDescription.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2014 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.net.device; - -import org.onosproject.net.Description; -import org.onosproject.net.PortNumber; - -import static org.onosproject.net.Port.Type; - -/** - * Information about a port. - */ -public interface PortDescription extends Description { - - /** - * Returns the port number. - * - * @return port number - */ - PortNumber portNumber(); - - /** - * Indicates whether or not the port is up and active. - * - * @return true if the port is active and has carrier signal - */ - boolean isEnabled(); - - /** - * Returns the port type. - * - * @return port type - */ - Type type(); - - /** - * Returns the current port speed in Mbps. - * - * @return current port speed - */ - long portSpeed(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/PortStatistics.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/PortStatistics.java deleted file mode 100644 index 201bd7b6..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/PortStatistics.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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.net.device; - -/** - * Statistics of a port. - */ -public interface PortStatistics { - - /** - * Returns the port number. - * - * @return port number - */ - int port(); - - /** - * Returns the number of packets received. - * - * @return the number of packets received - */ - long packetsReceived(); - - /** - * Returns the number of packets sent. - * - * @return the number of packets sent - */ - long packetsSent(); - - /** - * Returns the bytes received. - * - * @return the bytes received - */ - long bytesReceived(); - - /** - * Returns the bytes sent. - * - * @return the bytes sent - */ - long bytesSent(); - - /** - * Returns the number of packets dropped by RX. - * - * @return the number of packets dropped by RX - */ - long packetsRxDropped(); - - /** - * Returns the number of packets dropped by TX. - * - * @return the number of packets dropped by TX - */ - long packetsTxDropped(); - - /** - * Returns the number of transmit errors. - * - * @return the number of transmit errors - */ - long packetsRxErrors(); - - /** - * Returns the number of receive errors. - * - * @return the number of receive error - */ - long packetsTxErrors(); - - /** - * Returns the time port has been alive in seconds. - * - * @return the time port has been alive in seconds - */ - long durationSec(); - - /** - * Returns the time port has been alive in nano seconds. - * - * @return the time port has been alive in nano seconds - */ - long durationNano(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/package-info.java deleted file mode 100644 index 4ee64dcf..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/device/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Infrastructure device model & related services API definitions. - */ -package org.onosproject.net.device; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/AbstractBehaviour.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/AbstractBehaviour.java deleted file mode 100644 index 784e6c55..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/AbstractBehaviour.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.net.driver; - -import static com.google.common.base.Preconditions.checkState; - -/** - * Base implementation of device driver behaviour. - */ -public class AbstractBehaviour implements Behaviour { - - private DriverData data; - - @Override - public DriverData data() { - return data; - } - - @Override - public void setData(DriverData data) { - checkState(this.data == null, "Driver data already set"); - this.data = data; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/AbstractHandlerBehaviour.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/AbstractHandlerBehaviour.java deleted file mode 100644 index 66b21ffe..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/AbstractHandlerBehaviour.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.net.driver; - -import static com.google.common.base.Preconditions.checkState; - -/** - * Base implementation of device driver handler behaviour. - */ -public class AbstractHandlerBehaviour - extends AbstractBehaviour implements HandlerBehaviour { - - private DriverHandler handler; - - @Override - public DriverHandler handler() { - return handler; - } - - @Override - public void setHandler(DriverHandler handler) { - checkState(this.handler == null, "Driver handler already set"); - this.handler = handler; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/Behaviour.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/Behaviour.java deleted file mode 100644 index 6e28aa86..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/Behaviour.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.net.driver; - -/** - * Representation of a facet of device behaviour that can be used to talk about - * a device (in context of {@link DriverData}) or to a device (in context of - * {@link DriverHandler}). - */ -public interface Behaviour { - - /** - * Returns the driver data context. - * - * @return driver data - */ - DriverData data(); - - /** - * Sets the driver data context on this this behaviour should operate. - * - * @param data driver data - */ - void setData(DriverData data); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java deleted file mode 100644 index b7a9f2b7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * 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.net.driver; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; - -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.ImmutableMap.copyOf; - -/** - * Default implementation of extensible driver. - */ -public class DefaultDriver implements Driver { - - private final String name; - private final Driver parent; - - private final String manufacturer; - private final String hwVersion; - private final String swVersion; - - private final Map<Class<? extends Behaviour>, Class<? extends Behaviour>> behaviours; - private final Map<String, String> properties; - - /** - * Creates a driver with the specified name. - * - * @param name driver name - * @param parent optional parent driver - * @param manufacturer device manufacturer - * @param hwVersion device hardware version - * @param swVersion device software version - * @param behaviours device behaviour classes - * @param properties properties for configuration of device behaviour classes - */ - public DefaultDriver(String name, Driver parent, String manufacturer, - String hwVersion, String swVersion, - Map<Class<? extends Behaviour>, Class<? extends Behaviour>> behaviours, - Map<String, String> properties) { - this.name = checkNotNull(name, "Name cannot be null"); - this.parent = parent; - this.manufacturer = checkNotNull(manufacturer, "Manufacturer cannot be null"); - this.hwVersion = checkNotNull(hwVersion, "HW version cannot be null"); - this.swVersion = checkNotNull(swVersion, "SW version cannot be null"); - this.behaviours = copyOf(checkNotNull(behaviours, "Behaviours cannot be null")); - this.properties = copyOf(checkNotNull(properties, "Properties cannot be null")); - } - - @Override - public Driver merge(Driver other) { - checkArgument(parent == null || Objects.equals(parent, other.parent()), - "Parent drivers are not the same"); - - // Merge the behaviours. - Map<Class<? extends Behaviour>, Class<? extends Behaviour>> - behaviours = Maps.newHashMap(); - behaviours.putAll(this.behaviours); - other.behaviours().forEach(b -> behaviours.put(b, other.implementation(b))); - - // Merge the properties. - ImmutableMap.Builder<String, String> properties = ImmutableMap.builder(); - properties.putAll(this.properties).putAll(other.properties()); - - return new DefaultDriver(name, other.parent(), manufacturer, hwVersion, swVersion, - ImmutableMap.copyOf(behaviours), properties.build()); - } - - @Override - public String name() { - return name; - } - - @Override - public String manufacturer() { - return manufacturer; - } - - @Override - public String hwVersion() { - return hwVersion; - } - - @Override - public String swVersion() { - return swVersion; - } - - @Override - public Driver parent() { - return parent; - } - - @Override - public Set<Class<? extends Behaviour>> behaviours() { - return behaviours.keySet(); - } - - @Override - public Class<? extends Behaviour> implementation(Class<? extends Behaviour> behaviour) { - return behaviours.get(behaviour); - } - - @Override - public boolean hasBehaviour(Class<? extends Behaviour> behaviourClass) { - return behaviours.containsKey(behaviourClass) || - (parent != null && parent.hasBehaviour(behaviourClass)); - } - - @Override - public <T extends Behaviour> T createBehaviour(DriverData data, - Class<T> behaviourClass) { - T behaviour = createBehaviour(data, null, behaviourClass); - if (behaviour != null) { - return behaviour; - } else if (parent != null) { - return parent.createBehaviour(data, behaviourClass); - } - throw new IllegalArgumentException(behaviourClass.getName() + " not supported"); - } - - @Override - public <T extends Behaviour> T createBehaviour(DriverHandler handler, - Class<T> behaviourClass) { - T behaviour = createBehaviour(handler.data(), handler, behaviourClass); - if (behaviour != null) { - return behaviour; - } else if (parent != null) { - return parent.createBehaviour(handler, behaviourClass); - } - throw new IllegalArgumentException(behaviourClass.getName() + " not supported"); - } - - // Creates an instance of behaviour primed with the specified driver data. - private <T extends Behaviour> T createBehaviour(DriverData data, DriverHandler handler, - Class<T> behaviourClass) { - //checkArgument(handler != null || !HandlerBehaviour.class.isAssignableFrom(behaviourClass), - // "{} is applicable only to handler context", behaviourClass.getName()); - - // Locate the implementation of the requested behaviour. - Class<? extends Behaviour> implementation = behaviours.get(behaviourClass); - if (implementation != null) { - // Create an instance of the behaviour and apply data as its context. - T behaviour = createBehaviour(behaviourClass, implementation); - behaviour.setData(data); - - // If this is a handler behaviour, also apply handler as its context. - if (handler != null) { - ((HandlerBehaviour) behaviour).setHandler(handler); - } - return behaviour; - } - return null; - } - - @SuppressWarnings("unchecked") - private <T extends Behaviour> T createBehaviour(Class<T> behaviourClass, - Class<? extends Behaviour> implementation) { - try { - return (T) implementation.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - // TODO: add a specific unchecked exception - throw new IllegalArgumentException("Unable to create behaviour", e); - } - } - - @Override - public Set<String> keys() { - return properties.keySet(); - } - - @Override - public String value(String key) { - return properties.get(key); - } - - @Override - public Map<String, String> properties() { - return properties; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("name", name) - .add("parent", parent) - .add("manufacturer", manufacturer) - .add("hwVersion", hwVersion) - .add("swVersion", swVersion) - .add("behaviours", behaviours) - .add("properties", properties) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverData.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverData.java deleted file mode 100644 index 76d7932d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverData.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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.net.driver; - -import com.google.common.collect.ImmutableSet; -import org.onosproject.net.DeviceId; -import org.onosproject.net.MutableAnnotations; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Default implementation of driver data descriptor. - */ -public class DefaultDriverData implements DriverData { - - private final Driver driver; - private final DeviceId deviceId; - private final Map<String, String> properties; - - /** - * Creates new driver data. - * - * @param driver parent driver type - * @param deviceId device identifier - */ - public DefaultDriverData(Driver driver, DeviceId deviceId) { - this.driver = driver; - this.deviceId = deviceId; - this.properties = new HashMap<>(); - } - - @Override - public Driver driver() { - return driver; - } - - @Override - public DeviceId deviceId() { - return deviceId; - } - - @Override - public <T extends Behaviour> T behaviour(Class<T> behaviourClass) { - return driver.createBehaviour(this, behaviourClass); - } - - @Override - public MutableAnnotations set(String key, String value) { - properties.put(key, value); - return this; - } - - @Override - public MutableAnnotations clear(String... keys) { - if (keys.length == 0) { - properties.clear(); - } else { - for (String key : keys) { - properties.remove(key); - } - } - return this; - } - - @Override - public Set<String> keys() { - return ImmutableSet.copyOf(properties.keySet()); - } - - @Override - public String value(String key) { - return properties.get(key); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("type", driver) - .add("properties", properties) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverHandler.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverHandler.java deleted file mode 100644 index 28fdb2f3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverHandler.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.net.driver; - -import org.onlab.osgi.DefaultServiceDirectory; -import org.onlab.osgi.ServiceDirectory; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Default implementation of driver handler. - */ -public class DefaultDriverHandler implements DriverHandler { - - private final DefaultDriverData data; - - // Reference to service directory to provide run-time context. - protected static ServiceDirectory serviceDirectory = new DefaultServiceDirectory(); - - /** - * Creates new driver handler with the attached driver data. - * - * @param data driver data to attach - */ - public DefaultDriverHandler(DefaultDriverData data) { - this.data = data; - } - - @Override - public Driver driver() { - return data.driver(); - } - - @Override - public DriverData data() { - return data; - } - - @Override - public <T extends Behaviour> T behaviour(Class<T> behaviourClass) { - return data.driver().createBehaviour(this, behaviourClass); - } - - @Override - public <T> T get(Class<T> serviceClass) { - return serviceDirectory.get(serviceClass); - } - - @Override - public String toString() { - return toStringHelper(this).add("data", data).toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java deleted file mode 100644 index b2b5281c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProvider.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.net.driver; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; - -import java.util.Map; -import java.util.Set; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Default driver provider implementation. - */ -public class DefaultDriverProvider implements DriverProvider { - - protected final Map<String, Driver> drivers = Maps.newConcurrentMap(); - - @Override - public Set<Driver> getDrivers() { - return ImmutableSet.copyOf(drivers.values()); - } - - /** - * Adds the specified drivers to the provider. - * - * @param drivers drivers to be added - */ - public void addDrivers(Set<Driver> drivers) { - drivers.forEach(this::addDriver); - } - - /** - * Adds the specified driver to the provider. - * - * @param driver driver to be provided - */ - public void addDriver(Driver driver) { - Driver ddc = drivers.get(driver.name()); - if (ddc == null) { - // If we don't have the driver yet, just use the new one. - drivers.put(driver.name(), driver); - } else { - // Otherwise merge the existing driver with the new one and rebind. - drivers.put(driver.name(), ddc.merge(driver)); - } - } - - /** - * Removes the specified drivers from the provider. - * - * @param drivers drivers to be removed - */ - public void removeDrivers(Set<Driver> drivers) { - drivers.forEach(this::removeDriver); - } - - /** - * Removes the specified driver from the provider. - * - * @param driver driver to be removed - */ - public void removeDriver(Driver driver) { - // TODO: make selective if possible - drivers.remove(driver.name()); - } - - @Override - public String toString() { - return toStringHelper(this).add("drivers", drivers).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProviderService.java deleted file mode 100644 index 153c7c56..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DefaultDriverProviderService.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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.net.driver; - -/** - * Service representing availability of default drivers. - */ -public interface DefaultDriverProviderService { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/Driver.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/Driver.java deleted file mode 100644 index 50611b14..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/Driver.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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.net.driver; - -import org.onosproject.net.Annotations; - -import java.util.Map; -import java.util.Set; - -/** - * Representation of a specific family of device drivers. Behaviour configuration - * data is stored using {@link org.onosproject.net.Annotations}. - */ -public interface Driver extends Annotations { - - /** - * Returns the driver name. This is expected to be a reverse-DNS, - * Java package-like name. - * - * @return driver name - */ - String name(); - - /** - * Returns the parent driver from which this driver inherits behaviours - * and properties. - * - * @return parent driver; null if driver has no parent - */ - Driver parent(); - - /** - * Returns the device manufacturer name. - * - * @return manufacturer name - */ - String manufacturer(); - - /** - * Returns the device hardware version. - * - * @return hardware version - */ - String hwVersion(); - - /** - * Returns the device software version. - * - * @return software version - */ - String swVersion(); - - /** - * Returns the set of behaviours supported by this driver. - * It reflects behaviours of only this driver and not its parent. - * - * @return set of device driver behaviours - */ - Set<Class<? extends Behaviour>> behaviours(); - - /** - * Returns the implementation class for the specified behaviour. - * It reflects behaviours of only this driver and not its parent. - * - * @param behaviour behaviour interface - * @return implementation class - */ - Class<? extends Behaviour> implementation(Class<? extends Behaviour> behaviour); - - /** - * Indicates whether or not the driver, or any of its parents, support - * the specified class of behaviour. It - * - * @param behaviourClass behaviour class - * @return true if behaviour is supported - */ - boolean hasBehaviour(Class<? extends Behaviour> behaviourClass); - - /** - * Creates an instance of behaviour primed with the specified driver data. - * If the current driver does not support the specified behaviour and the - * driver has parent, the request is delegated to the parent driver. - * - * @param data driver data context - * @param behaviourClass driver behaviour class - * @param <T> type of behaviour - * @return behaviour instance - */ - <T extends Behaviour> T createBehaviour(DriverData data, Class<T> behaviourClass); - - /** - * Creates an instance of behaviour primed with the specified driver data. - * If the current driver does not support the specified behaviour and the - * driver has parent, the request is delegated to the parent driver. - * - * @param handler driver handler context - * @param behaviourClass driver behaviour class - * @param <T> type of behaviour - * @return behaviour instance - */ - <T extends Behaviour> T createBehaviour(DriverHandler handler, Class<T> behaviourClass); - - /** - * Returns the set of annotations as map of key/value properties. - * - * @return map of properties - */ - Map<String, String> properties(); - - /** - * Merges the specified driver behaviours and properties into this one, - * giving preference to the other driver when dealing with conflicts. - * - * @param other other driver - * @return merged driver - */ - Driver merge(Driver other); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverAdminService.java deleted file mode 100644 index e7fa1385..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverAdminService.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.net.driver; - -import java.util.Set; - -/** - * Service for managing drivers and driver behaviour implementations. - */ -public interface DriverAdminService extends DriverService { - - /** - * Returns the set of driver providers currently registered. - * - * @return registered driver providers - */ - Set<DriverProvider> getProviders(); - - /** - * Registers the specified driver provider. - * - * @param provider driver provider to register - */ - void registerProvider(DriverProvider provider); - - /** - * Unregisters the specified driver provider. - * - * @param provider driver provider to unregister - */ - void unregisterProvider(DriverProvider provider); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverConnect.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverConnect.java deleted file mode 100644 index 1d510913..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverConnect.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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.net.driver; - -/** - * Abstraction of handler behaviour used to set-up and tear-down driver - * connection with a device. - */ -public interface DriverConnect extends HandlerBehaviour { - - /** - * Connects to the device. - * - * @param credentials optional login credentials in string form - */ - void connect(String... credentials); - - /** - * Disconnects from the device. - */ - void disconnect(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverData.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverData.java deleted file mode 100644 index 1d66ea9a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverData.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.net.driver; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.MutableAnnotations; - -/** - * Container for data about a device. Data is stored using - * {@link org.onosproject.net.MutableAnnotations}. - */ -public interface DriverData extends MutableAnnotations { - - /** - * Returns the parent device driver. - * - * @return device driver - */ - Driver driver(); - - /** - * Returns the device identifier. - * - * @return device identifier - */ - DeviceId deviceId(); - - /** - * Returns the specified facet of behaviour to access the device data. - * - * @param behaviourClass behaviour class - * @param <T> type of behaviour - * @return requested behaviour or null if not supported - */ - <T extends Behaviour> T behaviour(Class<T> behaviourClass); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverHandler.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverHandler.java deleted file mode 100644 index 202708ba..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverHandler.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.net.driver; - -/** - * Representation of context for interacting with a device. - */ -public interface DriverHandler { - - /** - * Returns the parent device driver. - * - * @return device driver - */ - Driver driver(); - - /** - * Returns the device driver data. - * - * @return device driver data - */ - DriverData data(); - - /** - * Returns the specified facet of behaviour to interact with the device. - * - * @param behaviourClass behaviour class - * @param <T> type of behaviour - * @return behaviour - */ - <T extends Behaviour> T behaviour(Class<T> behaviourClass); - - /** - * Returns the reference to the implementation of the specified service. - * Provides access to run-time context. - * - * @param serviceClass service class - * @param <T> type of service - * @return service implementation - * @throws org.onlab.osgi.ServiceNotFoundException if service is unavailable - */ - <T> T get(Class<T> serviceClass); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverProvider.java deleted file mode 100644 index 354d93e9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverProvider.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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.net.driver; - -import java.util.Set; - -/** - * Represents entity capable of providing device drivers and their - * behaviours. - */ -public interface DriverProvider { - - /** - * Returns the set of driver types and behaviour implementations to be - * made available by this provider. - * - * @return set of driver types and their behaviours - */ - Set<Driver> getDrivers(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverResolver.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverResolver.java deleted file mode 100644 index 094c710f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverResolver.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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.net.driver; - -/** - * Entity capable of resolving a driver using its name. - */ -public interface DriverResolver { - - /** - * Returns the specified driver. - * - * @param driverName driver name - * @return driver - * @throws org.onlab.util.ItemNotFoundException if driver with the given - * name is not found - */ - Driver getDriver(String driverName); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverService.java deleted file mode 100644 index 1a74255b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/DriverService.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.net.driver; - -import org.onosproject.net.DeviceId; - -import java.util.Set; - -/** - * Service for obtaining drivers and driver behaviour implementations. - */ -public interface DriverService extends DriverResolver { - - /** - * Returns the overall set of drivers being provided. - * - * @return provided drivers - */ - Set<Driver> getDrivers(); - - /** - * Returns the set of drivers which support the specified behaviour. - * - * @param withBehaviour behaviour class to query by - * @return provided drivers - */ - Set<Driver> getDrivers(Class<? extends Behaviour> withBehaviour); - - /** - * Returns the driver that matches the specified primordial device - * discovery information. - * - * @param mfr device manufacturer - * @param hw device hardware name/version - * @param sw device software version - * @return driver or null of no matching one is found - */ - Driver getDriver(String mfr, String hw, String sw); - - /** - * Returns the driver for the specified device. If the device carries - * {@code driver} annotation, its value is used to look-up the driver. - * Otherwise, the device manufacturer, hardware and software version - * attributes are used to look-up the driver. First using their literal - * values and if no driver is found, using ERE matching against the - * driver manufacturer, hardware and software version fields. - * - * @param deviceId device identifier - * @return driver or null of no matching one is found - * @throws org.onlab.util.ItemNotFoundException if device or driver for it - * are not found - */ - Driver getDriver(DeviceId deviceId); - - /** - * Creates a new driver handler for interacting with the specified device. - * The driver is looked-up using the same semantics as - * {@link #getDriver(DeviceId)} method. - * - * @param deviceId device identifier - * @param credentials optional login credentials in string form - * @return driver handler - * @throws org.onlab.util.ItemNotFoundException if device or driver for it - * are not found - */ - DriverHandler createHandler(DeviceId deviceId, String... credentials); - - // TODO: Devise a mechanism for retaining DriverData for devices - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/HandlerBehaviour.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/HandlerBehaviour.java deleted file mode 100644 index b5771ac1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/HandlerBehaviour.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.net.driver; - -/** - * Representation of a facet of device behaviour that can be used to interact - * with a device (in context of {@link org.onosproject.net.driver.DriverHandler}). - */ -public interface HandlerBehaviour extends Behaviour { - - /** - * Returns the driver handler context on which this behaviour operates. - * - * @return driver handler context - */ - DriverHandler handler(); - - /** - * Sets the driver handler context for this behaviour. - * - * @param handler driver handler - */ - void setHandler(DriverHandler handler); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java deleted file mode 100644 index fc5e04a1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/XmlDriverLoader.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * 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.net.driver; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.HierarchicalConfiguration; -import org.apache.commons.configuration.XMLConfiguration; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Map; - -/** - * Utility capable of reading driver configuration XML resources and producing - * a device driver provider as a result. - * <p> - * The drivers stream structure is as follows: - * </p> - * <pre> - * <drivers> - * <driver name=“...” [manufacturer="..." hwVersion="..." swVersion="..."]> - * <behaviour api="..." impl="..."/> - * ... - * [<property name=“key”>value</key>] - * ... - * </driver> - * ... - * </drivers> - * </pre> - */ -public class XmlDriverLoader { - - private static final String DRIVERS = "drivers"; - private static final String DRIVER = "driver"; - - private static final String BEHAVIOUR = "behaviour"; - private static final String PROPERTY = "property"; - - private static final String NAME = "[@name]"; - private static final String EXTENDS = "[@extends]"; - private static final String MFG = "[@manufacturer]"; - private static final String HW = "[@hwVersion]"; - private static final String SW = "[@swVersion]"; - private static final String API = "[@api]"; - private static final String IMPL = "[@impl]"; - - private final ClassLoader classLoader; - - private Map<String, Driver> drivers = Maps.newHashMap(); - - /** - * Creates a new driver loader capable of loading drivers from the supplied - * class loader. - * - * @param classLoader class loader to use - */ - public XmlDriverLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - - /** - * Loads the specified drivers resource as an XML stream and parses it to - * produce a ready-to-register driver provider. - * - * @param driversStream stream containing the drivers definitions - * @param resolver driver resolver - * @return driver provider - * @throws java.io.IOException if issues are encountered reading the stream - * or parsing the driver definitions within - */ - public DefaultDriverProvider loadDrivers(InputStream driversStream, - DriverResolver resolver) throws IOException { - try { - XMLConfiguration cfg = new XMLConfiguration(); - cfg.setRootElementName(DRIVERS); - cfg.setAttributeSplittingDisabled(true); - - cfg.load(driversStream); - return loadDrivers(cfg, resolver); - } catch (ConfigurationException e) { - throw new IOException("Unable to load drivers", e); - } - } - - /** - * Loads a driver provider from the supplied hierarchical configuration. - * - * @param driversCfg hierarchical configuration containing the drivers definitions - * @param resolver driver resolver - * @return driver provider - */ - public DefaultDriverProvider loadDrivers(HierarchicalConfiguration driversCfg, - DriverResolver resolver) { - DefaultDriverProvider provider = new DefaultDriverProvider(); - for (HierarchicalConfiguration cfg : driversCfg.configurationsAt(DRIVER)) { - DefaultDriver driver = loadDriver(cfg, resolver); - drivers.put(driver.name(), driver); - provider.addDriver(driver); - } - drivers.clear(); - return provider; - } - - /** - * Loads a driver from the supplied hierarchical configuration. - * - * @param driverCfg hierarchical configuration containing the driver definition - * @param resolver driver resolver - * @return driver - */ - public DefaultDriver loadDriver(HierarchicalConfiguration driverCfg, - DriverResolver resolver) { - String name = driverCfg.getString(NAME); - String parentName = driverCfg.getString(EXTENDS); - String manufacturer = driverCfg.getString(MFG, ""); - String hwVersion = driverCfg.getString(HW, ""); - String swVersion = driverCfg.getString(SW, ""); - - Driver parent = parentName != null ? resolve(parentName, resolver) : null; - return new DefaultDriver(name, parent, manufacturer, hwVersion, swVersion, - parseBehaviours(driverCfg), - parseProperties(driverCfg)); - } - - // Resolves the driver by name locally at first and then using the specified resolver. - private Driver resolve(String parentName, DriverResolver resolver) { - Driver driver = drivers.get(parentName); - return driver != null ? driver : - (resolver != null ? resolver.getDriver(parentName) : null); - } - - // Parses the behaviours section. - private Map<Class<? extends Behaviour>, Class<? extends Behaviour>> - parseBehaviours(HierarchicalConfiguration driverCfg) { - ImmutableMap.Builder<Class<? extends Behaviour>, - Class<? extends Behaviour>> behaviours = ImmutableMap.builder(); - for (HierarchicalConfiguration b : driverCfg.configurationsAt(BEHAVIOUR)) { - behaviours.put(getClass(b.getString(API)), getClass(b.getString(IMPL))); - } - return behaviours.build(); - } - - // Parses the properties section. - private Map<String, String> parseProperties(HierarchicalConfiguration driverCfg) { - ImmutableMap.Builder<String, String> properties = ImmutableMap.builder(); - for (HierarchicalConfiguration b : driverCfg.configurationsAt(PROPERTY)) { - properties.put(b.getString(NAME), (String) b.getRootNode().getValue()); - } - return properties.build(); - } - - @SuppressWarnings("unchecked") - private Class<? extends Behaviour> getClass(String className) { - try { - return (Class<? extends Behaviour>) classLoader.loadClass(className); - } catch (ClassNotFoundException e) { - throw new IllegalArgumentException("Unable to load class " + className, e); - } - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/package-info.java deleted file mode 100644 index fbc39a89..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/driver/package-info.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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. - */ - -/** - * Set of facilities to allow the platform to be extended with - * device specific behaviours and to allow modeling device behaviours while - * hiding details of specific device driver implementations. - * <p> - * {@link org.onosproject.net.driver.Driver} is a representation of a - * specific family of devices supports set of - * {@link org.onosproject.net.driver.Behaviour behaviour classes}. Default - * implementation is provided by the platform and allows DriverProviders to - * add different behaviour implementations via DriverService. - * </p> - * <p> - * {@link org.onosproject.net.driver.DriverData} is a container for data - * learned about a device. It is associated with a specific - * {@link org.onosproject.net.driver.Driver} - * and provides set of {@link org.onosproject.net.driver.Behaviour behaviours} - * for talking about a device. A default - * implementation provided by platform and has mutable key/value store for use by - * implementations of {@link org.onosproject.net.driver.Behaviour behaviours}. - * </p> - * <p> - * {@link org.onosproject.net.driver.DriverHandler} is an entity used as a - * context to interact with a device. It has a peer - * {@link org.onosproject.net.driver.DriverData} instance, which is used to - * store information learned about a device. It also - * provides set of {@link org.onosproject.net.driver.Behaviour behaviours} - * for talking to a device. - * </p> - * <p> - * {@link org.onosproject.net.driver.DriverService} can be used to query the - * inventory of device drivers and their behaviours, while the - * {@link org.onosproject.net.driver.DriverAdminService} allows adding/removing - * drivers and managing behaviour implementations. - * {@link org.onosproject.net.driver.DriverProvider} is an entity capable - * of add/removing drivers and supplying and managing behaviour - * implementations. A default implementation is provided by the framework along - * with a {@link org.onosproject.net.driver.XmlDriverLoader loader utility} to - * create a driver provider from an XML file structured as follows: - * <pre> - * <drivers> - * <driver name=“...” [manufacturer="..." hwVersion="..." swVersion="..."]> - * <behaviour api="..." impl="..."/> - * ... - * [<property name=“key”>value</key>] - * ... - * </driver> - * ... - * </drivers> - * </pre> - * - */ -package org.onosproject.net.driver;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortEvent.java deleted file mode 100644 index 85e6a1b5..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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.net.edge; - -import org.onosproject.event.AbstractEvent; -import org.onosproject.net.ConnectPoint; - -/** - * Describes an event pertaining to edge-port inventory. - */ -public class EdgePortEvent extends AbstractEvent<EdgePortEvent.Type, ConnectPoint> { - - public enum Type { - /** - * Signifies that a new edge port was detected. - */ - EDGE_PORT_ADDED, - - /** - * Signifies that a new edge port vanished. - */ - EDGE_PORT_REMOVED - } - - /** - * Creates a new edge port event. - * - * @param type event type - * @param subject connection point subject - */ - public EdgePortEvent(Type type, ConnectPoint subject) { - super(type, subject); - } - - /** - * Creates a new edge port event. - * - * @param type event type - * @param subject connection point subject - * @param time occurrence time - */ - public EdgePortEvent(Type type, ConnectPoint subject, long time) { - super(type, subject, time); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortListener.java deleted file mode 100644 index dae03beb..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.net.edge; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving edge port events. - */ -public interface EdgePortListener extends EventListener<EdgePortEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortService.java deleted file mode 100644 index 89a2c171..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/EdgePortService.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.edge; - -import org.onosproject.event.ListenerService; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.flow.TrafficTreatment; - -import java.nio.ByteBuffer; -import java.util.Optional; - -/** - * Service for interacting with an inventory of network edge ports. A port - * is considered an edge port if it is an active port and does not have an - * infrastructure link associated with it. - */ -public interface EdgePortService - extends ListenerService<EdgePortEvent, EdgePortListener> { - - /** - * Indicates whether or not the specified connection point is an edge point. - * - * @param point connection point - * @return true if edge point - */ - boolean isEdgePoint(ConnectPoint point); - - /** - * Returns a collection of all edge point within the current topology. - * - * @return iterable collection of all edge points - */ - Iterable<ConnectPoint> getEdgePoints(); - - /** - * Returns a collection of all edge point for the specified device. - * - * @param deviceId device identifier - * @return iterable collection of all edge points for the device - */ - Iterable<ConnectPoint> getEdgePoints(DeviceId deviceId); - - /** - * Emits the specified packet, with optional treatment to all edge ports. - * - * @param data packet data - * @param treatment optional traffic treatment to apply to the packet - */ - void emitPacket(ByteBuffer data, Optional<TrafficTreatment> treatment); - - /** - * Emits the specified packet, with optional treatment to all edge ports. - * - * @param deviceId device where to send the packet out - * @param data packet data - * @param treatment optional traffic treatment to apply to the packet - */ - void emitPacket(DeviceId deviceId, ByteBuffer data, - Optional<TrafficTreatment> treatment); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/package-info.java deleted file mode 100644 index d637f195..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/edge/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/** - * Service for interacting with network edge. - */ -package org.onosproject.net.edge;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/AbstractExtension.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/AbstractExtension.java deleted file mode 100644 index b48d69ce..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/AbstractExtension.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.net.flow; - -import org.onosproject.net.flow.instructions.ExtensionPropertyException; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; - -/** - * Abstract implementation of the set/get property methods of Extension. - */ -public abstract class AbstractExtension implements Extension { - - private static final String INVALID_KEY = "Invalid property key: "; - private static final String INVALID_TYPE = "Given type does not match field type: "; - - @Override - public <T> void setPropertyValue(String key, T value) throws - ExtensionPropertyException { - Class<?> clazz = this.getClass(); - try { - Field field = clazz.getDeclaredField(key); - field.setAccessible(true); - field.set(this, value); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new ExtensionPropertyException(INVALID_KEY + key); - } - } - - @Override - public <T> T getPropertyValue(String key) throws ExtensionPropertyException { - Class<?> clazz = this.getClass(); - try { - Field field = clazz.getDeclaredField(key); - field.setAccessible(true); - @SuppressWarnings("unchecked") - T result = (T) field.get(this); - return result; - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new ExtensionPropertyException(INVALID_KEY + key); - } catch (ClassCastException e) { - throw new ExtensionPropertyException(INVALID_TYPE + key); - } - } - - @Override - public List<String> getProperties() { - Class<?> clazz = this.getClass(); - - List<String> fields = new ArrayList<>(); - - for (Field field : clazz.getDeclaredFields()) { - fields.add(field.getName()); - } - - return fields; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperation.java deleted file mode 100644 index 09e34d88..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperation.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * A list of BatchOperationEntry. - * - * @param <T> the enum of operators <br> - * This enum must be defined in each sub-classes. - */ -public abstract class BatchOperation<T extends BatchOperationEntry<?, ?>> { - - private final List<T> ops; - - /** - * Creates new {@link BatchOperation} object. - */ - public BatchOperation() { - ops = new LinkedList<>(); - } - - /** - * Creates {@link BatchOperation} object from a list of batch operation - * entries. - * - * @param batchOperations the list of batch operation entries. - */ - public BatchOperation(Collection<T> batchOperations) { - ops = new LinkedList<>(checkNotNull(batchOperations)); - } - - /** - * Removes all operations maintained in this object. - */ - public void clear() { - ops.clear(); - } - - /** - * Returns the number of operations in this object. - * - * @return the number of operations in this object - */ - public int size() { - return ops.size(); - } - - /** - * Returns the operations in this object. - * - * @return the operations in this object - */ - public List<T> getOperations() { - return Collections.unmodifiableList(ops); - } - - /** - * Adds an operation. - * FIXME: Brian promises that the Intent Framework - * will not modify the batch operation after it has submitted it. - * Ali would prefer immutablity, but trusts brian for better or - * for worse. - * - * @param entry the operation to be added - * @return this object if succeeded, null otherwise - */ - public BatchOperation<T> addOperation(T entry) { - return ops.add(entry) ? this : null; - } - - /** - * Add all operations from another batch to this batch. - * - * @param another another batch - * @return true if success - */ - public boolean addAll(BatchOperation<T> another) { - return ops.addAll(another.getOperations()); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null) { - return false; - } - - if (getClass() != o.getClass()) { - return false; - } - BatchOperation<?> other = (BatchOperation<?>) o; - - return this.ops.equals(other.ops); - } - - @Override - public int hashCode() { - return ops.hashCode(); - } - - @Override - public String toString() { - return ops.toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperationEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperationEntry.java deleted file mode 100644 index cc054286..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperationEntry.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import java.util.Objects; - -import com.google.common.base.MoreObjects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * A super class for batch operation entry classes. - * <p> - * This is the interface to classes which are maintained by BatchOperation as - * its entries. - */ -public class BatchOperationEntry<T extends Enum<?>, U> { - - private final T operator; - private final U target; - - /** - * Constructs new instance for the entry of the BatchOperation. - * - * @param operator the operator of this operation - * @param target the target object of this operation - */ - public BatchOperationEntry(T operator, U target) { - this.operator = checkNotNull(operator); - this.target = checkNotNull(target); - } - - /** - * Gets the target object of this operation. - * - * @return the target object of this operation - */ - public U target() { - return target; - } - - /** - * Gets the operator of this operation. - * - * @return the operator of this operation - */ - public T operator() { - return operator; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - BatchOperationEntry<?, ?> other = (BatchOperationEntry<?, ?>) o; - return (this.operator == other.operator) && - Objects.equals(this.target, other.target); - } - - @Override - public int hashCode() { - return Objects.hash(operator, target); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("operator", operator) - .add("target", target) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperationResult.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperationResult.java deleted file mode 100644 index 684a8698..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/BatchOperationResult.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import java.util.Set; - -/** - * Interface capturing the result of a batch operation. - * - */ -public interface BatchOperationResult<T> { - - /** - * Returns whether the operation was successful. - * @return true if successful, false otherwise - */ - boolean isSuccess(); - - /** - * Obtains a set of items which failed. - * @return a set of failures - */ - Set<T> failedItems(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/CompletedBatchOperation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/CompletedBatchOperation.java deleted file mode 100644 index 3afae5ef..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/CompletedBatchOperation.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - - -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; -import org.onosproject.net.DeviceId; - -import java.util.Collections; -import java.util.Set; - -/** - * Representation of a completed flow rule batch operation. - */ -public class CompletedBatchOperation implements BatchOperationResult<FlowRule> { - - private final boolean success; - private final Set<FlowRule> failures; - private final Set<Long> failedIds; - private final DeviceId deviceId; - - /** - * Creates a new batch completion result. - * - * @param success indicates whether the completion is successful - * @param failures set of any failures encountered - * @param failedIds (optional) set of failed operation ids - * @param deviceId the device this operation completed for - */ - public CompletedBatchOperation(boolean success, Set<? extends FlowRule> failures, - Set<Long> failedIds, DeviceId deviceId) { - this.success = success; - this.failures = ImmutableSet.copyOf(failures); - this.failedIds = ImmutableSet.copyOf(failedIds); - this.deviceId = deviceId; - } - - /** - * Creates a new batch completion result. - * - * @param success indicates whether the completion is successful. - * @param failures set of any failures encountered - * @param deviceId the device this operation completed for - */ - public CompletedBatchOperation(boolean success, Set<? extends FlowRule> failures, - DeviceId deviceId) { - this.success = success; - this.failures = ImmutableSet.copyOf(failures); - this.failedIds = Collections.emptySet(); - this.deviceId = deviceId; - } - - - - @Override - public boolean isSuccess() { - return success; - } - - @Override - public Set<FlowRule> failedItems() { - return failures; - } - - public Set<Long> failedIds() { - return failedIds; - } - - public DeviceId deviceId() { - return this.deviceId; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("success?", success) - .add("failedItems", failures) - .add("failedIds", failedIds) - .add("deviceId", deviceId) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowEntry.java deleted file mode 100644 index f7e7708e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowEntry.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static org.slf4j.LoggerFactory.getLogger; - -import org.slf4j.Logger; - -public class DefaultFlowEntry extends DefaultFlowRule - implements StoredFlowEntry { - - private static final Logger log = getLogger(DefaultFlowEntry.class); - - private long life; - private long packets; - private long bytes; - private FlowEntryState state; - - private long lastSeen = -1; - - private final int errType; - - private final int errCode; - - public DefaultFlowEntry(FlowRule rule, FlowEntryState state, - long life, long packets, long bytes) { - super(rule); - this.state = state; - this.life = life; - this.packets = packets; - this.bytes = bytes; - this.errCode = -1; - this.errType = -1; - this.lastSeen = System.currentTimeMillis(); - } - - public DefaultFlowEntry(FlowRule rule) { - super(rule); - this.state = FlowEntryState.PENDING_ADD; - this.life = 0; - this.packets = 0; - this.bytes = 0; - this.errCode = -1; - this.errType = -1; - this.lastSeen = System.currentTimeMillis(); - } - - public DefaultFlowEntry(FlowRule rule, int errType, int errCode) { - super(rule); - this.state = FlowEntryState.FAILED; - this.errType = errType; - this.errCode = errCode; - this.lastSeen = System.currentTimeMillis(); - } - - @Override - public long life() { - return life; - } - - @Override - public long packets() { - return packets; - } - - @Override - public long bytes() { - return bytes; - } - - @Override - public FlowEntryState state() { - return this.state; - } - - @Override - public long lastSeen() { - return lastSeen; - } - - @Override - public void setLastSeen() { - this.lastSeen = System.currentTimeMillis(); - } - - @Override - public void setState(FlowEntryState newState) { - this.state = newState; - } - - @Override - public void setLife(long life) { - this.life = life; - } - - @Override - public void setPackets(long packets) { - this.packets = packets; - } - - @Override - public void setBytes(long bytes) { - this.bytes = bytes; - } - - @Override - public int errType() { - return this.errType; - } - - @Override - public int errCode() { - return this.errCode; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("rule", super.toString()) - .add("state", state) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java deleted file mode 100644 index 5492fa98..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultFlowRule.java +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import org.onosproject.core.ApplicationId; -import org.onosproject.core.DefaultGroupId; -import org.onosproject.core.GroupId; -import org.onosproject.net.DeviceId; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -public class DefaultFlowRule implements FlowRule { - - private final DeviceId deviceId; - private final int priority; - private final TrafficSelector selector; - private final TrafficTreatment treatment; - private final long created; - - private final FlowId id; - - private final Short appId; - - private final int timeout; - private final boolean permanent; - private final GroupId groupId; - - private final Integer tableId; - private final FlowRuleExtPayLoad payLoad; - - public DefaultFlowRule(FlowRule rule) { - this.deviceId = rule.deviceId(); - this.priority = rule.priority(); - this.selector = rule.selector(); - this.treatment = rule.treatment(); - this.appId = rule.appId(); - this.groupId = rule.groupId(); - this.id = rule.id(); - this.timeout = rule.timeout(); - this.permanent = rule.isPermanent(); - this.created = System.currentTimeMillis(); - this.tableId = rule.tableId(); - this.payLoad = rule.payLoad(); - } - - private DefaultFlowRule(DeviceId deviceId, TrafficSelector selector, - TrafficTreatment treatment, Integer priority, - FlowId flowId, Boolean permanent, Integer timeout, - Integer tableId) { - - this.deviceId = deviceId; - this.selector = selector; - this.treatment = treatment; - this.priority = priority; - this.appId = (short) (flowId.value() >>> 48); - this.id = flowId; - this.permanent = permanent; - this.timeout = timeout; - this.tableId = tableId; - this.created = System.currentTimeMillis(); - - - //FIXME: fields below will be removed. - this.groupId = new DefaultGroupId(0); - this.payLoad = null; - } - - /** - * Support for the third party flow rule. Creates a flow rule of flow table. - * - * @param deviceId the identity of the device where this rule applies - * @param selector the traffic selector that identifies what traffic this - * rule - * @param treatment the traffic treatment that applies to selected traffic - * @param priority the flow rule priority given in natural order - * @param appId the application id of this flow - * @param timeout the timeout for this flow requested by an application - * @param permanent whether the flow is permanent i.e. does not time out - * @param payLoad 3rd-party origin private flow - */ - public DefaultFlowRule(DeviceId deviceId, TrafficSelector selector, - TrafficTreatment treatment, int priority, - ApplicationId appId, int timeout, boolean permanent, - FlowRuleExtPayLoad payLoad) { - - if (priority < FlowRule.MIN_PRIORITY) { - throw new IllegalArgumentException("Priority cannot be less than " - + MIN_PRIORITY); - } - - this.deviceId = deviceId; - this.priority = priority; - this.selector = selector; - this.treatment = treatment; - this.appId = appId.id(); - this.groupId = new DefaultGroupId(0); - this.timeout = timeout; - this.permanent = permanent; - this.tableId = 0; - this.created = System.currentTimeMillis(); - this.payLoad = payLoad; - - /* - * id consists of the following. | appId (16 bits) | groupId (16 bits) | - * flowId (32 bits) | - */ - this.id = FlowId.valueOf((((long) this.appId) << 48) - | (((long) this.groupId.id()) << 32) - | (this.hash() & 0xffffffffL)); - } - - /** - * Support for the third party flow rule. Creates a flow rule of group - * table. - * - * @param deviceId the identity of the device where this rule applies - * @param selector the traffic selector that identifies what traffic this - * rule - * @param treatment the traffic treatment that applies to selected traffic - * @param priority the flow rule priority given in natural order - * @param appId the application id of this flow - * @param groupId the group id of this flow - * @param timeout the timeout for this flow requested by an application - * @param permanent whether the flow is permanent i.e. does not time out - * @param payLoad 3rd-party origin private flow - * - */ - public DefaultFlowRule(DeviceId deviceId, TrafficSelector selector, - TrafficTreatment treatment, int priority, - ApplicationId appId, GroupId groupId, int timeout, - boolean permanent, FlowRuleExtPayLoad payLoad) { - - if (priority < FlowRule.MIN_PRIORITY) { - throw new IllegalArgumentException("Priority cannot be less than " - + MIN_PRIORITY); - } - - this.deviceId = deviceId; - this.priority = priority; - this.selector = selector; - this.treatment = treatment; - this.appId = appId.id(); - this.groupId = groupId; - this.timeout = timeout; - this.permanent = permanent; - this.created = System.currentTimeMillis(); - this.tableId = 0; - this.payLoad = payLoad; - - /* - * id consists of the following. | appId (16 bits) | groupId (16 bits) | - * flowId (32 bits) | - */ - this.id = FlowId.valueOf((((long) this.appId) << 48) - | (((long) this.groupId.id()) << 32) - | (this.hash() & 0xffffffffL)); - } - - @Override - public FlowId id() { - return id; - } - - @Override - public short appId() { - return appId; - } - - @Override - public GroupId groupId() { - return groupId; - } - - @Override - public int priority() { - return priority; - } - - @Override - public DeviceId deviceId() { - return deviceId; - } - - @Override - public TrafficSelector selector() { - return selector; - } - - @Override - public TrafficTreatment treatment() { - return treatment; - } - - @Override - /* - * The priority and statistics can change on a given treatment and selector - * - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public int hashCode() { - return Objects.hash(deviceId, selector, tableId, payLoad); - } - - //FIXME do we need this method in addition to hashCode()? - private int hash() { - return Objects.hash(deviceId, selector, tableId, payLoad); - } - - @Override - /* - * The priority and statistics can change on a given treatment and selector - * - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultFlowRule) { - DefaultFlowRule that = (DefaultFlowRule) obj; - return Objects.equals(deviceId, that.deviceId) && - Objects.equals(priority, that.priority) && - Objects.equals(selector, that.selector) && - Objects.equals(tableId, that.tableId) - && Objects.equals(payLoad, that.payLoad); - } - return false; - } - - @Override - public boolean exactMatch(FlowRule rule) { - return this.equals(rule) && - Objects.equals(this.id, rule.id()) && - Objects.equals(this.treatment, rule.treatment()); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("id", Long.toHexString(id.value())) - .add("deviceId", deviceId) - .add("priority", priority) - .add("selector", selector.criteria()) - .add("treatment", treatment == null ? "N/A" : treatment.allInstructions()) - .add("tableId", tableId) - .add("created", created) - .add("payLoad", payLoad) - .toString(); - } - - @Override - public int timeout() { - return timeout; - } - - @Override - public boolean isPermanent() { - return permanent; - } - - @Override - public int tableId() { - return tableId; - } - - public static Builder builder() { - return new Builder(); - } - - public static final class Builder implements FlowRule.Builder { - - private FlowId flowId; - private ApplicationId appId; - private Integer priority; - private DeviceId deviceId; - private Integer tableId = 0; - private TrafficSelector selector; - private TrafficTreatment treatment; - private Integer timeout; - private Boolean permanent; - - @Override - public FlowRule.Builder withCookie(long cookie) { - this.flowId = FlowId.valueOf(cookie); - return this; - } - - @Override - public FlowRule.Builder fromApp(ApplicationId appId) { - this.appId = appId; - return this; - } - - @Override - public FlowRule.Builder withPriority(int priority) { - this.priority = priority; - return this; - } - - @Override - public FlowRule.Builder forDevice(DeviceId deviceId) { - this.deviceId = deviceId; - return this; - } - - @Override - public FlowRule.Builder forTable(int tableId) { - this.tableId = tableId; - return this; - } - - @Override - public FlowRule.Builder withSelector(TrafficSelector selector) { - this.selector = selector; - return this; - } - - @Override - public FlowRule.Builder withTreatment(TrafficTreatment treatment) { - this.treatment = treatment; - return this; - } - - @Override - public FlowRule.Builder makePermanent() { - this.timeout = 0; - this.permanent = true; - return this; - } - - @Override - public FlowRule.Builder makeTemporary(int timeout) { - this.permanent = false; - this.timeout = timeout; - return this; - } - - @Override - public FlowRule build() { - checkArgument(flowId != null || appId != null, "Either an application" + - " id or a cookie must be supplied"); - checkNotNull(selector, "Traffic selector cannot be null"); - checkArgument(timeout != null || permanent != null, "Must either have " + - "a timeout or be permanent"); - checkNotNull(deviceId, "Must refer to a device"); - checkNotNull(priority, "Priority cannot be null"); - checkArgument(priority >= MIN_PRIORITY, "Priority cannot be less than " + - MIN_PRIORITY); - - // Computing a flow ID based on appId takes precedence over setting - // the flow ID directly - if (appId != null) { - flowId = computeFlowId(appId); - } - - return new DefaultFlowRule(deviceId, selector, treatment, priority, - flowId, permanent, timeout, tableId); - } - - private FlowId computeFlowId(ApplicationId appId) { - return FlowId.valueOf((((long) appId.id()) << 48) - | (hash() & 0xffffffffL)); - } - - private int hash() { - return Objects.hash(deviceId, priority, selector, tableId); - } - - } - - @Override - public FlowRuleExtPayLoad payLoad() { - return payLoad; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTableStatisticsEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTableStatisticsEntry.java deleted file mode 100644 index 929b285d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTableStatisticsEntry.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.net.flow; - -import org.onosproject.net.DeviceId; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default implementation of table statistics entry interface. - */ -public final class DefaultTableStatisticsEntry implements TableStatisticsEntry { - - private final DeviceId deviceId; - private final int tableId; - private final long activeFlowEntries; - private final long packetsLookedupCount; - private final long packetsMatchedCount; - - /** - * Default table statistics constructor. - * - * @param deviceId device identifier - * @param tableId table identifier - * @param activeFlowEntries number of active flow entries in the table - * @param packetsLookedupCount number of packets looked up in table - * @param packetsMatchedCount number of packets that hit table - */ - public DefaultTableStatisticsEntry(DeviceId deviceId, - int tableId, - long activeFlowEntries, - long packetsLookedupCount, - long packetsMatchedCount) { - this.deviceId = checkNotNull(deviceId); - this.tableId = tableId; - this.activeFlowEntries = activeFlowEntries; - this.packetsLookedupCount = packetsLookedupCount; - this.packetsMatchedCount = packetsMatchedCount; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder("device: " + deviceId + ", "); - - sb.append("tableId: " + this.tableId + ", "); - sb.append("activeEntries: " + this.activeFlowEntries + ", "); - sb.append("packetsLookedUp: " + this.packetsLookedupCount + ", "); - sb.append("packetsMatched: " + this.packetsMatchedCount); - - return sb.toString(); - } - - @Override - public int tableId() { - return tableId; - } - - @Override - public long activeFlowEntries() { - return activeFlowEntries; - } - - @Override - public long packetsLookedup() { - return packetsLookedupCount; - } - - @Override - public long packetsMatched() { - return packetsMatchedCount; - } - - @Override - public DeviceId deviceId() { - return deviceId; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java deleted file mode 100644 index 0525d8fa..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; -import org.onlab.packet.Ip4Address; -import org.onlab.packet.Ip6Address; -import org.onlab.packet.IpPrefix; -import org.onlab.packet.MacAddress; -import org.onlab.packet.MplsLabel; -import org.onlab.packet.TpPort; -import org.onlab.packet.VlanId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.criteria.Criteria; -import org.onosproject.net.flow.criteria.Criterion; -import org.onosproject.net.flow.criteria.ExtensionSelector; - -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.TreeSet; - -/** - * Default traffic selector implementation. - */ -public final class DefaultTrafficSelector implements TrafficSelector { - - private static final Comparator<? super Criterion> TYPE_COMPARATOR = - (c1, c2) -> c1.type().compareTo(c2.type()); - - private final Set<Criterion> criteria; - - private static final TrafficSelector EMPTY - = new DefaultTrafficSelector(Collections.emptySet()); - - /** - * Creates a new traffic selector with the specified criteria. - * - * @param criteria criteria - */ - private DefaultTrafficSelector(Set<Criterion> criteria) { - TreeSet<Criterion> elements = new TreeSet<>(TYPE_COMPARATOR); - elements.addAll(criteria); - this.criteria = ImmutableSet.copyOf(elements); - } - - @Override - public Set<Criterion> criteria() { - return criteria; - } - - @Override - public Criterion getCriterion(Criterion.Type type) { - for (Criterion c : criteria) { - if (c.type() == type) { - return c; - } - } - return null; - } - - @Override - public int hashCode() { - return criteria.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultTrafficSelector) { - DefaultTrafficSelector that = (DefaultTrafficSelector) obj; - return Objects.equals(criteria, that.criteria); - - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("criteria", criteria) - .toString(); - } - - /** - * Returns a new traffic selector builder. - * - * @return traffic selector builder - */ - public static TrafficSelector.Builder builder() { - return new Builder(); - } - - /** - * Returns an empty traffic selector. - * - * @return empty traffic selector - */ - public static TrafficSelector emptySelector() { - return EMPTY; - } - - /** - * Returns a new traffic selector builder primed to produce entities - * patterned after the supplied selector. - * - * @param selector base selector - * @return traffic selector builder - */ - public static TrafficSelector.Builder builder(TrafficSelector selector) { - return new Builder(selector); - } - - /** - * Builder of traffic selector entities. - */ - public static final class Builder implements TrafficSelector.Builder { - - private final Map<Criterion.Type, Criterion> selector = new HashMap<>(); - - private Builder() { - } - - private Builder(TrafficSelector selector) { - for (Criterion c : selector.criteria()) { - add(c); - } - } - - @Override - public Builder add(Criterion criterion) { - selector.put(criterion.type(), criterion); - return this; - } - - @Override - public Builder matchInPort(PortNumber port) { - return add(Criteria.matchInPort(port)); - } - - @Override - public Builder matchInPhyPort(PortNumber port) { - return add(Criteria.matchInPhyPort(port)); - } - - @Override - public Builder matchMetadata(long metadata) { - return add(Criteria.matchMetadata(metadata)); - } - - @Override - public Builder matchEthDst(MacAddress addr) { - return add(Criteria.matchEthDst(addr)); - } - - @Override - public Builder matchEthSrc(MacAddress addr) { - return add(Criteria.matchEthSrc(addr)); - } - - @Override - public Builder matchEthType(short ethType) { - return add(Criteria.matchEthType(ethType)); - } - - @Override - public Builder matchVlanId(VlanId vlanId) { - return add(Criteria.matchVlanId(vlanId)); - } - - @Override - public Builder matchVlanPcp(byte vlanPcp) { - return add(Criteria.matchVlanPcp(vlanPcp)); - } - - @Override - public Builder matchIPDscp(byte ipDscp) { - return add(Criteria.matchIPDscp(ipDscp)); - } - - @Override - public Builder matchIPEcn(byte ipEcn) { - return add(Criteria.matchIPEcn(ipEcn)); - } - - @Override - public Builder matchIPProtocol(byte proto) { - return add(Criteria.matchIPProtocol(proto)); - } - - @Override - public Builder matchIPSrc(IpPrefix ip) { - return add(Criteria.matchIPSrc(ip)); - } - - @Override - public Builder matchIPDst(IpPrefix ip) { - return add(Criteria.matchIPDst(ip)); - } - - @Deprecated - @Override - public Builder matchTcpSrc(short tcpPort) { - return matchTcpSrc(TpPort.tpPort(tcpPort)); - } - - @Override - public Builder matchTcpSrc(TpPort tcpPort) { - return add(Criteria.matchTcpSrc(tcpPort)); - } - - @Deprecated - @Override - public Builder matchTcpDst(short tcpPort) { - return matchTcpDst(TpPort.tpPort(tcpPort)); - } - - @Override - public Builder matchTcpDst(TpPort tcpPort) { - return add(Criteria.matchTcpDst(tcpPort)); - } - - @Deprecated - @Override - public Builder matchUdpSrc(short udpPort) { - return matchUdpSrc(TpPort.tpPort(udpPort)); - } - - @Override - public Builder matchUdpSrc(TpPort udpPort) { - return add(Criteria.matchUdpSrc(udpPort)); - } - - @Deprecated - @Override - public Builder matchUdpDst(short udpPort) { - return matchUdpDst(TpPort.tpPort(udpPort)); - } - - @Override - public Builder matchUdpDst(TpPort udpPort) { - return add(Criteria.matchUdpDst(udpPort)); - } - - @Deprecated - @Override - public Builder matchSctpSrc(short sctpPort) { - return matchSctpSrc(TpPort.tpPort(sctpPort)); - } - - @Override - public Builder matchSctpSrc(TpPort sctpPort) { - return add(Criteria.matchSctpSrc(sctpPort)); - } - - @Deprecated - @Override - public Builder matchSctpDst(short sctpPort) { - return matchSctpDst(TpPort.tpPort(sctpPort)); - } - - @Override - public Builder matchSctpDst(TpPort sctpPort) { - return add(Criteria.matchSctpDst(sctpPort)); - } - - @Override - public Builder matchIcmpType(byte icmpType) { - return add(Criteria.matchIcmpType(icmpType)); - } - - @Override - public Builder matchIcmpCode(byte icmpCode) { - return add(Criteria.matchIcmpCode(icmpCode)); - } - - @Override - public Builder matchIPv6Src(IpPrefix ip) { - return add(Criteria.matchIPv6Src(ip)); - } - - @Override - public Builder matchIPv6Dst(IpPrefix ip) { - return add(Criteria.matchIPv6Dst(ip)); - } - - @Override - public Builder matchIPv6FlowLabel(int flowLabel) { - return add(Criteria.matchIPv6FlowLabel(flowLabel)); - } - - @Override - public Builder matchIcmpv6Type(byte icmpv6Type) { - return add(Criteria.matchIcmpv6Type(icmpv6Type)); - } - - @Override - public Builder matchIcmpv6Code(byte icmpv6Code) { - return add(Criteria.matchIcmpv6Code(icmpv6Code)); - } - - @Override - public Builder matchIPv6NDTargetAddress(Ip6Address targetAddress) { - return add(Criteria.matchIPv6NDTargetAddress(targetAddress)); - } - - @Override - public Builder matchIPv6NDSourceLinkLayerAddress(MacAddress mac) { - return add(Criteria.matchIPv6NDSourceLinkLayerAddress(mac)); - } - - @Override - public Builder matchIPv6NDTargetLinkLayerAddress(MacAddress mac) { - return add(Criteria.matchIPv6NDTargetLinkLayerAddress(mac)); - } - - @Override - public Builder matchMplsLabel(MplsLabel mplsLabel) { - return add(Criteria.matchMplsLabel(mplsLabel)); - } - - @Override - public Builder matchMplsBos(boolean mplsBos) { - return add(Criteria.matchMplsBos(mplsBos)); - } - - @Override - public TrafficSelector.Builder matchTunnelId(long tunnelId) { - return add(Criteria.matchTunnelId(tunnelId)); - } - - @Override - public Builder matchIPv6ExthdrFlags(short exthdrFlags) { - return add(Criteria.matchIPv6ExthdrFlags(exthdrFlags)); - } - - @Override - public Builder matchArpTpa(Ip4Address addr) { - return add(Criteria.matchArpTpa(addr)); - } - - @Override - public Builder matchArpSpa(Ip4Address addr) { - return add(Criteria.matchArpSpa(addr)); - } - - @Override - public Builder matchArpTha(MacAddress addr) { - return add(Criteria.matchArpTha(addr)); - } - - @Override - public Builder matchArpSha(MacAddress addr) { - return add(Criteria.matchArpSha(addr)); - } - - @Override - public Builder matchArpOp(int arpOp) { - return add(Criteria.matchArpOp(arpOp)); - } - - @Override - public TrafficSelector.Builder extension(ExtensionSelector extensionSelector, - DeviceId deviceId) { - return add(Criteria.extension(extensionSelector, deviceId)); - } - - @Override - public TrafficSelector build() { - return new DefaultTrafficSelector(ImmutableSet.copyOf(selector.values())); - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java deleted file mode 100644 index 40291f57..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java +++ /dev/null @@ -1,524 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.List; -import java.util.Objects; - -import org.onlab.packet.EthType; -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.MplsLabel; -import org.onlab.packet.TpPort; -import org.onlab.packet.VlanId; -import org.onosproject.core.GroupId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.IndexedLambda; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.instructions.ExtensionTreatment; -import org.onosproject.net.flow.instructions.Instruction; -import org.onosproject.net.flow.instructions.Instructions; -import org.onosproject.net.meter.MeterId; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; - -/** - * Default traffic treatment implementation. - */ -public final class DefaultTrafficTreatment implements TrafficTreatment { - - private final List<Instruction> immediate; - private final List<Instruction> deferred; - private final List<Instruction> all; - private final Instructions.TableTypeTransition table; - private final Instructions.MetadataInstruction meta; - - private final boolean hasClear; - - private static final DefaultTrafficTreatment EMPTY - = new DefaultTrafficTreatment(ImmutableList.of(Instructions.createNoAction())); - private final Instructions.MeterInstruction meter; - - /** - * Creates a new traffic treatment from the specified list of instructions. - * - * @param immediate immediate instructions - */ - private DefaultTrafficTreatment(List<Instruction> immediate) { - this.immediate = ImmutableList.copyOf(checkNotNull(immediate)); - this.deferred = ImmutableList.of(); - this.all = this.immediate; - this.hasClear = false; - this.table = null; - this.meta = null; - this.meter = null; - } - - /** - * Creates a new traffic treatment from the specified list of instructions. - * - * @param deferred deferred instructions - * @param immediate immediate instructions - * @param table table transition instruction - * @param clear instruction to clear the deferred actions list - */ - private DefaultTrafficTreatment(List<Instruction> deferred, - List<Instruction> immediate, - Instructions.TableTypeTransition table, - boolean clear, - Instructions.MetadataInstruction meta, - Instructions.MeterInstruction meter) { - this.immediate = ImmutableList.copyOf(checkNotNull(immediate)); - this.deferred = ImmutableList.copyOf(checkNotNull(deferred)); - this.all = new ImmutableList.Builder<Instruction>() - .addAll(immediate) - .addAll(deferred) - .build(); - this.table = table; - this.meta = meta; - this.hasClear = clear; - this.meter = meter; - } - - @Override - public List<Instruction> deferred() { - return deferred; - } - - @Override - public List<Instruction> immediate() { - return immediate; - } - - @Override - public List<Instruction> allInstructions() { - return all; - } - - @Override - public Instructions.TableTypeTransition tableTransition() { - return table; - } - - @Override - public boolean clearedDeferred() { - return hasClear; - } - - @Override - public Instructions.MetadataInstruction writeMetadata() { - return meta; - } - - @Override - public Instructions.MeterInstruction metered() { - return meter; - } - - /** - * Returns a new traffic treatment builder. - * - * @return traffic treatment builder - */ - public static TrafficTreatment.Builder builder() { - return new Builder(); - } - - /** - * Returns an empty traffic treatment. - * - * @return empty traffic treatment - */ - public static TrafficTreatment emptyTreatment() { - return EMPTY; - } - - /** - * Returns a new traffic treatment builder primed to produce entities - * patterned after the supplied treatment. - * - * @param treatment base treatment - * @return traffic treatment builder - */ - public static TrafficTreatment.Builder builder(TrafficTreatment treatment) { - return new Builder(treatment); - } - - //FIXME: Order of instructions may affect hashcode - @Override - public int hashCode() { - return Objects.hash(immediate, deferred, table, meta); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultTrafficTreatment) { - DefaultTrafficTreatment that = (DefaultTrafficTreatment) obj; - return Objects.equals(immediate, that.immediate) && - Objects.equals(deferred, that.deferred) && - Objects.equals(table, that.table) && - Objects.equals(meta, that.meta); - - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("immediate", immediate) - .add("deferred", deferred) - .add("transition", table == null ? "None" : table.toString()) - .add("cleared", hasClear) - .add("metadata", meta) - .toString(); - } - - /** - * Builds a list of treatments following the following order. - * Modifications -> Group -> Output (including drop) - */ - public static final class Builder implements TrafficTreatment.Builder { - - boolean clear = false; - - Instructions.TableTypeTransition table; - - Instructions.MetadataInstruction meta; - - Instructions.MeterInstruction meter; - - List<Instruction> deferred = Lists.newLinkedList(); - - List<Instruction> immediate = Lists.newLinkedList(); - - List<Instruction> current = immediate; - - // Creates a new builder - private Builder() { - } - - // Creates a new builder based off an existing treatment - private Builder(TrafficTreatment treatment) { - deferred(); - treatment.deferred().forEach(i -> add(i)); - - immediate(); - treatment.immediate().stream() - // NOACTION will get re-added if there are no other actions - .filter(i -> i.type() != Instruction.Type.NOACTION) - .forEach(i -> add(i)); - - clear = treatment.clearedDeferred(); - } - - @Override - public Builder add(Instruction instruction) { - - switch (instruction.type()) { - case DROP: - case NOACTION: - case OUTPUT: - case GROUP: - case QUEUE: - case L0MODIFICATION: - case L1MODIFICATION: - case L2MODIFICATION: - case L3MODIFICATION: - case L4MODIFICATION: - case EXTENSION: - current.add(instruction); - break; - case TABLE: - table = (Instructions.TableTypeTransition) instruction; - break; - case METADATA: - meta = (Instructions.MetadataInstruction) instruction; - break; - case METER: - meter = (Instructions.MeterInstruction) instruction; - break; - default: - throw new IllegalArgumentException("Unknown instruction type: " + - instruction.type()); - } - - return this; - } - - /** - * Add a NOACTION when DROP instruction is explicitly specified. - * - * @return the traffic treatment builder - */ - @Override - public Builder drop() { - return add(Instructions.createNoAction()); - } - - /** - * Add a NOACTION when no instruction is specified. - * - * @return the traffic treatment builder - */ - private Builder noAction() { - return add(Instructions.createNoAction()); - } - - @Override - public Builder punt() { - return add(Instructions.createOutput(PortNumber.CONTROLLER)); - } - - @Override - public Builder setOutput(PortNumber number) { - return add(Instructions.createOutput(number)); - } - - @Override - public Builder setEthSrc(MacAddress addr) { - return add(Instructions.modL2Src(addr)); - } - - @Override - public Builder setEthDst(MacAddress addr) { - return add(Instructions.modL2Dst(addr)); - } - - @Override - public Builder setVlanId(VlanId id) { - return add(Instructions.modVlanId(id)); - } - - @Override - public Builder setVlanPcp(Byte pcp) { - return add(Instructions.modVlanPcp(pcp)); - } - - @Override - public Builder setIpSrc(IpAddress addr) { - return add(Instructions.modL3Src(addr)); - } - - @Override - public Builder setIpDst(IpAddress addr) { - return add(Instructions.modL3Dst(addr)); - } - - @Override - public Builder decNwTtl() { - return add(Instructions.decNwTtl()); - } - - @Override - public Builder copyTtlIn() { - return add(Instructions.copyTtlIn()); - } - - @Override - public Builder copyTtlOut() { - return add(Instructions.copyTtlOut()); - } - - @Override - public Builder pushMpls() { - return add(Instructions.pushMpls()); - } - - @Override - public Builder popMpls() { - return add(Instructions.popMpls()); - } - - @Override - public Builder popMpls(int etherType) { - return add(Instructions.popMpls(new EthType(etherType))); - } - - @Override - public Builder popMpls(EthType etherType) { - return add(Instructions.popMpls(etherType)); - } - - @Override - public Builder setMpls(MplsLabel mplsLabel) { - return add(Instructions.modMplsLabel(mplsLabel)); - } - - @Override - public Builder setMplsBos(boolean mplsBos) { - return add(Instructions.modMplsBos(mplsBos)); - } - - @Override - public Builder decMplsTtl() { - return add(Instructions.decMplsTtl()); - } - - @Deprecated - @Override - public Builder setLambda(short lambda) { - return add(Instructions.modL0Lambda(new IndexedLambda(lambda))); - } - - @Override - public Builder group(GroupId groupId) { - return add(Instructions.createGroup(groupId)); - } - - @Override - public Builder setQueue(long queueId) { - return add(Instructions.setQueue(queueId, null)); - } - - @Override - public Builder setQueue(long queueId, PortNumber port) { - return add(Instructions.setQueue(queueId, port)); - } - - @Override - public TrafficTreatment.Builder meter(MeterId meterId) { - return add(Instructions.meterTraffic(meterId)); - } - - @Override - public Builder popVlan() { - return add(Instructions.popVlan()); - } - - @Override - public Builder pushVlan() { - return add(Instructions.pushVlan()); - } - - @Override - public Builder transition(Integer tableId) { - return add(Instructions.transition(tableId)); - } - - @Override - public Builder immediate() { - current = immediate; - return this; - } - - @Override - public Builder deferred() { - current = deferred; - return this; - } - - @Override - public Builder wipeDeferred() { - clear = true; - return this; - } - - @Override - public Builder writeMetadata(long metadata, long metadataMask) { - return add(Instructions.writeMetadata(metadata, metadataMask)); - } - - @Override - public Builder setTunnelId(long tunnelId) { - return add(Instructions.modTunnelId(tunnelId)); - } - - @Deprecated - @Override - public TrafficTreatment.Builder setTcpSrc(short port) { - return setTcpSrc(TpPort.tpPort(port)); - } - - @Override - public TrafficTreatment.Builder setTcpSrc(TpPort port) { - return add(Instructions.modTcpSrc(port)); - } - - @Deprecated - @Override - public TrafficTreatment.Builder setTcpDst(short port) { - return setTcpDst(TpPort.tpPort(port)); - } - - @Override - public TrafficTreatment.Builder setTcpDst(TpPort port) { - return add(Instructions.modTcpDst(port)); - } - - @Deprecated - @Override - public TrafficTreatment.Builder setUdpSrc(short port) { - return setUdpSrc(TpPort.tpPort(port)); - } - - @Override - public TrafficTreatment.Builder setUdpSrc(TpPort port) { - return add(Instructions.modUdpSrc(port)); - } - - @Deprecated - @Override - public TrafficTreatment.Builder setUdpDst(short port) { - return setUdpDst(TpPort.tpPort(port)); - } - - @Override - public TrafficTreatment.Builder setUdpDst(TpPort port) { - return add(Instructions.modUdpDst(port)); - } - - @Override - public Builder setArpSpa(IpAddress addr) { - return add(Instructions.modArpSpa(addr)); - } - - @Override - public Builder setArpSha(MacAddress addr) { - return add(Instructions.modArpSha(addr)); - } - - @Override - public Builder setArpOp(short op) { - return add(Instructions.modL3ArpOp(op)); - } - - @Override - public TrafficTreatment.Builder extension(ExtensionTreatment extension, - DeviceId deviceId) { - return add(Instructions.extension(extension, deviceId)); - } - - @Override - public TrafficTreatment build() { - if (deferred.size() == 0 && immediate.size() == 0 - && table == null && !clear) { - immediate(); - noAction(); - } - return new DefaultTrafficTreatment(deferred, immediate, table, clear, meta, meter); - } - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTypedFlowEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTypedFlowEntry.java deleted file mode 100644 index afceb14e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTypedFlowEntry.java +++ /dev/null @@ -1,122 +0,0 @@ -/*
- * 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.net.flow;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-/**
- * Default flow entry class with FlowLiveType value, IMMEDIATE_FLOW, SHORT_FLOW, MID_FLOW, LONG_FLOW.
- */
-public class DefaultTypedFlowEntry extends DefaultFlowEntry
- implements TypedStoredFlowEntry {
- private FlowLiveType liveType;
-
- /**
- * Creates a typed flow entry from flow rule and its statistics, with default flow live type(IMMEDIATE_FLOW).
- *
- * @param rule the flow rule
- * @param state the flow state
- * @param life the flow duration since creation
- * @param packets the flow packets count
- * @param bytes the flow bytes count
- *
- */
- public DefaultTypedFlowEntry(FlowRule rule, FlowEntryState state,
- long life, long packets, long bytes) {
- super(rule, state, life, packets, bytes);
- this.liveType = FlowLiveType.IMMEDIATE_FLOW;
- }
-
- /**
- * Creates a typed flow entry from flow rule, with default flow live type(IMMEDIATE_FLOW).
- *
- * @param rule the flow rule
- *
- */
- public DefaultTypedFlowEntry(FlowRule rule) {
- super(rule);
- this.liveType = FlowLiveType.IMMEDIATE_FLOW;
- }
-
- /**
- * Creates a typed flow entry from flow entry, with default flow live type(IMMEDIATE_FLOW).
- *
- * @param fe the flow entry
- *
- */
- public DefaultTypedFlowEntry(FlowEntry fe) {
- super(fe, fe.state(), fe.life(), fe.packets(), fe.bytes());
- this.liveType = FlowLiveType.IMMEDIATE_FLOW;
- }
-
- /**
- * Creates a typed flow entry from flow rule and flow live type.
- *
- * @param rule the flow rule
- * @param liveType the flow live type
- *
- */
- public DefaultTypedFlowEntry(FlowRule rule, FlowLiveType liveType) {
- super(rule);
- this.liveType = liveType;
- }
-
- /**
- * Creates a typed flow entry from flow entry and flow live type.
- *
- * @param fe the flow rule
- * @param liveType the flow live type
- *
- */
- public DefaultTypedFlowEntry(FlowEntry fe, FlowLiveType liveType) {
- super(fe, fe.state(), fe.life(), fe.packets(), fe.bytes());
- this.liveType = liveType;
- }
-
- /**
- * Creates a typed flow entry from flow rule, error code and flow live type.
- *
- * @param rule the flow rule
- * @param errType the flow error type
- * @param errCode the flow error code
- * @param liveType the flow live type
- *
- */
- public DefaultTypedFlowEntry(FlowRule rule, int errType, int errCode, FlowLiveType liveType) {
- super(rule, errType, errCode);
- this.liveType = liveType;
- }
-
- @Override
- public FlowLiveType flowLiveType() {
- return this.liveType;
- }
-
- @Override
- public void setFlowLiveType(FlowLiveType liveType) {
- this.liveType = liveType;
- }
-
- @Override
- public String toString() {
- return toStringHelper(this)
- .add("entry", super.toString())
- .add("type", liveType)
- .toString();
- }
-}
-
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/Extension.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/Extension.java deleted file mode 100644 index 1d61542e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/Extension.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * 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.net.flow; - -import org.onosproject.net.flow.instructions.ExtensionPropertyException; - -import java.util.List; - -/** - * An extension to the northbound APIs. - */ -public interface Extension { - - /** - * Sets a property on the extension. - * - * @param key property key - * @param value value to set for the given key - * @param <T> class of the value - * @throws ExtensionPropertyException if the given key is not a valid - * property on this extension - */ - <T> void setPropertyValue(String key, T value) throws ExtensionPropertyException; - - /** - * Gets a property value of an extension. - * - * @param key property key - * @param <T> class of the value - * @return value of the property - * @throws ExtensionPropertyException if the given key is not a valid - * property on this extension - */ - <T> T getPropertyValue(String key) throws ExtensionPropertyException; - - /** - * Gets a list of all properties on the extension. - * - * @return list of properties - */ - List<String> getProperties(); - - /** - * Serialize the extension to a byte array. - * - * @return byte array - */ - byte[] serialize(); - - /** - * Deserialize the extension from a byte array. The properties - * of this object will be overwritten with the data in the byte array. - * - * @param data input byte array - */ - void deserialize(byte[] data); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowEntry.java deleted file mode 100644 index 389b2142..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowEntry.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - - -/** - * Represents a generalized match & action pair to be applied to - * an infrastucture device. - */ -public interface FlowEntry extends FlowRule { - - - enum FlowEntryState { - - /** - * Indicates that this rule has been submitted for addition. - * Not necessarily in the flow table. - */ - PENDING_ADD, - - /** - * Rule has been added which means it is in the flow table. - */ - ADDED, - - /** - * Flow has been marked for removal, might still be in flow table. - */ - PENDING_REMOVE, - - /** - * Flow has been removed from flow table and can be purged. - */ - REMOVED, - - /** - * Indicates that the installation of this flow has failed. - */ - FAILED - } - - /** - * Returns the flow entry state. - * - * @return flow entry state - */ - FlowEntryState state(); - - /** - * Returns the number of milliseconds this flow rule has been applied. - * - * @return number of millis - */ - long life(); - - /** - * Returns the number of packets this flow rule has matched. - * - * @return number of packets - */ - long packets(); - - /** - * Returns the number of bytes this flow rule has matched. - * - * @return number of bytes - */ - long bytes(); - - // TODO: consider removing this attribute - /** - * When this flow entry was last deemed active. - * @return epoch time of last activity - */ - long lastSeen(); - - /** - * Indicates the error type. - * @return an integer value of the error - */ - int errType(); - - /** - * Indicates the error code. - * @return an integer value of the error - */ - int errCode(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowId.java deleted file mode 100644 index 52500f59..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowId.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import com.google.common.base.Objects; - -/** - * Representation of a Flow ID. - */ -public final class FlowId { - - private final long flowid; - - private FlowId(long id) { - this.flowid = id; - } - - public static FlowId valueOf(long id) { - return new FlowId(id); - } - - public long value() { - return flowid; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (obj.getClass() == this.getClass()) { - FlowId that = (FlowId) obj; - return Objects.equal(this.flowid, that.flowid); - } - return false; - } - - @Override - public int hashCode() { - return Objects.hashCode(this.flowid); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java deleted file mode 100644 index 35d45fbd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRule.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import org.onosproject.core.ApplicationId; -import org.onosproject.core.GroupId; -import org.onosproject.net.DeviceId; - -/** - * Represents a generalized match & action pair to be applied to an - * infrastructure device. - */ -public interface FlowRule { - - int MAX_TIMEOUT = 60; - int MIN_PRIORITY = 0; - - /** - * Returns the ID of this flow. - * - * @return the flow ID - */ - FlowId id(); - - /** - * Returns the application id of this flow. - * - * @return an applicationId - */ - short appId(); - - /** - * Returns the group id of this flow. - * - * @return an groupId - */ - GroupId groupId(); - - /** - * Returns the flow rule priority given in natural order; higher numbers - * mean higher priorities. - * - * @return flow rule priority - */ - int priority(); - - /** - * Returns the identity of the device where this rule applies. - * - * @return device identifier - */ - DeviceId deviceId(); - - /** - * Returns the traffic selector that identifies what traffic this rule - * should apply to. - * - * @return traffic selector - */ - TrafficSelector selector(); - - /** - * Returns the traffic treatment that applies to selected traffic. - * - * @return traffic treatment - */ - TrafficTreatment treatment(); - - /** - * Returns the timeout for this flow requested by an application. - * - * @return integer value of the timeout - */ - int timeout(); - - /** - * Returns whether the flow is permanent i.e. does not time out. - * - * @return true if the flow is permanent, otherwise false - */ - boolean isPermanent(); - - /** - * Returns the table id for this rule. - * - * @return an integer. - */ - int tableId(); - - /** - * {@inheritDoc} - * - * Equality for flow rules only considers 'match equality'. This means that - * two flow rules with the same match conditions will be equal, regardless - * of the treatment or other characteristics of the flow. - * - * @param obj the reference object with which to compare. - * @return {@code true} if this object is the same as the obj - * argument; {@code false} otherwise. - */ - boolean equals(Object obj); - - /** - * Returns whether this flow rule is an exact match to the flow rule given - * in the argument. - * <p> - * Exact match means that deviceId, priority, selector, - * tableId, flowId and treatment are equal. Note that this differs from - * the notion of object equality for flow rules, which does not consider the - * flowId or treatment when testing equality. - * </p> - * - * @param rule other rule to match against - * @return true if the rules are an exact match, otherwise false - */ - boolean exactMatch(FlowRule rule); - - /** - * A flowrule builder. - */ - interface Builder { - - /** - * Assigns a cookie value to this flowrule. Mutually exclusive with the - * fromApp method. This method is intended to take a cookie value from - * the dataplane and not from the application. - * - * @param cookie a long value - * @return this - */ - Builder withCookie(long cookie); - - /** - * Assigns the application that built this flow rule to this object. - * The short value of the appId will be used as a basis for the - * cookie value computation. It is expected that application use this - * call to set their application id. - * - * @param appId an application id - * @return this - */ - Builder fromApp(ApplicationId appId); - - /** - * Sets the priority for this flow rule. - * - * @param priority an integer - * @return this - */ - Builder withPriority(int priority); - - /** - * Sets the deviceId for this flow rule. - * - * @param deviceId a device id - * @return this - */ - Builder forDevice(DeviceId deviceId); - - /** - * Sets the table id for this flow rule. Default value is 0. - * - * @param tableId an integer - * @return this - */ - Builder forTable(int tableId); - - /** - * Sets the selector (or match field) for this flow rule. - * - * @param selector a traffic selector - * @return this - */ - Builder withSelector(TrafficSelector selector); - - /** - * Sets the traffic treatment for this flow rule. - * - * @param treatment a traffic treatment - * @return this - */ - Builder withTreatment(TrafficTreatment treatment); - - /** - * Makes this rule permanent on the dataplane. - * - * @return this - */ - Builder makePermanent(); - - /** - * Makes this rule temporary and timeout after the specified amount - * of time. - * - * @param timeout an integer - * @return this - */ - Builder makeTemporary(int timeout); - - /** - * Builds a flow rule object. - * - * @return a flow rule. - */ - FlowRule build(); - - } - - /** - * Returns the third party original flow rule. - * - * @return FlowRuleExtPayLoad - */ - FlowRuleExtPayLoad payLoad(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchEntry.java deleted file mode 100644 index 455c6bd8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchEntry.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import org.onosproject.net.flow.FlowRuleBatchEntry.FlowRuleOperation; - -@Deprecated -/** - * @deprecated in Drake release - no longer a public API - */ -public class FlowRuleBatchEntry - extends BatchOperationEntry<FlowRuleOperation, FlowRule> { - - private final Long id; // FIXME: consider using Optional<Long> - - public FlowRuleBatchEntry(FlowRuleOperation operator, FlowRule target) { - super(operator, target); - this.id = null; - } - - public FlowRuleBatchEntry(FlowRuleOperation operator, FlowRule target, Long id) { - super(operator, target); - this.id = id; - } - - public Long id() { - return id; - } - - public enum FlowRuleOperation { - ADD, - REMOVE, - MODIFY - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchEvent.java deleted file mode 100644 index 2e823c23..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchEvent.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import org.onosproject.event.AbstractEvent; -import org.onosproject.net.DeviceId; - -@Deprecated -/** - * Describes flow rule batch event. - * - * @deprecated in Drake release - no longer a public API - */ -public final class FlowRuleBatchEvent extends AbstractEvent<FlowRuleBatchEvent.Type, FlowRuleBatchRequest> { - - - /** - * Type of flow rule events. - */ - public enum Type { - - // Request has been forwarded to MASTER Node - /** - * Signifies that a batch operation has been initiated. - */ - BATCH_OPERATION_REQUESTED, - - // MASTER Node has pushed the batch down to the Device - // (e.g., Received barrier reply) - /** - * Signifies that a batch operation has completed. - */ - BATCH_OPERATION_COMPLETED, - } - - private final CompletedBatchOperation result; - private final DeviceId deviceId; - - /** - * Constructs a new FlowRuleBatchEvent. - * - * @param request batch operation request - * @param deviceId the device this batch will be processed on - * @return event. - */ - public static FlowRuleBatchEvent requested(FlowRuleBatchRequest request, DeviceId deviceId) { - FlowRuleBatchEvent event = new FlowRuleBatchEvent(Type.BATCH_OPERATION_REQUESTED, request, deviceId); - return event; - } - - /** - * Constructs a new FlowRuleBatchEvent. - * @param request batch operation request. - * @param result completed batch operation result. - * @return event. - */ - public static FlowRuleBatchEvent completed(FlowRuleBatchRequest request, CompletedBatchOperation result) { - FlowRuleBatchEvent event = new FlowRuleBatchEvent(Type.BATCH_OPERATION_COMPLETED, request, result); - return event; - } - - /** - * Returns the result of this batch operation. - * @return batch operation result. - */ - public CompletedBatchOperation result() { - return result; - } - - /** - * Returns the deviceId for this batch. - * @return device id - */ - public DeviceId deviceId() { - return deviceId; - } - - /** - * Creates an event of a given type and for the specified flow rule batch. - * - * @param type flow rule batch event type - * @param request event flow rule batch subject - * @param result the result of the batch operation - */ - private FlowRuleBatchEvent(Type type, FlowRuleBatchRequest request, CompletedBatchOperation result) { - super(type, request); - this.result = result; - this.deviceId = result.deviceId(); - } - - /** - * Creates an event of a given type and for the specified flow rule batch. - * - * @param type flow rule batch event type - * @param request event flow rule batch subject - * @param deviceId the device id for this batch - */ - private FlowRuleBatchEvent(Type type, FlowRuleBatchRequest request, DeviceId deviceId) { - super(type, request); - this.result = null; - this.deviceId = deviceId; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchOperation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchOperation.java deleted file mode 100644 index 35428f46..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchOperation.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import org.onosproject.net.DeviceId; - -import java.util.Collection; - -@Deprecated -/** - * Class used with the flow subsystem to process per device - * batches. - * - * @deprecated in Drake release - no longer a public API - */ -public class FlowRuleBatchOperation - extends BatchOperation<FlowRuleBatchEntry> { - - /** - * This id is used to cary to id of the original - * FlowOperations and track where this batch operation - * came from. The id is unique cluster wide. - */ - private final long id; - private final DeviceId deviceId; - - public FlowRuleBatchOperation(Collection<FlowRuleBatchEntry> operations, - DeviceId deviceId, long flowOperationId) { - super(operations); - this.id = flowOperationId; - this.deviceId = deviceId; - } - - public DeviceId deviceId() { - return this.deviceId; - } - - public long id() { - return id; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchRequest.java deleted file mode 100644 index 0b0585b9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleBatchRequest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import com.google.common.collect.Lists; -import org.onosproject.net.DeviceId; - -import java.util.Collections; -import java.util.List; -import java.util.Set; - -@Deprecated -/** - * @deprecated in Drake release - no longer a public API - */ -public class FlowRuleBatchRequest { - - /** - * This id is used to carry to id of the original - * FlowOperations and track where this batch operation - * came from. The id is unique cluster wide. - */ - private final long batchId; - - private final Set<FlowRuleBatchEntry> ops; - - - public FlowRuleBatchRequest(long batchId, Set<FlowRuleBatchEntry> ops) { - this.batchId = batchId; - this.ops = Collections.unmodifiableSet(ops); - } - - public Set<FlowRuleBatchEntry> ops() { - return ops; - } - - public FlowRuleBatchOperation asBatchOperation(DeviceId deviceId) { - List<FlowRuleBatchEntry> entries = Lists.newArrayList(); - entries.addAll(ops); - return new FlowRuleBatchOperation(entries, deviceId, batchId); - } - - public long batchId() { - return batchId; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleEvent.java deleted file mode 100644 index 41ef1c8a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleEvent.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import org.onosproject.event.AbstractEvent; - -/** - * Describes flow rule event. - */ -public class FlowRuleEvent extends AbstractEvent<FlowRuleEvent.Type, FlowRule> { - - /** - * Type of flow rule events. - */ - public enum Type { - /** - * Signifies that a new flow rule has been detected. - */ - RULE_ADDED, - - /** - * Signifies that a flow rule has been removed. - */ - RULE_REMOVED, - - /** - * Signifies that a rule has been updated. - */ - RULE_UPDATED, - - // internal event between Manager <-> Store - - /* - * Signifies that a request to add flow rule has been added to the store. - */ - RULE_ADD_REQUESTED, - /* - * Signifies that a request to remove flow rule has been added to the store. - */ - RULE_REMOVE_REQUESTED, - } - - /** - * Creates an event of a given type and for the specified flow rule and the - * current time. - * - * @param type flow rule event type - * @param flowRule event flow rule subject - */ - public FlowRuleEvent(Type type, FlowRule flowRule) { - super(type, flowRule); - } - - /** - * Creates an event of a given type and for the specified flow rule and time. - * - * @param type flow rule event type - * @param flowRule event flow rule subject - * @param time occurrence time - */ - public FlowRuleEvent(Type type, FlowRule flowRule, long time) { - super(type, flowRule, time); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleExtPayLoad.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleExtPayLoad.java deleted file mode 100644 index d4d2d9ec..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleExtPayLoad.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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.net.flow; - -import static com.google.common.base.MoreObjects.toStringHelper; - -import java.util.Arrays; - -/** - * Represents for 3rd-party private original flow. - */ -public final class FlowRuleExtPayLoad { - private final byte[] payLoad; - - /** - * private constructor. - * - * @param payLoad private flow - */ - private FlowRuleExtPayLoad(byte[] payLoad) { - this.payLoad = payLoad; - } - - /** - * Creates a FlowRuleExtPayLoad. - * - * @param payLoad payload byte data - * @return FlowRuleExtPayLoad payLoad - */ - public static FlowRuleExtPayLoad flowRuleExtPayLoad(byte[] payLoad) { - return new FlowRuleExtPayLoad(payLoad); - } - - /** - * Returns private flow. - * - * @return payLoad private flow - */ - public byte[] payLoad() { - return payLoad; - } - - @Override - public int hashCode() { - return Arrays.hashCode(payLoad); - } - - public int hash() { - return Arrays.hashCode(payLoad); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof FlowRuleExtPayLoad) { - FlowRuleExtPayLoad that = (FlowRuleExtPayLoad) obj; - return Arrays.equals(payLoad, that.payLoad); - - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this).add("payLoad", payLoad).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleListener.java deleted file mode 100644 index 1a6ef7d9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving flow rule related events. - */ -public interface FlowRuleListener extends EventListener<FlowRuleEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperation.java deleted file mode 100644 index 82d43be8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperation.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.net.flow; - -import com.google.common.base.MoreObjects; - -/** - * Representation of an operation on a flow rule table. - */ -public class FlowRuleOperation { - - /** - * Type of flow table operations. - */ - public enum Type { - ADD, - MODIFY, - REMOVE - } - - private final FlowRule rule; - private final Type type; - - public FlowRuleOperation(FlowRule rule, Type type) { - this.rule = rule; - this.type = type; - } - - /** - * Returns the type of operation. - * - * @return type - */ - public Type type() { - return type; - } - - /** - * Returns the flow rule. - * - * @return flow rule - */ - public FlowRule rule() { - return rule; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("rule", rule) - .add("type", type) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java deleted file mode 100644 index 84e0b8be..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperations.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * 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.net.flow; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; - -import java.util.List; -import java.util.Set; - -import static org.onosproject.net.flow.FlowRuleOperation.Type.*; - -/** - * A batch of flow rule operations that are broken into stages. - * TODO move this up to parent's package - */ -public class FlowRuleOperations { - - private final List<Set<FlowRuleOperation>> stages; - private final FlowRuleOperationsContext callback; // TODO consider Optional - - private FlowRuleOperations(List<Set<FlowRuleOperation>> stages, - FlowRuleOperationsContext cb) { - this.stages = stages; - this.callback = cb; - } - - // kryo-constructor - protected FlowRuleOperations() { - this.stages = Lists.newArrayList(); - this.callback = null; - } - - /** - * Returns the flow rule operations as sets of stages that should be - * executed sequentially. - * - * @return flow rule stages - */ - public List<Set<FlowRuleOperation>> stages() { - return stages; - } - - /** - * Returns the callback for this batch of operations. - * - * @return callback - */ - public FlowRuleOperationsContext callback() { - return callback; - } - - /** - * Returns a new builder. - * - * @return new builder - */ - public static Builder builder() { - return new Builder(); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("stages", stages) - .toString(); - } - - /** - * A builder for constructing flow rule operations. - */ - public static final class Builder { - - private final ImmutableList.Builder<Set<FlowRuleOperation>> listBuilder = ImmutableList.builder(); - private ImmutableSet.Builder<FlowRuleOperation> currentStage = ImmutableSet.builder(); - - // prevent use of the default constructor outside of this file; use the above method - private Builder() {} - - /** - * Appends a flow rule add to the current stage. - * - * @param flowRule flow rule - * @return this - */ - public Builder add(FlowRule flowRule) { - currentStage.add(new FlowRuleOperation(flowRule, ADD)); - return this; - } - - /** - * Appends an existing flow rule to the current stage. - * - * @param flowRuleOperation flow rule operation - * @return this - */ - public Builder operation(FlowRuleOperation flowRuleOperation) { - currentStage.add(flowRuleOperation); - return this; - } - - /** - * Appends a flow rule modify to the current stage. - * - * @param flowRule flow rule - * @return this - */ - public Builder modify(FlowRule flowRule) { - currentStage.add(new FlowRuleOperation(flowRule, MODIFY)); - return this; - } - - /** - * Appends a flow rule remove to the current stage. - * - * @param flowRule flow rule - * @return this - */ - // FIXME this is confusing, consider renaming - public Builder remove(FlowRule flowRule) { - currentStage.add(new FlowRuleOperation(flowRule, REMOVE)); - return this; - } - - /** - * Closes the current stage. - */ - private void closeStage() { - ImmutableSet<FlowRuleOperation> stage = currentStage.build(); - if (!stage.isEmpty()) { - listBuilder.add(stage); - } - } - - /** - * Closes the current stage and starts a new one. - * - * @return this - */ - public Builder newStage() { - closeStage(); - currentStage = ImmutableSet.builder(); - return this; - } - - /** - * Builds the immutable flow rule operations. - * - * @return flow rule operations - */ - public FlowRuleOperations build() { - return build(null); - } - - /** - * Builds the immutable flow rule operations. - * - * @param cb the callback to call when this operation completes - * @return flow rule operations - */ - public FlowRuleOperations build(FlowRuleOperationsContext cb) { - closeStage(); - return new FlowRuleOperations(listBuilder.build(), cb); - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperationsContext.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperationsContext.java deleted file mode 100644 index c405b129..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleOperationsContext.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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.net.flow; - -/** - * The context of a flow rule operations that will become the subject of - * the notification. - * - * Implementations of this class must be serializable. - */ -public interface FlowRuleOperationsContext { - // TODO we might also want to execute a method on behalf of the app - default void onSuccess(FlowRuleOperations ops){} - default void onError(FlowRuleOperations ops){} -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProvider.java deleted file mode 100644 index ac2895eb..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProvider.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.provider.Provider; - -/** - * Abstraction of a flow rule provider. - */ -public interface FlowRuleProvider extends Provider { - - /** - * Instructs the provider to apply the specified flow rules to their - * respective devices. - * @param flowRules one or more flow rules - * throws SomeKindOfException that indicates which ones were applied and - * which ones failed - */ - void applyFlowRule(FlowRule... flowRules); - - /** - * Instructs the provider to remove the specified flow rules to their - * respective devices. - * @param flowRules one or more flow rules - * throws SomeKindOfException that indicates which ones were applied and - * which ones failed - */ - void removeFlowRule(FlowRule... flowRules); - - /** - * Removes rules by their id. - * @param id the id to remove - * @param flowRules one or more flow rules - */ - void removeRulesById(ApplicationId id, FlowRule... flowRules); - - /** - * Installs a batch of flow rules. Each flowrule is associated to an - * operation which results in either addition, removal or modification. - * @param batch a batch of flow rules - */ - void executeBatch(FlowRuleBatchOperation batch); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProviderRegistry.java deleted file mode 100644 index 7e317c01..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProviderRegistry.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import org.onosproject.net.provider.ProviderRegistry; - -/** - * Abstraction for a flow rule provider registry. - */ -public interface FlowRuleProviderRegistry - extends ProviderRegistry<FlowRuleProvider, FlowRuleProviderService> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProviderService.java deleted file mode 100644 index aefa96b4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleProviderService.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import java.util.List; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.provider.ProviderService; - -/** - * Service through which flow rule providers can inject information into - * the core. - */ -public interface FlowRuleProviderService extends ProviderService<FlowRuleProvider> { - - /** - * Signals that a flow rule that was previously installed has been removed. - * - * @param flowEntry removed flow entry - */ - void flowRemoved(FlowEntry flowEntry); - - /** - * Pushes the collection of flow entries currently applied on the given - * device. - * - * @param deviceId device identifier - * @param flowEntries collection of flow rules - */ - void pushFlowMetrics(DeviceId deviceId, Iterable<FlowEntry> flowEntries); - - /** - * Pushes the collection of flow entries currently applied on the given - * device without flowMissing process. - * - * @param deviceId device identifier - * @param flowEntries collection of flow rules - */ - void pushFlowMetricsWithoutFlowMissing(DeviceId deviceId, Iterable<FlowEntry> flowEntries); - - /** - * Pushes the collection of table statistics entries currently extracted - * from the given device. - * - * @param deviceId device identifier - * @param tableStatsEntries collection of flow table statistics entries - */ - void pushTableStatistics(DeviceId deviceId, List<TableStatisticsEntry> tableStatsEntries); - - /** - * Indicates to the core that the requested batch operation has - * been completed. - * - * @param batchId the batch which was processed - * @param operation the resulting outcome of the operation - */ - void batchOperationCompleted(long batchId, CompletedBatchOperation operation); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java deleted file mode 100644 index ee8d5a98..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleService.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import org.onosproject.core.ApplicationId; -import org.onosproject.event.ListenerService; -import org.onosproject.net.DeviceId; - -/** - * Service for injecting flow rules into the environment and for obtaining - * information about flow rules already in the environment. This implements - * semantics of a distributed authoritative flow table where the master copy - * of the flow rules lies with the controller and the devices hold only the - * 'cached' copy. - */ -public interface FlowRuleService - extends ListenerService<FlowRuleEvent, FlowRuleListener> { - - /** - * The topic used for obtaining globally unique ids. - */ - String FLOW_OP_TOPIC = "flow-ops-ids"; - - /** - * Returns the number of flow rules in the system. - * - * @return flow rule count - */ - int getFlowRuleCount(); - - /** - * Returns the collection of flow entries applied on the specified device. - * This will include flow rules which may not yet have been applied to - * the device. - * - * @param deviceId device identifier - * @return collection of flow rules - */ - Iterable<FlowEntry> getFlowEntries(DeviceId deviceId); - - // TODO: add createFlowRule factory method and execute operations method - - /** - * Applies the specified flow rules onto their respective devices. These - * flow rules will be retained by the system and re-applied anytime the - * device reconnects to the controller. - * - * @param flowRules one or more flow rules - */ - void applyFlowRules(FlowRule... flowRules); - - /** - * Removes the specified flow rules from their respective devices. If the - * device is not presently connected to the controller, these flow will - * be removed once the device reconnects. - * - * @param flowRules one or more flow rules - * throws SomeKindOfException that indicates which ones were removed and - * which ones failed - */ - void removeFlowRules(FlowRule... flowRules); - - /** - * Removes all rules by id. - * - * @param appId id to remove - */ - void removeFlowRulesById(ApplicationId appId); - - /** - * Returns a list of rules with this application id. - * - * @param id the id to look up - * @return collection of flow rules - */ - Iterable<FlowRule> getFlowRulesById(ApplicationId id); - - /** - * Returns a list of rules filterd by application and group id. - * - * @param appId the application id to lookup - * @param groupId the groupid to lookup - * @return collection of flow rules - */ - Iterable<FlowRule> getFlowRulesByGroupId(ApplicationId appId, short groupId); - - /** - * Applies a batch operation of FlowRules. - * - * @param ops batch operation to apply - */ - void apply(FlowRuleOperations ops); - - /** - * Returns the collection of flow table statistics of the specified device. - * - * @param deviceId device identifier - * @return collection of flow table statistics - */ - Iterable<TableStatisticsEntry> getFlowTableStatistics(DeviceId deviceId); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java deleted file mode 100644 index d81c73c9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import java.util.List; - -import org.onosproject.net.DeviceId; -import org.onosproject.store.Store; - -/** - * Manages inventory of flow rules; not intended for direct use. - */ -public interface FlowRuleStore extends Store<FlowRuleBatchEvent, FlowRuleStoreDelegate> { - - /** - * Returns the number of flow rule in the store. - * - * @return number of flow rules - */ - int getFlowRuleCount(); - - /** - * Returns the stored flow. - * - * @param rule the rule to look for - * @return a flow rule - */ - FlowEntry getFlowEntry(FlowRule rule); - - /** - * Returns the flow entries associated with a device. - * - * @param deviceId the device ID - * @return the flow entries - */ - Iterable<FlowEntry> getFlowEntries(DeviceId deviceId); - - /** - * // TODO: Better description of method behavior. - * Stores a new flow rule without generating events. - * - * @param rule the flow rule to add - * @deprecated in Cardinal Release - */ - @Deprecated - void storeFlowRule(FlowRule rule); - - /** - * Stores a batch of flow rules. - * - * @param batchOperation batch of flow rules. - * A batch can contain flow rules for a single device only. - * - */ - void storeBatch(FlowRuleBatchOperation batchOperation); - - /** - * Invoked on the completion of a storeBatch operation. - * - * @param event flow rule batch event - */ - void batchOperationComplete(FlowRuleBatchEvent event); - - /** - * Marks a flow rule for deletion. Actual deletion will occur - * when the provider indicates that the flow has been removed. - * - * @param rule the flow rule to delete - */ - void deleteFlowRule(FlowRule rule); - - /** - * Stores a new flow rule, or updates an existing entry. - * - * @param rule the flow rule to add or update - * @return flow_added event, or null if just an update - */ - FlowRuleEvent addOrUpdateFlowRule(FlowEntry rule); - - /** - * @param rule the flow entry to remove - * @return flow_removed event, or null if nothing removed - */ - FlowRuleEvent removeFlowRule(FlowEntry rule); - - /** - * Updates the flow table statistics of the specified device using - * the given statistics. - * - * @param deviceId device identifier - * @param tableStats list of table statistics - * @return ready to send event describing what occurred; - */ - FlowRuleEvent updateTableStatistics(DeviceId deviceId, - List<TableStatisticsEntry> tableStats); - - /** - * Returns the flow table statistics associated with a device. - * - * @param deviceId the device ID - * @return the flow table statistics - */ - Iterable<TableStatisticsEntry> getTableStatistics(DeviceId deviceId); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStoreDelegate.java deleted file mode 100644 index c4ddb129..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - -import org.onosproject.store.StoreDelegate; - -/** - * Flow rule store delegate abstraction. - */ -public interface FlowRuleStoreDelegate extends StoreDelegate<FlowRuleBatchEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/StoredFlowEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/StoredFlowEntry.java deleted file mode 100644 index dc0c3395..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/StoredFlowEntry.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2014 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.net.flow; - - -public interface StoredFlowEntry extends FlowEntry { - - /** - * Sets the last active epoch time. - */ - void setLastSeen(); - - /** - * Sets the new state for this entry. - * @param newState new flow entry state. - */ - void setState(FlowEntryState newState); - - /** - * Sets how long this entry has been entered in the system. - * @param life epoch time - */ - void setLife(long life); - - /** - * Number of packets seen by this entry. - * @param packets a long value - */ - void setPackets(long packets); - - /** - * Number of bytes seen by this rule. - * @param bytes a long value - */ - void setBytes(long bytes); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TableStatisticsEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TableStatisticsEntry.java deleted file mode 100644 index 563f31ce..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TableStatisticsEntry.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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.net.flow; - -import org.onosproject.net.DeviceId; - -/** - * Interface for flow table statistics of a device. - */ -public interface TableStatisticsEntry { - - /** - * Returns the device Id. - * - * @return device id - */ - DeviceId deviceId(); - - /** - * Returns the table number. - * - * @return table number - */ - int tableId(); - - /** - * Returns the number of active flow entries in this table. - * - * @return the number of active flow entries - */ - long activeFlowEntries(); - - /** - * Returns the number of packets looked up in the table. - * - * @return the number of packets looked up in the table - */ - long packetsLookedup(); - - /** - * Returns the number of packets that successfully matched in the table. - * - * @return the number of packets that successfully matched in the table - */ - long packetsMatched(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficSelector.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficSelector.java deleted file mode 100644 index 0d055add..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficSelector.java +++ /dev/null @@ -1,447 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import org.onlab.packet.Ip4Address; -import org.onlab.packet.Ip6Address; -import org.onlab.packet.IpPrefix; -import org.onlab.packet.MacAddress; -import org.onlab.packet.MplsLabel; -import org.onlab.packet.TpPort; -import org.onlab.packet.VlanId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.criteria.Criterion; -import org.onosproject.net.flow.criteria.ExtensionSelector; - -import java.util.Set; - -/** - * Abstraction of a slice of network traffic. - */ -public interface TrafficSelector { - - /** - * Returns selection criteria as an ordered list. - * - * @return list of criteria - */ - Set<Criterion> criteria(); - - /** - * Returns the selection criterion for a particular type, if it exists in - * this traffic selector. - * - * @param type criterion type to look up - * @return the criterion of the specified type if one exists, otherwise null - */ - Criterion getCriterion(Criterion.Type type); - - /** - * Builder of traffic selector entities. - */ - interface Builder { - - /** - * Adds a traffic selection criterion. If a same type criterion has - * already been added, it will be replaced by this one. - * - * @param criterion new criterion - * @return self - */ - Builder add(Criterion criterion); - - /** - * Matches an inport. - * - * @param port the inport - * @return a selection builder - */ - Builder matchInPort(PortNumber port); - - /** - * Matches a physical inport. - * - * @param port the physical inport - * @return a selection builder - */ - Builder matchInPhyPort(PortNumber port); - - /** - * Matches a metadata. - * - * @param metadata the metadata - * @return a selection builder - */ - Builder matchMetadata(long metadata); - - /** - * Matches a l2 dst address. - * - * @param addr a l2 address - * @return a selection builder - */ - Builder matchEthDst(MacAddress addr); - - /** - * Matches a l2 src address. - * - * @param addr a l2 address - * @return a selection builder - */ - Builder matchEthSrc(MacAddress addr); - - /** - * Matches the ethernet type. - * - * @param ethType an ethernet type - * @return a selection builder - */ - Builder matchEthType(short ethType); - - /** - * Matches the vlan id. - * - * @param vlanId a vlan id - * @return a selection builder - */ - Builder matchVlanId(VlanId vlanId); - - /** - * Matches a vlan priority. - * - * @param vlanPcp a vlan priority - * @return a selection builder - */ - Builder matchVlanPcp(byte vlanPcp); - - /** - * Matches an IP DSCP (6 bits in ToS field). - * - * @param ipDscp an IP DSCP value - * @return a selection builder - */ - Builder matchIPDscp(byte ipDscp); - - /** - * Matches an IP ECN (2 bits in ToS field). - * - * @param ipEcn an IP ECN value - * @return a selection builder - */ - Builder matchIPEcn(byte ipEcn); - - /** - * Matches the l3 protocol. - * - * @param proto a l3 protocol - * @return a selection builder - */ - Builder matchIPProtocol(byte proto); - - /** - * Matches a l3 IPv4 address. - * - * @param ip a l3 address - * @return a selection builder - */ - Builder matchIPSrc(IpPrefix ip); - - /** - * Matches a l3 IPv4 address. - * - * @param ip a l3 address - * @return a selection builder - */ - Builder matchIPDst(IpPrefix ip); - - /** - * Matches a TCP source port number. - * - * @param tcpPort a TCP source port number - * @return a selection builder - * @deprecated in Drake release - */ - @Deprecated - Builder matchTcpSrc(short tcpPort); - - /** - * Matches a TCP source port number. - * - * @param tcpPort a TCP source port number - * @return a selection builder - */ - Builder matchTcpSrc(TpPort tcpPort); - - /** - * Matches a TCP destination port number. - * - * @param tcpPort a TCP destination port number - * @return a selection builder - * @deprecated in Drake release - */ - @Deprecated - Builder matchTcpDst(short tcpPort); - - /** - * Matches a TCP destination port number. - * - * @param tcpPort a TCP destination port number - * @return a selection builder - */ - Builder matchTcpDst(TpPort tcpPort); - - /** - * Matches an UDP source port number. - * - * @param udpPort an UDP source port number - * @return a selection builder - * @deprecated in Drake release - */ - @Deprecated - Builder matchUdpSrc(short udpPort); - - /** - * Matches an UDP source port number. - * - * @param udpPort an UDP source port number - * @return a selection builder - */ - Builder matchUdpSrc(TpPort udpPort); - - /** - * Matches an UDP destination port number. - * - * @param udpPort an UDP destination port number - * @return a selection builder - * @deprecated in Drake release - */ - @Deprecated - Builder matchUdpDst(short udpPort); - - /** - * Matches an UDP destination port number. - * - * @param udpPort an UDP destination port number - * @return a selection builder - */ - Builder matchUdpDst(TpPort udpPort); - - /** - * Matches a SCTP source port number. - * - * @param sctpPort a SCTP source port number - * @return a selection builder - * @deprecated in Drake release - */ - @Deprecated - Builder matchSctpSrc(short sctpPort); - - /** - * Matches a SCTP source port number. - * - * @param sctpPort a SCTP source port number - * @return a selection builder - */ - Builder matchSctpSrc(TpPort sctpPort); - - /** - * Matches a SCTP destination port number. - * - * @param sctpPort a SCTP destination port number - * @return a selection builder - * @deprecated in Drake release - */ - @Deprecated - Builder matchSctpDst(short sctpPort); - - /** - * Matches a SCTP destination port number. - * - * @param sctpPort a SCTP destination port number - * @return a selection builder - */ - Builder matchSctpDst(TpPort sctpPort); - - /** - * Matches an ICMP type. - * - * @param icmpType an ICMP type - * @return a selection builder - */ - Builder matchIcmpType(byte icmpType); - - /** - * Matches an ICMP code. - * - * @param icmpCode an ICMP code - * @return a selection builder - */ - Builder matchIcmpCode(byte icmpCode); - - /** - * Matches a l3 IPv6 address. - * - * @param ip a l3 IPv6 address - * @return a selection builder - */ - Builder matchIPv6Src(IpPrefix ip); - - /** - * Matches a l3 IPv6 address. - * - * @param ip a l3 IPv6 address - * @return a selection builder - */ - Builder matchIPv6Dst(IpPrefix ip); - - /** - * Matches an IPv6 flow label. - * - * @param flowLabel an IPv6 flow label - * @return a selection builder - */ - Builder matchIPv6FlowLabel(int flowLabel); - - /** - * Matches an ICMPv6 type. - * - * @param icmpv6Type an ICMPv6 type - * @return a selection builder - */ - Builder matchIcmpv6Type(byte icmpv6Type); - - /** - * Matches an ICMPv6 code. - * - * @param icmpv6Code an ICMPv6 code - * @return a selection builder - */ - Builder matchIcmpv6Code(byte icmpv6Code); - - /** - * Matches an IPv6 Neighbor Discovery target address. - * - * @param targetAddress an IPv6 Neighbor Discovery target address - * @return a selection builder - */ - Builder matchIPv6NDTargetAddress(Ip6Address targetAddress); - - /** - * Matches an IPv6 Neighbor Discovery source link-layer address. - * - * @param mac an IPv6 Neighbor Discovery source link-layer address - * @return a selection builder - */ - Builder matchIPv6NDSourceLinkLayerAddress(MacAddress mac); - - /** - * Matches an IPv6 Neighbor Discovery target link-layer address. - * - * @param mac an IPv6 Neighbor Discovery target link-layer address - * @return a selection builder - */ - Builder matchIPv6NDTargetLinkLayerAddress(MacAddress mac); - - /** - * Matches on a MPLS label. - * - * @param mplsLabel a MPLS label. - * @return a selection builder - */ - Builder matchMplsLabel(MplsLabel mplsLabel); - - /** - * Matches on a MPLS Bottom-of-Stack indicator bit. - * - * @param mplsBos boolean value indicating BOS=1 (true) or BOS=0 (false). - * @return a selection builder - */ - Builder matchMplsBos(boolean mplsBos); - - /** - * Matches a tunnel id. - * - * @param tunnelId a tunnel id - * @return a selection builder - */ - Builder matchTunnelId(long tunnelId); - - /** - * Matches on IPv6 Extension Header pseudo-field flags. - * - * @param exthdrFlags the IPv6 Extension Header pseudo-field flags - * @return a selection builder - */ - Builder matchIPv6ExthdrFlags(short exthdrFlags); - - /** - * Matches a arp IPv4 destination address. - * - * @param addr a arp IPv4 destination address - * @return a selection builder - */ - Builder matchArpTpa(Ip4Address addr); - - /** - * Matches a arp IPv4 source address. - * - * @param addr a arp IPv4 source address - * @return a selection builder - */ - Builder matchArpSpa(Ip4Address addr); - - /** - * Matches a arp_eth_dst address. - * - * @param addr a arp_eth_dst address - * @return a selection builder - */ - Builder matchArpTha(MacAddress addr); - - /** - * Matches a arp_eth_src address. - * - * @param addr a arp_eth_src address - * @return a selection builder - */ - Builder matchArpSha(MacAddress addr); - - /** - * Matches a arp operation type. - * - * @param arpOp a arp operation type - * @return a selection builder - */ - Builder matchArpOp(int arpOp); - - /** - * Uses an extension selector. - * - * @param extensionSelector extension selector - * @param deviceId device ID - * @return a selection builder - */ - Builder extension(ExtensionSelector extensionSelector, DeviceId deviceId); - - /** - * Builds an immutable traffic selector. - * - * @return traffic selector - */ - TrafficSelector build(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java deleted file mode 100644 index 3e57925d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Copyright 2014-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.net.flow; - -import java.util.List; - -import org.onlab.packet.EthType; -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.MplsLabel; -import org.onlab.packet.TpPort; -import org.onlab.packet.VlanId; -import org.onosproject.core.GroupId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.instructions.ExtensionTreatment; -import org.onosproject.net.flow.instructions.Instruction; -import org.onosproject.net.flow.instructions.Instructions; -import org.onosproject.net.meter.MeterId; - -/** - * Abstraction of network traffic treatment. - */ -public interface TrafficTreatment { - - /** - * Returns the list of treatment instructions that will be applied - * further down the pipeline. - * @return list of treatment instructions - */ - List<Instruction> deferred(); - - /** - * Returns the list of treatment instructions that will be applied - * immediately. - * @return list of treatment instructions - */ - List<Instruction> immediate(); - - /** - * Returns the list of all instructions in the treatment, both immediate and - * deferred. - * - * @return list of treatment instructions - */ - List<Instruction> allInstructions(); - - /** - * Returns the next table in the pipeline. - * @return a table transition; may be null. - */ - Instructions.TableTypeTransition tableTransition(); - - /** - * Whether the deferred treatment instructions will be cleared - * by the device. - * @return a boolean - */ - boolean clearedDeferred(); - - /** - * Returns the metadata instruction if there is one. - * - * @return a metadata instruction that may be null - */ - Instructions.MetadataInstruction writeMetadata(); - - /** - * Returns the meter instruction if there is one. - * - * @return a meter instruction that may be null - */ - Instructions.MeterInstruction metered(); - - /** - * Builder of traffic treatment entities. - */ - interface Builder { - - /** - * Adds an instruction to the builder. - * - * @param instruction an instruction - * @return a treatment builder - */ - Builder add(Instruction instruction); - - /** - * Adds a drop instruction. - * - * @return a treatment builder - */ - Builder drop(); - - /** - * Adds a punt-to-controller instruction. - * - * @return a treatment builder - */ - Builder punt(); - - /** - * Set the output port. - * - * @param number the out port - * @return a treatment builder - */ - Builder setOutput(PortNumber number); - - /** - * Sets the src l2 address. - * - * @param addr a macaddress - * @return a treatment builder - */ - Builder setEthSrc(MacAddress addr); - - /** - * Sets the dst l2 address. - * - * @param addr a macaddress - * @return a treatment builder - */ - Builder setEthDst(MacAddress addr); - - /** - * Sets the vlan id. - * - * @param id a vlanid - * @return a treatment builder - */ - Builder setVlanId(VlanId id); - - /** - * Sets the vlan priority. - * - * @param pcp a vlan priority - * @return a treatment builder - */ - Builder setVlanPcp(Byte pcp); - - /** - * Sets the src l3 address. - * - * @param addr an ip - * @return a treatment builder - */ - Builder setIpSrc(IpAddress addr); - - /** - * Sets the dst l3 address. - * - * @param addr an ip - * @return a treatment builder - */ - Builder setIpDst(IpAddress addr); - - /** - * Decrement the TTL in IP header by one. - * - * @return a treatment builder - */ - Builder decNwTtl(); - - /** - * Copy the TTL to outer protocol layer. - * - * @return a treatment builder - */ - Builder copyTtlOut(); - - /** - * Copy the TTL to inner protocol layer. - * - * @return a treatment builder - */ - Builder copyTtlIn(); - - /** - * Push MPLS ether type. - * - * @return a treatment builder - */ - Builder pushMpls(); - - /** - * Pops MPLS ether type. - * - * @return a treatment builder - */ - Builder popMpls(); - - /** - * Pops MPLS ether type and set the new ethertype. - * - * @param etherType an ether type - * @return a treatment builder - * @deprecated in Drake Release - */ - @Deprecated - Builder popMpls(int etherType); - - /** - * Pops MPLS ether type and set the new ethertype. - * - * @param etherType an ether type - * @return a treatment builder - */ - Builder popMpls(EthType etherType); - - /** - * Sets the mpls label. - * - * @param mplsLabel MPLS label - * @return a treatment builder - */ - Builder setMpls(MplsLabel mplsLabel); - - /** - * Sets the mpls bottom-of-stack indicator bit. - * - * @param mplsBos boolean to set BOS=1 (true) or BOS=0 (false) - * @return a treatment builder. - */ - Builder setMplsBos(boolean mplsBos); - - /** - * Decrement MPLS TTL. - * - * @return a treatment builder - */ - Builder decMplsTtl(); - - /** - * Sets the optical channel ID or lambda. - * - * @param lambda optical channel ID - * @return a treatment builder - * @deprecated in Drake Release - */ - @Deprecated - Builder setLambda(short lambda); - - /** - * Sets the group ID. - * - * @param groupId group ID - * @return a treatment builder - */ - Builder group(GroupId groupId); - - /** - * Sets the Queue ID. - * - * @param queueId a queue ID - * @return a treatment builder - */ - Builder setQueue(long queueId); - - /** - * Sets the Queue ID for a specific port. - * - * @param queueId a queue ID - * @param port a port number - * @return a treatment builder - */ - Builder setQueue(long queueId, PortNumber port); - - /** - * Sets a meter to be used by this flow. - * - * @param meterId a meter id - * @return a treatment builder - */ - Builder meter(MeterId meterId); - - /** - * Sets the next table id to transition to. - * - * @param tableId the table table - * @return a treatement builder - */ - Builder transition(Integer tableId); - - - /** - * Pops outermost VLAN tag. - * - * @return a treatment builder - */ - Builder popVlan(); - - /** - * Pushes a new VLAN tag. - * - * @return a treatment builder - */ - Builder pushVlan(); - - /** - * Any instructions preceded by this method call will be deferred. - * @return a treatment builder - */ - Builder deferred(); - - /** - * Any instructions preceded by this method call will be immediate. - * @return a treatment builder - */ - Builder immediate(); - - - /** - * Instructs the device to clear the deferred instructions set. - * @return a treatment builder - */ - Builder wipeDeferred(); - - /** - * Writes metadata to associate with a packet. - * <pre> - * {@code - * new_metadata = (old_metadata & ̃mask) | (value & mask) - * } - * </pre> - * - * @param value the metadata to write - * @param mask the masked bits for the value - * @return a treatment builder - */ - Builder writeMetadata(long value, long mask); - - /** - * Sets the tunnel id. - * - * @param tunnelId a tunnel id - * @return a treatment builder - */ - Builder setTunnelId(long tunnelId); - - /** - * Sets the src TCP port. - * - * @param port a port number - * @return a treatment builder - * @deprecated in Drake release - */ - @Deprecated - Builder setTcpSrc(short port); - - /** - * Sets the src TCP port. - * - * @param port a port number - * @return a treatment builder - */ - Builder setTcpSrc(TpPort port); - - /** - * Sets the dst TCP port. - * - * @param port a port number - * @return a treatment builder - * @deprecated in Drake release - */ - @Deprecated - Builder setTcpDst(short port); - - /** - * Sets the dst TCP port. - * - * @param port a port number - * @return a treatment builder - */ - Builder setTcpDst(TpPort port); - - /** - * Sets the src UDP port. - * - * @param port a port number - * @return a treatment builder - * @deprecated in Drake release - */ - @Deprecated - Builder setUdpSrc(short port); - - /** - * Sets the src UDP port. - * - * @param port a port number - * @return a treatment builder - */ - Builder setUdpSrc(TpPort port); - - /** - * Sets the dst UDP port. - * - * @param port a port number - * @return a treatment builder - * @deprecated in Drake release - */ - @Deprecated - Builder setUdpDst(short port); - - /** - * Sets the dst UDP port. - * - * @param port a port number - * @return a treatment builder - */ - Builder setUdpDst(TpPort port); - - /** - * Sets the arp src ip address. - * - * @param addr an ip - * @return a treatment builder - */ - Builder setArpSpa(IpAddress addr); - - /** - * Sets the arp src mac address. - * - * @param addr a macaddress - * @return a treatment builder - */ - Builder setArpSha(MacAddress addr); - - /** - * Sets the arp operation. - * - * @param op the value of arp operation. - * @return a treatment builder. - */ - Builder setArpOp(short op); - - /** - * Uses an extension treatment. - * - * @param extension extension treatment - * @param deviceId device ID - * @return a treatment builder - */ - Builder extension(ExtensionTreatment extension, DeviceId deviceId); - - /** - * Builds an immutable traffic treatment descriptor. - * <p> - * If the treatment is empty when build() is called, it will add a default - * drop rule automatically. For a treatment that is actually empty, use - * {@link org.onosproject.net.flow.DefaultTrafficTreatment#emptyTreatment}. - * </p> - * - * @return traffic treatment - */ - TrafficTreatment build(); - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TypedStoredFlowEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TypedStoredFlowEntry.java deleted file mode 100644 index 965fd1f8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/TypedStoredFlowEntry.java +++ /dev/null @@ -1,67 +0,0 @@ -/*
- * 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.net.flow;
-
-/**
- * Represents a flow live type for a given flow entry.
- */
-public interface TypedStoredFlowEntry extends StoredFlowEntry {
- enum FlowLiveType {
- /**
- * Indicates that this rule has been submitted for addition immediately.
- * Not necessarily collecting flow stats.
- */
- IMMEDIATE_FLOW,
-
- /**
- * Indicates that this rule has been submitted for a short time.
- * Necessarily collecting flow stats every calAndPollInterval.
- */
- SHORT_FLOW,
-
- /**
- * Indicates that this rule has been submitted for a mid time.
- * Necessarily collecting flow stats every midPollInterval.
- */
- MID_FLOW,
-
- /**
- * Indicates that this rule has been submitted for a long time.
- * Necessarily collecting flow stats every longPollInterval.
- */
- LONG_FLOW,
-
- /**
- * Indicates that this rule has been submitted for UNKNOWN or ERROR.
- * Not necessarily collecting flow stats.
- */
- UNKNOWN_FLOW
- }
-
- /**
- * Gets the flow live type for this entry.
- *
- * @return flow live type
- */
- FlowLiveType flowLiveType();
-
- /**
- * Sets the new flow live type for this entry.
- * @param liveType new flow live type.
- */
- void setFlowLiveType(FlowLiveType liveType);
-}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpHaCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpHaCriterion.java deleted file mode 100644 index 71269dd1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpHaCriterion.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.net.flow.criteria; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Objects; - -import org.onlab.packet.MacAddress; - -/** - * Implementation of arp_eth_src address or arp_eth_dst address criterion. - */ -public final class ArpHaCriterion implements Criterion { - private final MacAddress mac; - private final Type type; - - /** - * Constructor. - * - * @param mac the MAC Address to match. - * @param type the match type. Should be one of the following: - * Type.ARP_SHA, Type.ARP_THA - */ - ArpHaCriterion(MacAddress mac, Type type) { - checkNotNull(mac, "mac cannot be null"); - checkNotNull(type, "type cannot be null"); - this.mac = mac; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the MAC Address to match. - * - * @return the MAC Address to match - */ - public MacAddress mac() { - return this.mac; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("mac", mac).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), mac); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ArpHaCriterion) { - ArpHaCriterion that = (ArpHaCriterion) obj; - return Objects.equals(mac, that.mac) && - Objects.equals(type, that.type); - } - return false; - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpOpCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpOpCriterion.java deleted file mode 100644 index 8c5398c6..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpOpCriterion.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.net.flow.criteria; - -import static com.google.common.base.MoreObjects.toStringHelper; - -import java.util.Objects; - -/** - * Implementation of arp operation type criterion. - */ -public final class ArpOpCriterion implements Criterion { - private final int arpOp; - private final Type type; - - /** - * Constructor. - * - * @param arpOp the arp operation type to match. - * @param type the match type. Should be the following: - * Type.ARP_OP - */ - ArpOpCriterion(int arpOp, Type type) { - this.arpOp = arpOp; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the arp operation type to match. - * - * @return the arp operation type to match - */ - public int arpOp() { - return this.arpOp; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("arpOp", arpOp).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), arpOp); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ArpOpCriterion) { - ArpOpCriterion that = (ArpOpCriterion) obj; - return Objects.equals(arpOp, that.arpOp) && - Objects.equals(type, that.type); - } - return false; - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpPaCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpPaCriterion.java deleted file mode 100644 index ba5a03d8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ArpPaCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import static com.google.common.base.MoreObjects.toStringHelper; - -import java.util.Objects; - -import org.onlab.packet.Ip4Address; - -/** - * Implementation of arp spa or tpa address criterion. - */ -public final class ArpPaCriterion implements Criterion { - private final Ip4Address ip; - private final Type type; - - /** - * Constructor. - * - * @param ip the Ip4 Address to match. - * @param type the match type. Should be one of the following: - * Type.ARP_SPA, Type.ARP_TPA - */ - ArpPaCriterion(Ip4Address ip, Type type) { - this.ip = ip; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the Ip4 Address to match. - * - * @return the Ip4 Address to match - */ - public Ip4Address ip() { - return this.ip; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("ip", ip).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), ip); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ArpPaCriterion) { - ArpPaCriterion that = (ArpPaCriterion) obj; - return Objects.equals(ip, that.ip) && - Objects.equals(type, that.type); - } - return false; - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java deleted file mode 100644 index c94b1e02..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Criteria.java +++ /dev/null @@ -1,624 +0,0 @@ -/* - * Copyright 2014-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.net.flow.criteria; - -import org.onlab.packet.EthType; -import org.onlab.packet.Ip4Address; -import org.onlab.packet.Ip6Address; -import org.onlab.packet.IpPrefix; -import org.onlab.packet.MacAddress; -import org.onlab.packet.MplsLabel; -import org.onlab.packet.TpPort; -import org.onlab.packet.VlanId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.IndexedLambda; -import org.onosproject.net.Lambda; -import org.onosproject.net.OchSignal; -import org.onosproject.net.OchSignalType; -import org.onosproject.net.OduSignalId; -import org.onosproject.net.OduSignalType; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.criteria.Criterion.Type; - -/** - * Factory class to create various traffic selection criteria. - */ -public final class Criteria { - - //TODO: incomplete type implementation. Need to implement complete list from Criterion - - // Ban construction - private Criteria() { - } - - /** - * Creates a match on IN_PORT field using the specified value. - * - * @param port inport value - * @return match criterion - */ - public static Criterion matchInPort(PortNumber port) { - return new PortCriterion(port, Type.IN_PORT); - } - - /** - * Creates a match on IN_PHY_PORT field using the specified value. - * - * @param port inport value - * @return match criterion - */ - public static Criterion matchInPhyPort(PortNumber port) { - return new PortCriterion(port, Type.IN_PHY_PORT); - } - - /** - * Creates a match on METADATA field using the specified value. - * - * @param metadata metadata value (64 bits data) - * @return match criterion - */ - public static Criterion matchMetadata(long metadata) { - return new MetadataCriterion(metadata); - } - - /** - * Creates a match on ETH_DST field using the specified value. This value - * may be a wildcard mask. - * - * @param mac MAC address value or wildcard mask - * @return match criterion - */ - public static Criterion matchEthDst(MacAddress mac) { - return new EthCriterion(mac, Type.ETH_DST); - } - - /** - * Creates a match on ETH_SRC field using the specified value. This value - * may be a wildcard mask. - * - * @param mac MAC address value or wildcard mask - * @return match criterion - */ - public static Criterion matchEthSrc(MacAddress mac) { - return new EthCriterion(mac, Type.ETH_SRC); - } - - /** - * Creates a match on ETH_TYPE field using the specified value. - * - * @param ethType eth type value (16 bits unsigned integer) - * @return match criterion - */ - public static Criterion matchEthType(int ethType) { - return new EthTypeCriterion(ethType); - } - - /** - * Creates a match on ETH_TYPE field using the specified value. - * - * @param ethType eth type value - * @return match criterion - */ - public static Criterion matchEthType(EthType ethType) { - return new EthTypeCriterion(ethType); - } - - /** - * Creates a match on VLAN ID field using the specified value. - * - * @param vlanId vlan id value - * @return match criterion - */ - public static Criterion matchVlanId(VlanId vlanId) { - return new VlanIdCriterion(vlanId); - } - - /** - * Creates a match on VLAN PCP field using the specified value. - * - * @param vlanPcp vlan pcp value (3 bits) - * @return match criterion - */ - public static Criterion matchVlanPcp(byte vlanPcp) { - return new VlanPcpCriterion(vlanPcp); - } - - /** - * Creates a match on IP DSCP field using the specified value. - * - * @param ipDscp ip dscp value (6 bits) - * @return match criterion - */ - public static Criterion matchIPDscp(byte ipDscp) { - return new IPDscpCriterion(ipDscp); - } - - /** - * Creates a match on IP ECN field using the specified value. - * - * @param ipEcn ip ecn value (2 bits) - * @return match criterion - */ - public static Criterion matchIPEcn(byte ipEcn) { - return new IPEcnCriterion(ipEcn); - } - - /** - * Creates a match on IP proto field using the specified value. - * - * @param proto ip protocol value (8 bits unsigned integer) - * @return match criterion - */ - public static Criterion matchIPProtocol(short proto) { - return new IPProtocolCriterion(proto); - } - - /** - * Creates a match on IPv4 source field using the specified value. - * - * @param ip ipv4 source value - * @return match criterion - */ - public static Criterion matchIPSrc(IpPrefix ip) { - return new IPCriterion(ip, Type.IPV4_SRC); - } - - /** - * Creates a match on IPv4 destination field using the specified value. - * - * @param ip ipv4 source value - * @return match criterion - */ - public static Criterion matchIPDst(IpPrefix ip) { - return new IPCriterion(ip, Type.IPV4_DST); - } - - /** - * Creates a match on TCP source port field using the specified value. - * - * @param tcpPort TCP source port - * @return match criterion - * @deprecated in Drake release - */ - @Deprecated - public static Criterion matchTcpSrc(short tcpPort) { - return new TcpPortCriterion(TpPort.tpPort(tcpPort), Type.TCP_SRC); - } - - /** - * Creates a match on TCP source port field using the specified value. - * - * @param tcpPort TCP source port - * @return match criterion - */ - public static Criterion matchTcpSrc(TpPort tcpPort) { - return new TcpPortCriterion(tcpPort, Type.TCP_SRC); - } - - /** - * Creates a match on TCP destination port field using the specified value. - * - * @param tcpPort TCP destination port - * @return match criterion - * @deprecated in Drake release - */ - @Deprecated - public static Criterion matchTcpDst(short tcpPort) { - return new TcpPortCriterion(TpPort.tpPort(tcpPort), Type.TCP_DST); - } - - /** - * Creates a match on TCP destination port field using the specified value. - * - * @param tcpPort TCP destination port - * @return match criterion - */ - public static Criterion matchTcpDst(TpPort tcpPort) { - return new TcpPortCriterion(tcpPort, Type.TCP_DST); - } - - /** - * Creates a match on TCP flags using the specified value. - * - * @param flags TCP flags - * @return match criterion - */ - public static Criterion matchTcpFlags(int flags) { - return new TcpFlagsCriterion(flags); - } - - /** - * Creates a match on UDP source port field using the specified value. - * - * @param udpPort UDP source port - * @return match criterion - * @deprecated in Drake release - */ - @Deprecated - public static Criterion matchUdpSrc(short udpPort) { - return new UdpPortCriterion(TpPort.tpPort(udpPort), Type.UDP_SRC); - } - - /** - * Creates a match on UDP source port field using the specified value. - * - * @param udpPort UDP source port - * @return match criterion - */ - public static Criterion matchUdpSrc(TpPort udpPort) { - return new UdpPortCriterion(udpPort, Type.UDP_SRC); - } - - /** - * Creates a match on UDP destination port field using the specified value. - * - * @param udpPort UDP destination port - * @return match criterion - * @deprecated in Drake release - */ - @Deprecated - public static Criterion matchUdpDst(short udpPort) { - return new UdpPortCriterion(TpPort.tpPort(udpPort), Type.UDP_DST); - } - - /** - * Creates a match on UDP destination port field using the specified value. - * - * @param udpPort UDP destination port - * @return match criterion - */ - public static Criterion matchUdpDst(TpPort udpPort) { - return new UdpPortCriterion(udpPort, Type.UDP_DST); - } - - /** - * Creates a match on SCTP source port field using the specified value. - * - * @param sctpPort SCTP source port - * @return match criterion - * @deprecated in Drake release - */ - @Deprecated - public static Criterion matchSctpSrc(short sctpPort) { - return new SctpPortCriterion(TpPort.tpPort(sctpPort), Type.SCTP_SRC); - } - - /** - * Creates a match on SCTP source port field using the specified value. - * - * @param sctpPort SCTP source port - * @return match criterion - */ - public static Criterion matchSctpSrc(TpPort sctpPort) { - return new SctpPortCriterion(sctpPort, Type.SCTP_SRC); - } - - /** - * Creates a match on SCTP destination port field using the specified - * value. - * - * @param sctpPort SCTP destination port - * @return match criterion - * @deprecated in Drake release - */ - @Deprecated - public static Criterion matchSctpDst(short sctpPort) { - return new SctpPortCriterion(TpPort.tpPort(sctpPort), Type.SCTP_DST); - } - - /** - * Creates a match on SCTP destination port field using the specified - * value. - * - * @param sctpPort SCTP destination port - * @return match criterion - */ - public static Criterion matchSctpDst(TpPort sctpPort) { - return new SctpPortCriterion(sctpPort, Type.SCTP_DST); - } - - /** - * Creates a match on ICMP type field using the specified value. - * - * @param icmpType ICMP type (8 bits unsigned integer) - * @return match criterion - */ - public static Criterion matchIcmpType(short icmpType) { - return new IcmpTypeCriterion(icmpType); - } - - /** - * Creates a match on ICMP code field using the specified value. - * - * @param icmpCode ICMP code (8 bits unsigned integer) - * @return match criterion - */ - public static Criterion matchIcmpCode(short icmpCode) { - return new IcmpCodeCriterion(icmpCode); - } - - /** - * Creates a match on IPv6 source field using the specified value. - * - * @param ip ipv6 source value - * @return match criterion - */ - public static Criterion matchIPv6Src(IpPrefix ip) { - return new IPCriterion(ip, Type.IPV6_SRC); - } - - /** - * Creates a match on IPv6 destination field using the specified value. - * - * @param ip ipv6 destination value - * @return match criterion - */ - public static Criterion matchIPv6Dst(IpPrefix ip) { - return new IPCriterion(ip, Type.IPV6_DST); - } - - /** - * Creates a match on IPv6 flow label field using the specified value. - * - * @param flowLabel IPv6 flow label (20 bits) - * @return match criterion - */ - public static Criterion matchIPv6FlowLabel(int flowLabel) { - return new IPv6FlowLabelCriterion(flowLabel); - } - - /** - * Creates a match on ICMPv6 type field using the specified value. - * - * @param icmpv6Type ICMPv6 type (8 bits unsigned integer) - * @return match criterion - */ - public static Criterion matchIcmpv6Type(short icmpv6Type) { - return new Icmpv6TypeCriterion(icmpv6Type); - } - - /** - * Creates a match on ICMPv6 code field using the specified value. - * - * @param icmpv6Code ICMPv6 code (8 bits unsigned integer) - * @return match criterion - */ - public static Criterion matchIcmpv6Code(short icmpv6Code) { - return new Icmpv6CodeCriterion(icmpv6Code); - } - - /** - * Creates a match on IPv6 Neighbor Discovery target address using the - * specified value. - * - * @param targetAddress IPv6 Neighbor Discovery target address - * @return match criterion - */ - public static Criterion matchIPv6NDTargetAddress(Ip6Address targetAddress) { - return new IPv6NDTargetAddressCriterion(targetAddress); - } - - /** - * Creates a match on IPv6 Neighbor Discovery source link-layer address - * using the specified value. - * - * @param mac IPv6 Neighbor Discovery source link-layer address - * @return match criterion - */ - public static Criterion matchIPv6NDSourceLinkLayerAddress(MacAddress mac) { - return new IPv6NDLinkLayerAddressCriterion(mac, Type.IPV6_ND_SLL); - } - - /** - * Creates a match on IPv6 Neighbor Discovery target link-layer address - * using the specified value. - * - * @param mac IPv6 Neighbor Discovery target link-layer address - * @return match criterion - */ - public static Criterion matchIPv6NDTargetLinkLayerAddress(MacAddress mac) { - return new IPv6NDLinkLayerAddressCriterion(mac, Type.IPV6_ND_TLL); - } - - /** - * Creates a match on MPLS label. - * - * @param mplsLabel MPLS label (20 bits) - * @return match criterion - */ - public static Criterion matchMplsLabel(MplsLabel mplsLabel) { - return new MplsCriterion(mplsLabel); - } - - /** - * Creates a match on MPLS Bottom-of-Stack indicator bit. - * - * @param mplsBos boolean value indicating true (BOS=1) or false (BOS=0) - * @return match criterion - */ - public static Criterion matchMplsBos(boolean mplsBos) { - return new MplsBosCriterion(mplsBos); - } - - /** - * Creates a match on MPLS TC. - * - * @param mplsTc MPLS TC (3 bits) - * @return match criterion - */ - public static Criterion matchMplsTc(byte mplsTc) { - return new MplsTcCriterion(mplsTc); - } - - /** - * Creates a match on Tunnel ID. - * - * @param tunnelId Tunnel ID (64 bits) - * @return match criterion - */ - public static Criterion matchTunnelId(long tunnelId) { - return new TunnelIdCriterion(tunnelId); - } - - /** - * Creates a match on IPv6 Extension Header pseudo-field fiags. - * Those are defined in Criterion.IPv6ExthdrFlags. - * - * @param exthdrFlags IPv6 Extension Header pseudo-field flags (16 bits) - * @return match criterion - */ - public static Criterion matchIPv6ExthdrFlags(int exthdrFlags) { - return new IPv6ExthdrFlagsCriterion(exthdrFlags); - } - - /** - * Creates a match on lambda using the specified value. - * - * @param lambda lambda - * @return match criterion - */ - public static Criterion matchLambda(Lambda lambda) { - if (lambda instanceof IndexedLambda) { - return new IndexedLambdaCriterion((IndexedLambda) lambda); - } else if (lambda instanceof OchSignal) { - return new OchSignalCriterion((OchSignal) lambda); - } else { - throw new UnsupportedOperationException(String.format("Unsupported type of Lambda: %s", lambda)); - } - } - - /** - * Create a match on OCh (Optical Channel) signal type. - * - * @param signalType OCh signal type - * @return match criterion - */ - public static Criterion matchOchSignalType(OchSignalType signalType) { - return new OchSignalTypeCriterion(signalType); - } - - /** - * Creates a match on ODU (Optical channel Data Unit) signal ID using the specified value. - * - * @param oduSignalId ODU Signal Id - * @return match criterion - */ - public static Criterion matchOduSignalId(OduSignalId oduSignalId) { - return new OduSignalIdCriterion(oduSignalId); - } - - /** - * Creates a match on ODU (Optical channel Data Unit) signal Type using the specified value. - * - * @param signalType ODU Signal Type - * @return match criterion - */ - public static Criterion matchOduSignalType(OduSignalType signalType) { - return new OduSignalTypeCriterion(signalType); - } - - /** - * Creates a match on IPv4 destination field using the specified value. - * - * @param ip ipv4 destination value - * @return match criterion - */ - public static Criterion matchArpTpa(Ip4Address ip) { - return new ArpPaCriterion(ip, Type.ARP_TPA); - } - - /** - * Creates a match on IPv4 source field using the specified value. - * - * @param ip ipv4 source value - * @return match criterion - */ - public static Criterion matchArpSpa(Ip4Address ip) { - return new ArpPaCriterion(ip, Type.ARP_SPA); - } - - /** - * Creates a match on MAC destination field using the specified value. - * - * @param mac MAC destination value - * @return match criterion - */ - public static Criterion matchArpTha(MacAddress mac) { - return new ArpHaCriterion(mac, Type.ARP_THA); - } - - /** - * Creates a match on MAC source field using the specified value. - * - * @param mac MAC source value - * @return match criterion - */ - public static Criterion matchArpSha(MacAddress mac) { - return new ArpHaCriterion(mac, Type.ARP_SHA); - } - - /** - * Creates a match on arp operation type field using the specified value. - * - * @param arpOp arp operation type value - * @return match criterion - */ - public static Criterion matchArpOp(int arpOp) { - return new ArpOpCriterion(arpOp, Type.ARP_OP); - } - - /** - * Creates a match on PBB I-SID field using the specific value. - * - * @param pbbIsid PBB I-SID - * @return match criterion - */ - public static Criterion matchPbbIsid(int pbbIsid) { - return new PbbIsidCriterion(pbbIsid); - } - - /** - * Creates an extension criterion for the specified extension selector. - * - * @param extensionSelector extension selector - * @param deviceId device ID - * @return match criterion - */ - public static Criterion extension(ExtensionSelector extensionSelector, - DeviceId deviceId) { - return new ExtensionCriterion(extensionSelector, deviceId); - } - - /** - * Creates a dummy criterion. - * - * @return match criterion - */ - public static Criterion dummy() { - return new DummyCriterion(); - } - - /** - * Dummy Criterion used with @see{FilteringObjective}. - */ - private static class DummyCriterion implements Criterion { - - @Override - public Type type() { - return Type.DUMMY; - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Criterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Criterion.java deleted file mode 100644 index 17557b9d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Criterion.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright 2014-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.net.flow.criteria; - - -/** - * Representation of a single header field selection. - */ -public interface Criterion { - - /** - * Types of fields to which the selection criterion may apply. - */ - // From page 75 of OpenFlow 1.5.0 spec - enum Type { - /** Switch input port. */ - IN_PORT, - - /** Switch physical input port. */ - IN_PHY_PORT, - - /** Metadata passed between tables. */ - METADATA, - - /** Ethernet destination address. */ - ETH_DST, - - /** Ethernet source address. */ - ETH_SRC, - - /** Ethernet frame type. */ - ETH_TYPE, - - /** VLAN id. */ - VLAN_VID, - - /** VLAN priority. */ - VLAN_PCP, - - /** IP DSCP (6 bits in ToS field). */ - IP_DSCP, - - /** IP ECN (2 bits in ToS field). */ - IP_ECN, - - /** IP protocol. */ - IP_PROTO, - - /** IPv4 source address. */ - IPV4_SRC, - - /** IPv4 destination address. */ - IPV4_DST, - - /** TCP source port. */ - TCP_SRC, - - /** TCP destination port. */ - TCP_DST, - - /** UDP source port. */ - UDP_SRC, - - /** UDP destination port. */ - UDP_DST, - - /** SCTP source port. */ - SCTP_SRC, - - /** SCTP destination port. */ - SCTP_DST, - - /** ICMP type. */ - ICMPV4_TYPE, - - /** ICMP code. */ - ICMPV4_CODE, - - /** ARP opcode. */ - ARP_OP, - - /** ARP source IPv4 address. */ - ARP_SPA, - - /** ARP target IPv4 address. */ - ARP_TPA, - - /** ARP source hardware address. */ - ARP_SHA, - - /** ARP target hardware address. */ - ARP_THA, - - /** IPv6 source address. */ - IPV6_SRC, - - /** IPv6 destination address. */ - IPV6_DST, - - /** IPv6 Flow Label. */ - IPV6_FLABEL, - - /** ICMPv6 type. */ - ICMPV6_TYPE, - - /** ICMPv6 code. */ - ICMPV6_CODE, - - /** Target address for ND. */ - IPV6_ND_TARGET, - - /** Source link-layer for ND. */ - IPV6_ND_SLL, - - /** Target link-layer for ND. */ - IPV6_ND_TLL, - - /** MPLS label. */ - MPLS_LABEL, - - /** MPLS TC. */ - MPLS_TC, - - /** MPLS BoS bit. */ - MPLS_BOS, - - /** PBB I-SID. */ - PBB_ISID, - - /** Logical Port Metadata. */ - TUNNEL_ID, - - /** IPv6 Extension Header pseudo-field. */ - IPV6_EXTHDR, - - /** Unassigned value: 40. */ - UNASSIGNED_40, - - /** PBB UCA header field. */ - PBB_UCA, - - /** TCP flags. */ - TCP_FLAGS, - - /** Output port from action set metadata. */ - ACTSET_OUTPUT, - - /** Packet type value. */ - PACKET_TYPE, - - // - // NOTE: Everything below is defined elsewhere: ONOS-specific, - // extensions, etc. - // - /** Optical channel signal ID (lambda). */ - OCH_SIGID, - - /** Optical channel signal type (fixed or flexible). */ - OCH_SIGTYPE, - - /** ODU (Optical channel Data Unit) signal ID. */ - ODU_SIGID, - - /** ODU (Optical channel Data Unit) signal type. */ - ODU_SIGTYPE, - - /** Extension criterion. */ - EXTENSION, - - /** An empty criterion. */ - DUMMY - } - - /** - * Returns the type of criterion. - * - * @return type of criterion - */ - Type type(); - - /** - * Bit definitions for IPv6 Extension Header pseudo-field. - * From page 79 of OpenFlow 1.5.0 spec. - */ - enum IPv6ExthdrFlags { - /** "No next header" encountered. */ - NONEXT((short) (1 << 0)), - /** Encrypted Sec Payload header present. */ - ESP((short) (1 << 1)), - /** Authentication header present. */ - AUTH((short) (1 << 2)), - /** 1 or 2 dest headers present. */ - DEST((short) (1 << 3)), - /** Fragment header present. */ - FRAG((short) (1 << 4)), - /** Router header present. */ - ROUTER((short) (1 << 5)), - /** Hop-by-hop header present. */ - HOP((short) (1 << 6)), - /** Unexpected repeats encountered. */ - UNREP((short) (1 << 7)), - /** Unexpected sequencing encountered. */ - UNSEQ((short) (1 << 8)); - - private short value; - - IPv6ExthdrFlags(short value) { - this.value = value; - } - - /** - * Gets the value as an integer. - * - * @return the value as an integer - */ - public short getValue() { - return this.value; - } - } - - enum TCPFlags { - - /** ECN-nonce concealment protection. */ - NS((short) (1 << 0)), - /** Congestion Window Reduced. */ - CWR((short) (1 << 1)), - /** ECN-Echo. **/ - ECE((short) (1 << 2)), - /** Urgent pointer field is significant. */ - URG((short) (1 << 3)), - /** Acknowledgment field is significant. */ - ACK((short) (1 << 4)), - /** Push the buffered data to the receiving application. */ - PSH((short) (1 << 5)), - /** Reset the connection. */ - RST((short) (1 << 6)), - /** Synchronize sequence numbers. */ - SYN((short) (1 << 7)), - /** No more data from sender. */ - FIN((short) (1 << 8)); - - private short value; - - TCPFlags(short value) { - this.value = value; - } - - /** - * Gets the value as an integer. - * - * @return the value as an integer - */ - public short getValue() { - return this.value; - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/EthCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/EthCriterion.java deleted file mode 100644 index 6020974d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/EthCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.MacAddress; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of MAC address criterion. - */ -public final class EthCriterion implements Criterion { - private final MacAddress mac; - private final Type type; - - /** - * Constructor. - * - * @param mac the source or destination MAC address to match - * @param type the match type. Should be either Type.ETH_DST or - * Type.ETH_SRC - */ - EthCriterion(MacAddress mac, Type type) { - this.mac = mac; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the MAC address to match. - * - * @return the MAC address to match - */ - public MacAddress mac() { - return this.mac; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("mac", mac).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type.ordinal(), mac); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof EthCriterion) { - EthCriterion that = (EthCriterion) obj; - return Objects.equals(mac, that.mac) && - Objects.equals(type, that.type); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/EthTypeCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/EthTypeCriterion.java deleted file mode 100644 index b2666d4d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/EthTypeCriterion.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.EthType; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of Ethernet type criterion (16 bits unsigned integer). - */ -public final class EthTypeCriterion implements Criterion { - - - private final EthType ethType; - - /** - * Constructor. - * - * @param ethType the Ethernet frame type to match (16 bits unsigned - * integer) - */ - EthTypeCriterion(int ethType) { - this.ethType = new EthType(ethType); - } - - /** - * Constructor. - * - * @param ethType the Ethernet frame type to match - */ - EthTypeCriterion(EthType ethType) { - this.ethType = ethType; - } - - @Override - public Type type() { - return Type.ETH_TYPE; - } - - /** - * Gets the Ethernet frame type to match. - * - * @return the Ethernet frame type to match (16 bits unsigned integer) - */ - public EthType ethType() { - return ethType; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("ethType", ethType.toString()) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), ethType); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof EthTypeCriterion) { - EthTypeCriterion that = (EthTypeCriterion) obj; - return Objects.equals(ethType, that.ethType) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionCriterion.java deleted file mode 100644 index 646b4184..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionCriterion.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onosproject.net.DeviceId; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Criterion for implementing selector extensions. - */ -public class ExtensionCriterion implements Criterion { - - private final ExtensionSelector extensionSelector; - private final DeviceId deviceId; - - /** - * Constructor. - * - * @param extensionSelector extension selector - */ - public ExtensionCriterion(ExtensionSelector extensionSelector, DeviceId deviceId) { - this.extensionSelector = extensionSelector; - this.deviceId = deviceId; - } - - /** - * Returns the extension selector. - * - * @return extension selector - */ - public ExtensionSelector extensionSelector() { - return extensionSelector; - } - - /** - * Returns the device ID. - * - * @return device ID - */ - public DeviceId deviceId() { - return deviceId; - } - - @Override - public Type type() { - return Type.EXTENSION; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("extensionSelector", extensionSelector.toString()) - .add("deviceId", deviceId) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), extensionSelector, deviceId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ExtensionCriterion) { - ExtensionCriterion that = (ExtensionCriterion) obj; - return Objects.equals(extensionSelector, that.extensionSelector) && - Objects.equals(deviceId, that.deviceId) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelector.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelector.java deleted file mode 100644 index d3cebb37..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelector.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onosproject.net.flow.Extension; - -/** - * An extension for the selector API. - */ -public interface ExtensionSelector extends Extension { - - /** - * Gets the type of the extension selector. - * - * @return type - */ - ExtensionSelectorType type(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java deleted file mode 100644 index fa8f0923..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/ExtensionSelectorType.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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.net.flow.criteria; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; - -import java.util.Objects; - -/** - * Type of selector extensions. - */ -@Beta -public class ExtensionSelectorType { - - /** - * A list of well-known named extension selector type codes. - * These numbers have no impact on the actual OF type id. - */ - public enum ExtensionSelectorTypes { - NICIRA_MATCH_NSH_SPI(0), - NICIRA_MATCH_NSH_SI(1), - NICIRA_MATCH_NSH_CH1(2), - NICIRA_MATCH_NSH_CH2(3), - NICIRA_MATCH_NSH_CH3(4), - NICIRA_MATCH_NSH_CH4(5); - - - private ExtensionSelectorType type; - - /** - * Creates a new named extension selector type. - * - * @param type type code - */ - ExtensionSelectorTypes(int type) { - this.type = new ExtensionSelectorType(type); - } - - /** - * Gets the extension type object for this named type code. - * - * @return extension type object - */ - public ExtensionSelectorType type() { - return type; - } - } - - private final int type; - - /** - * Creates an extension type with the given int type code. - * - * @param type type code - */ - public ExtensionSelectorType(int type) { - this.type = type; - } - - @Override - public int hashCode() { - return Objects.hash(type); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ExtensionSelectorType) { - final ExtensionSelectorType that = (ExtensionSelectorType) obj; - return this.type == that.type; - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(ExtensionSelectorType.class) - .add("type", type) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPCriterion.java deleted file mode 100644 index 018afe80..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.IpPrefix; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of IP address criterion. - */ -public final class IPCriterion implements Criterion { - private final IpPrefix ip; - private final Type type; - - /** - * Constructor. - * - * @param ip the IP prefix to match. Could be either IPv4 or IPv6 - * @param type the match type. Should be one of the following: - * Type.IPV4_SRC, Type.IPV4_DST, Type.IPV6_SRC, Type.IPV6_DST - */ - IPCriterion(IpPrefix ip, Type type) { - this.ip = ip; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the IP prefix to match. - * - * @return the IP prefix to match - */ - public IpPrefix ip() { - return this.ip; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("ip", ip).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), ip); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IPCriterion) { - IPCriterion that = (IPCriterion) obj; - return Objects.equals(ip, that.ip) && - Objects.equals(type, that.type); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPDscpCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPDscpCriterion.java deleted file mode 100644 index 8634aa66..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPDscpCriterion.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of IP DSCP (Differentiated Services Code Point) - * criterion (6 bits). - */ -public final class IPDscpCriterion implements Criterion { - private static final byte MASK = 0x3f; - private final byte ipDscp; // IP DSCP value: 6 bits - - /** - * Constructor. - * - * @param ipDscp the IP DSCP value to match - */ - IPDscpCriterion(byte ipDscp) { - this.ipDscp = (byte) (ipDscp & MASK); - } - - @Override - public Type type() { - return Type.IP_DSCP; - } - - /** - * Gets the IP DSCP value to match. - * - * @return the IP DSCP value to match - */ - public byte ipDscp() { - return ipDscp; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("ipDscp", Long.toHexString(ipDscp)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), ipDscp); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IPDscpCriterion) { - IPDscpCriterion that = (IPDscpCriterion) obj; - return Objects.equals(ipDscp, that.ipDscp) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPEcnCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPEcnCriterion.java deleted file mode 100644 index 48b3fbf6..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPEcnCriterion.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of IP ECN (Explicit Congestion Notification) criterion - * (2 bits). - */ -public final class IPEcnCriterion implements Criterion { - private static final byte MASK = 0x3; - private final byte ipEcn; // IP ECN value: 2 bits - - /** - * Constructor. - * - * @param ipEcn the IP ECN value to match (2 bits) - */ - IPEcnCriterion(byte ipEcn) { - this.ipEcn = (byte) (ipEcn & MASK); - } - - @Override - public Type type() { - return Type.IP_ECN; - } - - /** - * Gets the IP ECN value to match. - * - * @return the IP ECN value to match (2 bits) - */ - public byte ipEcn() { - return ipEcn; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("ipEcn", Long.toHexString(ipEcn)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), ipEcn); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IPEcnCriterion) { - IPEcnCriterion that = (IPEcnCriterion) obj; - return Objects.equals(ipEcn, that.ipEcn) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPProtocolCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPProtocolCriterion.java deleted file mode 100644 index 6879f802..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPProtocolCriterion.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of Internet Protocol Number criterion (8 bits unsigned) - * integer. - */ -public final class IPProtocolCriterion implements Criterion { - private static final short MASK = 0xff; - private final short proto; // IP protocol number: 8 bits - - /** - * Constructor. - * - * @param protocol the IP protocol (e.g., TCP=6, UDP=17) to match - * (8 bits unsigned integer) - */ - IPProtocolCriterion(short protocol) { - this.proto = (short) (protocol & MASK); - } - - @Override - public Type type() { - return Type.IP_PROTO; - } - - /** - * Gets the IP protocol to match. - * - * @return the IP protocol to match (8 bits unsigned integer) - */ - public short protocol() { - return proto; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("protocol", proto).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), proto); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IPProtocolCriterion) { - IPProtocolCriterion that = (IPProtocolCriterion) obj; - return Objects.equals(proto, that.proto); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6ExthdrFlagsCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6ExthdrFlagsCriterion.java deleted file mode 100644 index 2463bf64..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6ExthdrFlagsCriterion.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of IPv6 Extension Header pseudo-field criterion - * (16 bits). Those are defined in Criterion.IPv6ExthdrFlags. - */ -public final class IPv6ExthdrFlagsCriterion implements Criterion { - private static final int MASK = 0xffff; - private final int exthdrFlags; // IPv6 Exthdr flags: 16 bits - - /** - * Constructor. - * - * @param exthdrFlags the IPv6 Extension Header pseudo-field flags - * to match (16 bits). Those are defined in Criterion.IPv6ExthdrFlags - */ - IPv6ExthdrFlagsCriterion(int exthdrFlags) { - this.exthdrFlags = exthdrFlags & MASK; - } - - @Override - public Type type() { - return Type.IPV6_EXTHDR; - } - - /** - * Gets the IPv6 Extension Header pseudo-field flags to match. - * - * @return the IPv6 Extension Header pseudo-field flags to match - * (16 bits). Those are defined in Criterion.IPv6ExthdrFlags - */ - public int exthdrFlags() { - return exthdrFlags; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("exthdrFlags", Long.toHexString(exthdrFlags)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), exthdrFlags); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IPv6ExthdrFlagsCriterion) { - IPv6ExthdrFlagsCriterion that = (IPv6ExthdrFlagsCriterion) obj; - return Objects.equals(exthdrFlags, that.exthdrFlags) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6FlowLabelCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6FlowLabelCriterion.java deleted file mode 100644 index 6e1021d9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6FlowLabelCriterion.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of IPv6 Flow Label (RFC 6437) criterion (20 bits unsigned - * integer). - */ -public final class IPv6FlowLabelCriterion implements Criterion { - private static final int MASK = 0xfffff; - private final int flowLabel; // IPv6 flow label: 20 bits - - /** - * Constructor. - * - * @param flowLabel the IPv6 flow label to match (20 bits) - */ - IPv6FlowLabelCriterion(int flowLabel) { - this.flowLabel = flowLabel & MASK; - } - - @Override - public Type type() { - return Type.IPV6_FLABEL; - } - - /** - * Gets the IPv6 flow label to match. - * - * @return the IPv6 flow label to match (20 bits) - */ - public int flowLabel() { - return flowLabel; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("flowLabel", Long.toHexString(flowLabel)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), flowLabel); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IPv6FlowLabelCriterion) { - IPv6FlowLabelCriterion that = (IPv6FlowLabelCriterion) obj; - return Objects.equals(flowLabel, that.flowLabel) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6NDLinkLayerAddressCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6NDLinkLayerAddressCriterion.java deleted file mode 100644 index 9f310d4a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6NDLinkLayerAddressCriterion.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.MacAddress; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of IPv6 Neighbor Discovery link-layer address criterion. - */ -public final class IPv6NDLinkLayerAddressCriterion implements Criterion { - private final MacAddress mac; - private final Type type; - - /** - * Constructor. - * - * @param mac the source or destination link-layer address to match - * @param type the match type. Should be either Type.IPV6_ND_SLL or - * Type.IPV6_ND_TLL - */ - IPv6NDLinkLayerAddressCriterion(MacAddress mac, Type type) { - this.mac = mac; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the MAC link-layer address to match. - * - * @return the MAC link-layer address to match - */ - public MacAddress mac() { - return this.mac; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("mac", mac).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), mac); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IPv6NDLinkLayerAddressCriterion) { - IPv6NDLinkLayerAddressCriterion that = - (IPv6NDLinkLayerAddressCriterion) obj; - return Objects.equals(mac, that.mac) && - Objects.equals(type, that.type); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6NDTargetAddressCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6NDTargetAddressCriterion.java deleted file mode 100644 index ffef044a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IPv6NDTargetAddressCriterion.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.Ip6Address; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of IPv6 Neighbor Discovery target address criterion. - */ -public final class IPv6NDTargetAddressCriterion implements Criterion { - private final Ip6Address targetAddress; - - /** - * Constructor. - * - * @param targetAddress the IPv6 target address to match - */ - IPv6NDTargetAddressCriterion(Ip6Address targetAddress) { - this.targetAddress = targetAddress; - } - - @Override - public Type type() { - return Type.IPV6_ND_TARGET; - } - - /** - * Gets the IPv6 target address to match. - * - * @return the IPv6 target address to match - */ - public Ip6Address targetAddress() { - return this.targetAddress; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("targetAddress", targetAddress).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), targetAddress); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IPv6NDTargetAddressCriterion) { - IPv6NDTargetAddressCriterion that = - (IPv6NDTargetAddressCriterion) obj; - return Objects.equals(targetAddress, that.targetAddress) && - Objects.equals(type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IcmpCodeCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IcmpCodeCriterion.java deleted file mode 100644 index 516f61b3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IcmpCodeCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of ICMP code criterion (8 bits unsigned integer). - */ -public final class IcmpCodeCriterion implements Criterion { - private static final short MASK = 0xff; - private final short icmpCode; // The ICMP code: 8 bits - - /** - * Constructor. - * - * @param icmpCode the ICMP code to match (8 bits unsigned integer) - */ - IcmpCodeCriterion(short icmpCode) { - this.icmpCode = (short) (icmpCode & MASK); - } - - @Override - public Type type() { - return Type.ICMPV4_CODE; - } - - /** - * Gets the ICMP code to match. - * - * @return the ICMP code to match (8 bits unsigned integer) - */ - public short icmpCode() { - return icmpCode; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("icmpCode", icmpCode).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), icmpCode); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IcmpCodeCriterion) { - IcmpCodeCriterion that = (IcmpCodeCriterion) obj; - return Objects.equals(icmpCode, that.icmpCode) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IcmpTypeCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IcmpTypeCriterion.java deleted file mode 100644 index 63251425..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IcmpTypeCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of ICMP type criterion (8 bits unsigned integer). - */ -public final class IcmpTypeCriterion implements Criterion { - private static final short MASK = 0xff; - private final short icmpType; // The ICMP type: 8 bits - - /** - * Constructor. - * - * @param icmpType the ICMP type to match (8 bits unsigned integer) - */ - IcmpTypeCriterion(short icmpType) { - this.icmpType = (short) (icmpType & MASK); - } - - @Override - public Type type() { - return Type.ICMPV4_TYPE; - } - - /** - * Gets the ICMP type to match. - * - * @return the ICMP type to match (8 bits unsigned integer) - */ - public short icmpType() { - return icmpType; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("icmpType", icmpType).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), icmpType); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof IcmpTypeCriterion) { - IcmpTypeCriterion that = (IcmpTypeCriterion) obj; - return Objects.equals(icmpType, that.icmpType) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Icmpv6CodeCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Icmpv6CodeCriterion.java deleted file mode 100644 index a41b6fef..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Icmpv6CodeCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of ICMPv6 code criterion (8 bits unsigned integer). - */ -public final class Icmpv6CodeCriterion implements Criterion { - private static final short MASK = 0xff; - private final short icmpv6Code; // ICMPv6 code: 8 bits - - /** - * Constructor. - * - * @param icmpv6Code the ICMPv6 code to match (8 bits unsigned integer) - */ - Icmpv6CodeCriterion(short icmpv6Code) { - this.icmpv6Code = (short) (icmpv6Code & MASK); - } - - @Override - public Type type() { - return Type.ICMPV6_CODE; - } - - /** - * Gets the ICMPv6 code to match. - * - * @return the ICMPv6 code to match (8 bits unsigned integer) - */ - public short icmpv6Code() { - return icmpv6Code; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("icmpv6Code", icmpv6Code).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), icmpv6Code); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof Icmpv6CodeCriterion) { - Icmpv6CodeCriterion that = (Icmpv6CodeCriterion) obj; - return Objects.equals(icmpv6Code, that.icmpv6Code) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Icmpv6TypeCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Icmpv6TypeCriterion.java deleted file mode 100644 index 7410ba17..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/Icmpv6TypeCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of ICMPv6 type criterion (8 bits unsigned integer). - */ -public final class Icmpv6TypeCriterion implements Criterion { - private static final short MASK = 0xff; - private final short icmpv6Type; // ICMPv6 type: 8 bits - - /** - * Constructor. - * - * @param icmpv6Type the ICMPv6 type to match (8 bits unsigned integer) - */ - Icmpv6TypeCriterion(short icmpv6Type) { - this.icmpv6Type = (short) (icmpv6Type & MASK); - } - - @Override - public Type type() { - return Type.ICMPV6_TYPE; - } - - /** - * Gets the ICMPv6 type to match. - * - * @return the ICMPv6 type to match (8 bits unsigned integer) - */ - public short icmpv6Type() { - return icmpv6Type; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("icmpv6Type", icmpv6Type).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), icmpv6Type); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof Icmpv6TypeCriterion) { - Icmpv6TypeCriterion that = (Icmpv6TypeCriterion) obj; - return Objects.equals(icmpv6Type, that.icmpv6Type) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java deleted file mode 100644 index 88a6fe10..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/IndexedLambdaCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.IndexedLambda; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Implementation of indexed lambda criterion. - */ -public class IndexedLambdaCriterion implements Criterion { - - private final IndexedLambda lambda; - - /** - * Creates a criterion with the specified value. - * - * @param lambda lambda index number - */ - IndexedLambdaCriterion(IndexedLambda lambda) { - this.lambda = checkNotNull(lambda); - } - - @Override - public Type type() { - // TODO: consider defining a new specific type - // Now OCH_SIGID is used due to compatibility concerns - return Type.OCH_SIGID; - } - - /** - * Returns the indexed lambda to match. - * - * @return the indexed lambda to match - */ - public IndexedLambda lambda() { - return lambda; - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), lambda); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof IndexedLambdaCriterion)) { - return false; - } - final IndexedLambdaCriterion that = (IndexedLambdaCriterion) obj; - return Objects.equals(this.lambda, that.lambda); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("lambda", lambda) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/LambdaCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/LambdaCriterion.java deleted file mode 100644 index 656800b1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/LambdaCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of lambda (wavelength) criterion (16 bits unsigned - * integer). - */ -public final class LambdaCriterion implements Criterion { - private static final int MASK = 0xffff; - private final int lambda; // Lambda value: 16 bits - private final Type type; - - /** - * Constructor. - * - * @param lambda the lambda (wavelength) to match (16 bits unsigned - * integer) - * @param type the match type. Should be Type.OCH_SIGID - */ - LambdaCriterion(int lambda, Type type) { - this.lambda = lambda & MASK; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the lambda (wavelength) to match. - * - * @return the lambda (wavelength) to match (16 bits unsigned integer) - */ - public int lambda() { - return lambda; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("lambda", lambda).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), lambda); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof LambdaCriterion) { - LambdaCriterion that = (LambdaCriterion) obj; - return Objects.equals(lambda, that.lambda) && - Objects.equals(type, that.type); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MetadataCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MetadataCriterion.java deleted file mode 100644 index 8177b483..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MetadataCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of Metadata criterion. - */ -public final class MetadataCriterion implements Criterion { - private final long metadata; - - /** - * Constructor. - * - * @param metadata the metadata to match (64 bits data) - */ - MetadataCriterion(long metadata) { - this.metadata = metadata; - } - - @Override - public Type type() { - return Type.METADATA; - } - - /** - * Gets the metadata to match. - * - * @return the metadata to match (64 bits data) - */ - public long metadata() { - return metadata; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("metadata", Long.toHexString(metadata)) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), metadata); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof MetadataCriterion) { - MetadataCriterion that = (MetadataCriterion) obj; - return Objects.equals(metadata, that.metadata) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsBosCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsBosCriterion.java deleted file mode 100644 index c8b6690d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsBosCriterion.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.net.flow.criteria; - -import static com.google.common.base.MoreObjects.toStringHelper; -import java.util.Objects; - -/** - * Implementation of MPLS BOS criterion (1 bit). - */ -public class MplsBosCriterion implements Criterion { - private boolean mplsBos; - - MplsBosCriterion(boolean mplsBos) { - this.mplsBos = mplsBos; - } - - @Override - public Type type() { - return Type.MPLS_BOS; - } - - public boolean mplsBos() { - return mplsBos; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("bos", mplsBos).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), mplsBos); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof MplsBosCriterion) { - MplsBosCriterion that = (MplsBosCriterion) obj; - return Objects.equals(mplsBos, that.mplsBos()) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsCriterion.java deleted file mode 100644 index 34d384f1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsCriterion.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.MplsLabel; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of MPLS tag criterion (20 bits). - */ -public final class MplsCriterion implements Criterion { - private static final int MASK = 0xfffff; - private final MplsLabel mplsLabel; - - MplsCriterion(MplsLabel mplsLabel) { - this.mplsLabel = mplsLabel; - } - - @Override - public Type type() { - return Type.MPLS_LABEL; - } - - public MplsLabel label() { - return mplsLabel; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("mpls", mplsLabel).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), mplsLabel); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof MplsCriterion) { - MplsCriterion that = (MplsCriterion) obj; - return Objects.equals(mplsLabel, that.mplsLabel) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsTcCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsTcCriterion.java deleted file mode 100644 index 8ad62358..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/MplsTcCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of MPLS TC criterion (3 bits). - */ -public final class MplsTcCriterion implements Criterion { - private static final byte MASK = 0x7; - private final byte mplsTc; - - /** - * Constructor. - * - * @param mplsTc the MPLS TC to match (3 bits) - */ - MplsTcCriterion(byte mplsTc) { - this.mplsTc = (byte) (mplsTc & MASK); - } - - @Override - public Type type() { - return Type.MPLS_TC; - } - - /** - * Gets the MPLS TC to match. - * - * @return the MPLS TC to match (3 bits) - */ - public byte tc() { - return mplsTc; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("tc", Long.toHexString(mplsTc)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), mplsTc); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof MplsTcCriterion) { - MplsTcCriterion that = (MplsTcCriterion) obj; - return Objects.equals(mplsTc, that.mplsTc) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalCriterion.java deleted file mode 100644 index 3a51a6bd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalCriterion.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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.net.flow.criteria; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.OchSignal; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Implementation of OCh (Optical Channel) signal criterion. - * This criterion is based on the specification of "OFPXMT_EXP_OCH_SIGID" in - * Open Networking Foundation "Optical Transport Protocol Extension Version 1.0", but - * defined in protocol agnostic way. - */ -public final class OchSignalCriterion implements Criterion { - - private final OchSignal lambda; - - /** - * Create an instance with the specified OCh signal. - * - * @param lambda OCh signal - */ - OchSignalCriterion(OchSignal lambda) { - this.lambda = checkNotNull(lambda); - } - - @Override - public Type type() { - return Type.OCH_SIGID; - } - - /** - * Returns the OCh signal to match. - * - * @return the OCh signal to match - */ - public OchSignal lambda() { - return lambda; - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), lambda); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof OchSignalCriterion)) { - return false; - } - final OchSignalCriterion that = (OchSignalCriterion) obj; - return Objects.equals(this.lambda, that.lambda); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("lambda", lambda) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalTypeCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalTypeCriterion.java deleted file mode 100644 index cf838bf3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OchSignalTypeCriterion.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.net.flow.criteria; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.OchSignalType; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Implementation of OCh (Optical Channel) signal type criterion. - */ -public class OchSignalTypeCriterion implements Criterion { - - private final OchSignalType signalType; - - /** - * Creates a criterion with the specified value. - * - * @param signalType OCh signal type - */ - OchSignalTypeCriterion(OchSignalType signalType) { - this.signalType = checkNotNull(signalType); - } - - @Override - public Type type() { - return Type.OCH_SIGTYPE; - } - - /** - * Returns the OCh signal type to match. - * - * @return the OCh signal type to match - */ - public OchSignalType signalType() { - return signalType; - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), signalType); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof OchSignalTypeCriterion)) { - return false; - } - final OchSignalTypeCriterion that = (OchSignalTypeCriterion) obj; - return Objects.equals(this.signalType, that.signalType); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("signalType", signalType) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OduSignalIdCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OduSignalIdCriterion.java deleted file mode 100644 index 21018544..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OduSignalIdCriterion.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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.net.flow.criteria; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Objects; - -import org.onosproject.net.OduSignalId; - -/** - * Implementation of ODU (Optical channel Data Unit) signal ID signal criterion. - * This criterion is based on the specification of "OFPXMT_EXP_ODU_SIGID" in - * Open Networking Foundation "Optical Transport Protocol Extension Version 1.0", but - * defined in protocol agnostic way. - */ -public final class OduSignalIdCriterion implements Criterion { - - private final OduSignalId oduSignalId; - - /** - * Create an instance with the specified ODU signal ID. - * - * @param oduSignalId - ODU signal ID - */ - OduSignalIdCriterion(OduSignalId oduSignalId) { - this.oduSignalId = checkNotNull(oduSignalId); - } - - @Override - public Type type() { - return Type.ODU_SIGID; - } - - /** - * Returns the ODU Signal to match. - * - * @return the ODU signal to match - */ - public OduSignalId oduSignalId() { - return oduSignalId; - } - - @Override - public int hashCode() { - return Objects.hash(type(), oduSignalId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof OduSignalIdCriterion)) { - return false; - } - final OduSignalIdCriterion that = (OduSignalIdCriterion) obj; - return Objects.equals(this.oduSignalId, that.oduSignalId); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("oduSignalId", oduSignalId) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OduSignalTypeCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OduSignalTypeCriterion.java deleted file mode 100644 index f4854339..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/OduSignalTypeCriterion.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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.net.flow.criteria; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Objects; - -import org.onosproject.net.OduSignalType; - -/** - * Implementation of ODU (Optical channel Data Unit) signal Type criterion. - * This criterion is based on the specification of "OFPXMT_EXP_ODU_SIGTYPE" in - * Open Networking Foundation "Optical Transport Protocol Extension Version 1.0", but - * defined in protocol agnostic way. - */ -public final class OduSignalTypeCriterion implements Criterion { - - private final OduSignalType signalType; - - /** - * Create an instance with the specified ODU signal Type. - * - * @param signalType - ODU signal Type - */ - OduSignalTypeCriterion(OduSignalType signalType) { - this.signalType = checkNotNull(signalType); - } - - @Override - public Type type() { - return Type.ODU_SIGTYPE; - } - - /** - * Returns the ODU Signal Type to match. - * - * @return the ODU signal Type to match - */ - public OduSignalType signalType() { - return signalType; - } - - @Override - public int hashCode() { - return Objects.hash(type(), signalType); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof OduSignalTypeCriterion)) { - return false; - } - final OduSignalTypeCriterion that = (OduSignalTypeCriterion) obj; - return Objects.equals(this.signalType, that.signalType); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("signalType", signalType) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/PbbIsidCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/PbbIsidCriterion.java deleted file mode 100644 index 979aa6bd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/PbbIsidCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of PBB I-SID criterion (24 bits unsigned integer). - */ -public final class PbbIsidCriterion implements Criterion { - private static final int MASK = 0xfffff; - private final int pbbIsid; // PBB I-SID: 24 bits - - /** - * Constructor. - * - * @param pbbIsid the PBB I-SID to match (24 bits) - */ - PbbIsidCriterion(int pbbIsid) { - this.pbbIsid = pbbIsid & MASK; - } - - @Override - public Criterion.Type type() { - return Criterion.Type.PBB_ISID; - } - - /** - * Gets the PBB I-SID to match. - * - * @return the PBB I-SID to match (24 bits) - */ - public int pbbIsid() { - return this.pbbIsid; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("pbbIsid", Long.toHexString(pbbIsid)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), pbbIsid); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof PbbIsidCriterion) { - PbbIsidCriterion that = (PbbIsidCriterion) obj; - return Objects.equals(pbbIsid, that.pbbIsid) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/PortCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/PortCriterion.java deleted file mode 100644 index f07cd500..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/PortCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onosproject.net.PortNumber; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of input port criterion. - */ -public final class PortCriterion implements Criterion { - private final PortNumber port; - private final Type type; - - /** - * Constructor. - * - * @param port the input port number to match - * @param type the match type. Should be either Type.IN_PORT or - * Type.IN_PHY_PORT - */ - PortCriterion(PortNumber port, Type type) { - this.port = port; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the input port number to match. - * - * @return the input port number to match - */ - public PortNumber port() { - return this.port; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("port", port).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), port); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof PortCriterion) { - PortCriterion that = (PortCriterion) obj; - return Objects.equals(port, that.port) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/SctpPortCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/SctpPortCriterion.java deleted file mode 100644 index 2d4cf15a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/SctpPortCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.TpPort; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of SCTP port criterion (16 bits unsigned integer). - */ -public final class SctpPortCriterion implements Criterion { - private final TpPort sctpPort; - private final Type type; - - /** - * Constructor. - * - * @param sctpPort the SCTP port to match - * @param type the match type. Should be either Type.SCTP_SRC or - * Type.SCTP_DST - */ - SctpPortCriterion(TpPort sctpPort, Type type) { - this.sctpPort = sctpPort; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the SCTP port to match. - * - * @return the SCTP port to match - */ - public TpPort sctpPort() { - return this.sctpPort; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("sctpPort", sctpPort).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), sctpPort); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof SctpPortCriterion) { - SctpPortCriterion that = (SctpPortCriterion) obj; - return Objects.equals(sctpPort, that.sctpPort) && - Objects.equals(type, that.type); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TcpFlagsCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TcpFlagsCriterion.java deleted file mode 100644 index e0b53958..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TcpFlagsCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of TCP flags criterion (12 bits unsigned integer). - */ -public final class TcpFlagsCriterion implements Criterion { - private static final int MASK = 0xfffff; - private final int flags; // TCP flags: 12 bits - - /** - * Constructor. - * - * @param flags the TCP flags to match (12 bits) - */ - TcpFlagsCriterion(int flags) { - this.flags = flags & MASK; - } - - @Override - public Type type() { - return Type.TCP_FLAGS; - } - - /** - * Gets the TCP flags to match. - * - * @return the TCP flags to match (12 bits) - */ - public int flags() { - return flags; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("flags", Long.toHexString(flags)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), flags); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof TcpFlagsCriterion) { - TcpFlagsCriterion that = (TcpFlagsCriterion) obj; - return Objects.equals(flags, that.flags) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TcpPortCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TcpPortCriterion.java deleted file mode 100644 index e682b238..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TcpPortCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.TpPort; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of TCP port criterion (16 bits unsigned integer). - */ -public final class TcpPortCriterion implements Criterion { - private final TpPort tcpPort; - private final Type type; - - /** - * Constructor. - * - * @param tcpPort the TCP port to match - * @param type the match type. Should be either Type.TCP_SRC or - * Type.TCP_DST - */ - TcpPortCriterion(TpPort tcpPort, Type type) { - this.tcpPort = tcpPort; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the TCP port to match. - * - * @return the TCP port to match - */ - public TpPort tcpPort() { - return this.tcpPort; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("tcpPort", tcpPort).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), tcpPort); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof TcpPortCriterion) { - TcpPortCriterion that = (TcpPortCriterion) obj; - return Objects.equals(tcpPort, that.tcpPort) && - Objects.equals(type, that.type); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TunnelIdCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TunnelIdCriterion.java deleted file mode 100644 index 3362c73f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/TunnelIdCriterion.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -/** - * Implementation of Tunnel ID criterion. - */ -public class TunnelIdCriterion implements Criterion { - private final long tunnelId; - - /** - * Constructor. - * - * @param tunnelId a Tunnel ID to match(64 bits) - */ - TunnelIdCriterion(long tunnelId) { - this.tunnelId = tunnelId; - } - - @Override - public Type type() { - return Type.TUNNEL_ID; - } - - /** - * Gets the Tunnel ID to match. - * - * @return the Tunnel ID to match (64 bits) - */ - public long tunnelId() { - return tunnelId; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("tunnelId", Long.toHexString(tunnelId)) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), tunnelId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof TunnelIdCriterion) { - TunnelIdCriterion that = (TunnelIdCriterion) obj; - return Objects.equals(tunnelId, that.tunnelId) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/UdpPortCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/UdpPortCriterion.java deleted file mode 100644 index 8a29f471..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/UdpPortCriterion.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.TpPort; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of UDP port criterion (16 bits unsigned integer). - */ -public final class UdpPortCriterion implements Criterion { - private final TpPort udpPort; - private final Type type; - - /** - * Constructor. - * - * @param udpPort the UDP port to match - * @param type the match type. Should be either Type.UDP_SRC or - * Type.UDP_DST - */ - UdpPortCriterion(TpPort udpPort, Type type) { - this.udpPort = udpPort; - this.type = type; - } - - @Override - public Type type() { - return this.type; - } - - /** - * Gets the UDP port to match. - * - * @return the UDP port to match - */ - public TpPort udpPort() { - return this.udpPort; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("udpPort", udpPort).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), udpPort); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof UdpPortCriterion) { - UdpPortCriterion that = (UdpPortCriterion) obj; - return Objects.equals(udpPort, that.udpPort) && - Objects.equals(type, that.type); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/VlanIdCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/VlanIdCriterion.java deleted file mode 100644 index c73edb12..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/VlanIdCriterion.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.net.flow.criteria; - -import org.onlab.packet.VlanId; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of VLAN ID criterion. - */ -public final class VlanIdCriterion implements Criterion { - private final VlanId vlanId; - - /** - * Constructor. - * - * @param vlanId the VLAN ID to match - */ - VlanIdCriterion(VlanId vlanId) { - this.vlanId = vlanId; - } - - @Override - public Type type() { - return Type.VLAN_VID; - } - - /** - * Gets the VLAN ID to match. - * - * @return the VLAN ID to match - */ - public VlanId vlanId() { - return vlanId; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("vlanId", vlanId).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), vlanId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof VlanIdCriterion) { - VlanIdCriterion that = (VlanIdCriterion) obj; - return Objects.equals(vlanId, that.vlanId) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/VlanPcpCriterion.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/VlanPcpCriterion.java deleted file mode 100644 index 0c83e141..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/VlanPcpCriterion.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.flow.criteria; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Implementation of VLAN priority criterion (3 bits). - */ -public final class VlanPcpCriterion implements Criterion { - private static final byte MASK = 0x7; - private final byte vlanPcp; // VLAN pcp value: 3 bits - - /** - * Constructor. - * - * @param vlanPcp the VLAN priority to match (3 bits) - */ - VlanPcpCriterion(byte vlanPcp) { - this.vlanPcp = (byte) (vlanPcp & MASK); - } - - @Override - public Type type() { - return Type.VLAN_PCP; - } - - /** - * Gets the VLAN priority to match. - * - * @return the VLAN priority to match (3 bits) - */ - public byte priority() { - return vlanPcp; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("priority", Long.toHexString(vlanPcp)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), vlanPcp); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof VlanPcpCriterion) { - VlanPcpCriterion that = (VlanPcpCriterion) obj; - return Objects.equals(vlanPcp, that.vlanPcp) && - Objects.equals(this.type(), that.type()); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/package-info.java deleted file mode 100644 index 1f091928..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/criteria/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Traffic selection criteria model. - */ -package org.onosproject.net.flow.criteria; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionPropertyException.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionPropertyException.java deleted file mode 100644 index 5750d09e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionPropertyException.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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.net.flow.instructions; - -/** - * Exception indicating there was an error while setting/getting an extension - * instruction property. - */ -public class ExtensionPropertyException extends Exception { - - public ExtensionPropertyException(String message) { - super(message); - } - - public ExtensionPropertyException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatment.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatment.java deleted file mode 100644 index 3df152e9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatment.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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.net.flow.instructions; - -import org.onosproject.net.flow.Extension; - -/** - * An extension for the treatment API. - */ -public interface ExtensionTreatment extends Extension { - - /** - * Gets the type of the treatment extension. - * - * @return type - */ - ExtensionTreatmentType type(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java deleted file mode 100644 index f597a46c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * 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.net.flow.instructions; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; - -import java.util.Objects; - -/** - * Type of treatment extensions. - */ -@Beta -public final class ExtensionTreatmentType { - - /** - * A list of well-known named extension instruction type codes. - * These numbers have no impact on the actual OF type id. - */ - public enum ExtensionTreatmentTypes { - NICIRA_SET_TUNNEL_DST(0), - NICIRA_RESUBMIT(1), - NICIRA_RESUBMIT_TABLE(14), - NICIRA_SET_NSH_SPI(32), - NICIRA_SET_NSH_SI(33), - NICIRA_SET_NSH_CH1(34), - NICIRA_SET_NSH_CH2(35), - NICIRA_SET_NSH_CH3(36), - NICIRA_SET_NSH_CH4(37), - NICIRA_MOV_ARP_SHA_TO_THA(2), - NICIRA_MOV_ARP_SPA_TO_TPA(3), - NICIRA_MOV_ETH_SRC_TO_DST(4), - NICIRA_MOV_IP_SRC_TO_DST(5); - - private ExtensionTreatmentType type; - - /** - * Creates a new named extension treatment type. - * - * @param type type code - */ - ExtensionTreatmentTypes(int type) { - this.type = new ExtensionTreatmentType(type); - } - - /** - * Gets the extension type object for this named type code. - * - * @return extension type object - */ - public ExtensionTreatmentType type() { - return type; - } - } - - private final int type; - - /** - * Creates an extension type with the given int type code. - * - * @param type type code - */ - public ExtensionTreatmentType(int type) { - this.type = type; - } - - @Override - public int hashCode() { - return Objects.hash(type); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ExtensionTreatmentType) { - final ExtensionTreatmentType that = (ExtensionTreatmentType) obj; - return this.type == that.type; - } - return false; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(ExtensionTreatmentType.class) - .add("type", type) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java deleted file mode 100644 index 31ad80c5..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2014-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.net.flow.instructions; - -/** - * Abstraction of a single traffic treatment step. - */ -public interface Instruction { - - /** - * Represents the type of traffic treatment. - */ - enum Type { - /** - * Signifies that the traffic should be dropped. - */ - @Deprecated - DROP, - - /** - * Signifies that the traffic requires no action. - * - * In OF10, the behavior of NOACTION is DROP. - * In OF13, the behavior depends on current Action Set. - */ - NOACTION, - - /** - * Signifies that the traffic should be output to a port. - */ - OUTPUT, - - /** - * Signifies that traffic should be sent out of a group. - */ - GROUP, - - /** - * Signifies that the traffic should be enqueued to an already-configured - queue on a port. - */ - QUEUE, - - /** - * Signifies that traffic should be metered according to a meter. - */ - METER, - - /** - * Signifies that the traffic should be modified in L0 way. - */ - L0MODIFICATION, - - /** - * Signifies that the traffic should be modified in L1 way. - */ - L1MODIFICATION, - - /** - * Signifies that the traffic should be modified in L2 way. - */ - L2MODIFICATION, - - /** - * Signifies that the traffic should be passed to another table. - */ - TABLE, - - /** - * Signifies that the traffic should be modified in L3 way. - */ - L3MODIFICATION, - - /** - * Signifies that metadata be attached to traffic. - */ - METADATA, - - /** - * Signifies that the traffic should be modified in L4 way. - */ - L4MODIFICATION, - - /** - * Signifies that an extension instruction will be used. - */ - EXTENSION - } - - /** - * Returns the type of instruction. - * - * @return type of instruction - */ - Type type(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java deleted file mode 100644 index 8ed882c8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java +++ /dev/null @@ -1,948 +0,0 @@ -/* - * Copyright 2014-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.net.flow.instructions; - -import com.google.common.base.MoreObjects; -import org.onlab.packet.EthType; -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.MplsLabel; -import org.onlab.packet.TpPort; -import org.onlab.packet.VlanId; -import org.onosproject.core.GroupId; -import org.onosproject.net.DeviceId; -import org.onosproject.net.IndexedLambda; -import org.onosproject.net.Lambda; -import org.onosproject.net.OchSignal; -import org.onosproject.net.OduSignalId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.instructions.L0ModificationInstruction.L0SubType; -import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction; -import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModOchSignalInstruction; -import org.onosproject.net.flow.instructions.L1ModificationInstruction.ModOduSignalIdInstruction; -import org.onosproject.net.flow.instructions.L3ModificationInstruction.L3SubType; -import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction; -import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpIPInstruction; -import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpEthInstruction; -import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpOpInstruction; -import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction; -import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModTtlInstruction; -import org.onosproject.net.flow.instructions.L4ModificationInstruction.L4SubType; -import org.onosproject.net.flow.instructions.L4ModificationInstruction.ModTransportPortInstruction; -import org.onosproject.net.meter.MeterId; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Factory class for creating various traffic treatment instructions. - */ -public final class Instructions { - - // Ban construction - private Instructions() {} - - /** - * Creates an output instruction using the specified port number. This can - * include logical ports such as CONTROLLER, FLOOD, etc. - * - * @param number port number - * @return output instruction - */ - public static OutputInstruction createOutput(final PortNumber number) { - checkNotNull(number, "PortNumber cannot be null"); - return new OutputInstruction(number); - } - - /** - * Creates a drop instruction. - * - * @return drop instruction - */ - @Deprecated - public static DropInstruction createDrop() { - return new DropInstruction(); - } - - /** - * Creates a no action instruction. - * - * @return no action instruction - */ - public static NoActionInstruction createNoAction() { - return new NoActionInstruction(); - } - - /** - * Creates a group instruction. - * - * @param groupId Group Id - * @return group instruction - */ - public static GroupInstruction createGroup(final GroupId groupId) { - checkNotNull(groupId, "GroupId cannot be null"); - return new GroupInstruction(groupId); - } - - /** - * Creates a set-queue instruction. - * - * @param queueId Queue Id - * @param port Port number - * @return set-queue instruction - */ - public static SetQueueInstruction setQueue(final long queueId, final PortNumber port) { - checkNotNull(queueId, "queue ID cannot be null"); - return new SetQueueInstruction(queueId, port); - } - - public static MeterInstruction meterTraffic(final MeterId meterId) { - checkNotNull(meterId, "meter id cannot be null"); - return new MeterInstruction(meterId); - } - - /** - * Creates an L0 modification with the specified OCh signal. - * - * @param lambda OCh signal - * @return an L0 modification - */ - public static L0ModificationInstruction modL0Lambda(Lambda lambda) { - checkNotNull(lambda, "L0 OCh signal cannot be null"); - - if (lambda instanceof IndexedLambda) { - return new ModLambdaInstruction(L0SubType.LAMBDA, (short) ((IndexedLambda) lambda).index()); - } else if (lambda instanceof OchSignal) { - return new ModOchSignalInstruction((OchSignal) lambda); - } else { - throw new UnsupportedOperationException(String.format("Unsupported type: %s", lambda)); - } - } - - /** - * Creates an L1 modification with the specified ODU signal Id. - * - * @param oduSignalId ODU Signal Id - * @return a L1 modification - */ - public static L1ModificationInstruction modL1OduSignalId(OduSignalId oduSignalId) { - checkNotNull(oduSignalId, "L1 ODU signal ID cannot be null"); - return new ModOduSignalIdInstruction(oduSignalId); - } - /** - * Creates a l2 src modification. - * - * @param addr the mac address to modify to - * @return a l2 modification - */ - public static L2ModificationInstruction modL2Src(MacAddress addr) { - checkNotNull(addr, "Src l2 address cannot be null"); - return new L2ModificationInstruction.ModEtherInstruction( - L2ModificationInstruction.L2SubType.ETH_SRC, addr); - } - - /** - * Creates a L2 dst modification. - * - * @param addr the mac address to modify to - * @return a L2 modification - */ - public static L2ModificationInstruction modL2Dst(MacAddress addr) { - checkNotNull(addr, "Dst l2 address cannot be null"); - return new L2ModificationInstruction.ModEtherInstruction( - L2ModificationInstruction.L2SubType.ETH_DST, addr); - } - - /** - * Creates a VLAN ID modification. - * - * @param vlanId the VLAN ID to modify to - * @return a L2 modification - */ - public static L2ModificationInstruction modVlanId(VlanId vlanId) { - checkNotNull(vlanId, "VLAN id cannot be null"); - return new L2ModificationInstruction.ModVlanIdInstruction(vlanId); - } - - /** - * Creates a VLAN PCP modification. - * - * @param vlanPcp the PCP to modify to - * @return a L2 modification - */ - public static L2ModificationInstruction modVlanPcp(Byte vlanPcp) { - checkNotNull(vlanPcp, "VLAN Pcp cannot be null"); - return new L2ModificationInstruction.ModVlanPcpInstruction(vlanPcp); - } - - /** - * Creates a MPLS label modification. - * - * @param mplsLabel MPLS label to set - * @return a L2 Modification - */ - public static L2ModificationInstruction modMplsLabel(MplsLabel mplsLabel) { - checkNotNull(mplsLabel, "MPLS label cannot be null"); - return new L2ModificationInstruction.ModMplsLabelInstruction(mplsLabel); - } - - /** - * Creates a MPLS BOS bit modification. - * - * @param mplsBos MPLS BOS bit to set (true) or unset (false) - * @return a L2 Modification - */ - public static L2ModificationInstruction modMplsBos(boolean mplsBos) { - return new L2ModificationInstruction.ModMplsBosInstruction(mplsBos); - } - - /** - * Creates a MPLS decrement TTL modification. - * - * @return a L2 Modification - */ - public static L2ModificationInstruction decMplsTtl() { - return new L2ModificationInstruction.ModMplsTtlInstruction(); - } - - /** - * Creates a L3 IPv4 src modification. - * - * @param addr the IPv4 address to modify to - * @return a L3 modification - */ - public static L3ModificationInstruction modL3Src(IpAddress addr) { - checkNotNull(addr, "Src l3 IPv4 address cannot be null"); - return new ModIPInstruction(L3SubType.IPV4_SRC, addr); - } - - /** - * Creates a L3 IPv4 dst modification. - * - * @param addr the IPv4 address to modify to - * @return a L3 modification - */ - public static L3ModificationInstruction modL3Dst(IpAddress addr) { - checkNotNull(addr, "Dst l3 IPv4 address cannot be null"); - return new ModIPInstruction(L3SubType.IPV4_DST, addr); - } - - /** - * Creates a L3 IPv6 src modification. - * - * @param addr the IPv6 address to modify to - * @return a L3 modification - */ - public static L3ModificationInstruction modL3IPv6Src(IpAddress addr) { - checkNotNull(addr, "Src l3 IPv6 address cannot be null"); - return new ModIPInstruction(L3SubType.IPV6_SRC, addr); - } - - /** - * Creates a L3 IPv6 dst modification. - * - * @param addr the IPv6 address to modify to - * @return a L3 modification - */ - public static L3ModificationInstruction modL3IPv6Dst(IpAddress addr) { - checkNotNull(addr, "Dst l3 IPv6 address cannot be null"); - return new ModIPInstruction(L3SubType.IPV6_DST, addr); - } - - /** - * Creates a L3 IPv6 Flow Label modification. - * - * @param flowLabel the IPv6 flow label to modify to (20 bits) - * @return a L3 modification - */ - public static L3ModificationInstruction modL3IPv6FlowLabel(int flowLabel) { - return new ModIPv6FlowLabelInstruction(flowLabel); - } - - /** - * Creates a L3 decrement TTL modification. - * - * @return a L3 modification - */ - public static L3ModificationInstruction decNwTtl() { - return new ModTtlInstruction(L3SubType.DEC_TTL); - } - - /** - * Creates a L3 copy TTL to outer header modification. - * - * @return a L3 modification - */ - public static L3ModificationInstruction copyTtlOut() { - return new ModTtlInstruction(L3SubType.TTL_OUT); - } - - /** - * Creates a L3 copy TTL to inner header modification. - * - * @return a L3 modification - */ - public static L3ModificationInstruction copyTtlIn() { - return new ModTtlInstruction(L3SubType.TTL_IN); - } - - /** - * Creates a L3 ARP IP src modification. - * - * @param addr the ip address to modify to - * @return a L3 modification - */ - public static L3ModificationInstruction modArpSpa(IpAddress addr) { - checkNotNull(addr, "Src l3 ARP IP address cannot be null"); - return new ModArpIPInstruction(L3SubType.ARP_SPA, addr); - } - - /** - * Creates a l3 ARP Ether src modification. - * - * @param addr the mac address to modify to - * @return a l3 modification - */ - public static L3ModificationInstruction modArpSha(MacAddress addr) { - checkNotNull(addr, "Src l3 ARP address cannot be null"); - return new ModArpEthInstruction(L3SubType.ARP_SHA, addr); - } - - /** - * Creates a l3 ARP operation modification. - * - * @param op the ARP operation to modify to - * @return a l3 modification - */ - public static L3ModificationInstruction modL3ArpOp(short op) { - checkNotNull(op, "Arp operation cannot be null"); - return new ModArpOpInstruction(L3SubType.ARP_OP, op); - } - - /** - * Creates a push MPLS header instruction. - * - * @return a L2 modification. - */ - public static Instruction pushMpls() { - return new L2ModificationInstruction.PushHeaderInstructions( - L2ModificationInstruction.L2SubType.MPLS_PUSH, - EthType.EtherType.MPLS_UNICAST.ethType()); - } - - /** - * Creates a pop MPLS header instruction. - * - * @return a L2 modification. - */ - public static Instruction popMpls() { - return new L2ModificationInstruction.PushHeaderInstructions( - L2ModificationInstruction.L2SubType.MPLS_POP, - EthType.EtherType.MPLS_UNICAST.ethType()); - } - - /** - * Creates a pop MPLS header instruction with a particular ethertype. - * - * @param etherType Ethernet type to set - * @return a L2 modification. - */ - public static Instruction popMpls(EthType etherType) { - checkNotNull(etherType, "Ethernet type cannot be null"); - return new L2ModificationInstruction.PushHeaderInstructions( - L2ModificationInstruction.L2SubType.MPLS_POP, etherType); - } - - /** - * Creates a pop VLAN header instruction. - * - * @return a L2 modification - */ - public static Instruction popVlan() { - return new L2ModificationInstruction.PopVlanInstruction( - L2ModificationInstruction.L2SubType.VLAN_POP); - } - - /** - * Creates a push VLAN header instruction. - * - * @return a L2 modification - */ - public static Instruction pushVlan() { - return new L2ModificationInstruction.PushHeaderInstructions( - L2ModificationInstruction.L2SubType.VLAN_PUSH, - EthType.EtherType.VLAN.ethType()); - } - - /** - * Sends the packet to the table id. - * - * @param tableId flow rule table id - * @return table type transition instruction - */ - public static Instruction transition(Integer tableId) { - checkNotNull(tableId, "Table id cannot be null"); - return new TableTypeTransition(tableId); - } - - /** - * Writes metadata to associate with a packet. - * - * @param metadata the metadata value to write - * @param metadataMask the bits to mask for the metadata value - * @return metadata instruction - */ - public static Instruction writeMetadata(long metadata, long metadataMask) { - return new MetadataInstruction(metadata, metadataMask); - } - - /** - * Creates a Tunnel ID modification. - * - * @param tunnelId the Tunnel ID to modify to - * @return a L2 modification - */ - public static L2ModificationInstruction modTunnelId(long tunnelId) { - checkNotNull(tunnelId, "Tunnel id cannot be null"); - return new L2ModificationInstruction.ModTunnelIdInstruction(tunnelId); - } - - /** - * Creates a TCP src modification. - * - * @param port the TCP port number to modify to - * @return a L4 modification - * @deprecated in Drake release - */ - @Deprecated - public static L4ModificationInstruction modTcpSrc(short port) { - checkNotNull(port, "Src TCP port cannot be null"); - return new ModTransportPortInstruction(L4SubType.TCP_SRC, TpPort.tpPort(port)); - } - - /** - * Creates a TCP src modification. - * - * @param port the TCP port number to modify to - * @return a L4 modification - */ - public static L4ModificationInstruction modTcpSrc(TpPort port) { - checkNotNull(port, "Src TCP port cannot be null"); - return new ModTransportPortInstruction(L4SubType.TCP_SRC, port); - } - - /** - * Creates a TCP dst modification. - * - * @param port the TCP port number to modify to - * @return a L4 modification - * @deprecated in Drake release - */ - @Deprecated - public static L4ModificationInstruction modTcpDst(short port) { - checkNotNull(port, "Dst TCP port cannot be null"); - return new ModTransportPortInstruction(L4SubType.TCP_DST, TpPort.tpPort(port)); - } - - /** - * Creates a TCP dst modification. - * - * @param port the TCP port number to modify to - * @return a L4 modification - */ - public static L4ModificationInstruction modTcpDst(TpPort port) { - checkNotNull(port, "Dst TCP port cannot be null"); - return new ModTransportPortInstruction(L4SubType.TCP_DST, port); - } - - /** - * Creates a UDP src modification. - * - * @param port the UDP port number to modify to - * @return a L4 modification - * @deprecated in Drake release - */ - @Deprecated - public static L4ModificationInstruction modUdpSrc(short port) { - checkNotNull(port, "Src UDP port cannot be null"); - return new ModTransportPortInstruction(L4SubType.UDP_SRC, TpPort.tpPort(port)); - } - - /** - * Creates a UDP src modification. - * - * @param port the UDP port number to modify to - * @return a L4 modification - */ - public static L4ModificationInstruction modUdpSrc(TpPort port) { - checkNotNull(port, "Src UDP port cannot be null"); - return new ModTransportPortInstruction(L4SubType.UDP_SRC, port); - } - - /** - * Creates a UDP dst modification. - * - * @param port the UDP port number to modify to - * @return a L4 modification - * @deprecated in Drake release - */ - @Deprecated - public static L4ModificationInstruction modUdpDst(short port) { - checkNotNull(port, "Dst UDP port cannot be null"); - return new ModTransportPortInstruction(L4SubType.UDP_DST, TpPort.tpPort(port)); - } - - /** - * Creates a UDP dst modification. - * - * @param port the UDP port number to modify to - * @return a L4 modification - */ - public static L4ModificationInstruction modUdpDst(TpPort port) { - checkNotNull(port, "Dst UDP port cannot be null"); - return new ModTransportPortInstruction(L4SubType.UDP_DST, port); - } - - /** - * Creates an extension instruction. - * - * @param extension extension instruction - * @param deviceId device ID - * @return extension instruction - */ - public static ExtensionInstructionWrapper extension(ExtensionTreatment extension, - DeviceId deviceId) { - checkNotNull(extension, "Extension instruction cannot be null"); - checkNotNull(deviceId, "Device ID cannot be null"); - return new ExtensionInstructionWrapper(extension, deviceId); - } - - /** - * Drop instruction. - */ - @Deprecated - public static final class DropInstruction implements Instruction { - - private DropInstruction() {} - - @Override - public Type type() { - return Type.DROP; - } - - @Override - public String toString() { - return toStringHelper(type().toString()).toString(); - } - - @Override - public int hashCode() { - return type().ordinal(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DropInstruction) { - return true; - } - return false; - } - } - - /** - * No Action instruction. - */ - public static final class NoActionInstruction implements Instruction { - - private NoActionInstruction() {} - - @Override - public Type type() { - return Type.NOACTION; - } - - @Override - public String toString() { - return toStringHelper(type().toString()).toString(); - } - - @Override - public int hashCode() { - return type().ordinal(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof NoActionInstruction) { - return true; - } - return false; - } - } - - /** - * Output Instruction. - */ - public static final class OutputInstruction implements Instruction { - private final PortNumber port; - - private OutputInstruction(PortNumber port) { - this.port = port; - } - - public PortNumber port() { - return port; - } - - @Override - public Type type() { - return Type.OUTPUT; - } - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("port", port).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), port); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof OutputInstruction) { - OutputInstruction that = (OutputInstruction) obj; - return Objects.equals(port, that.port); - - } - return false; - } - } - - /** - * Group Instruction. - */ - public static final class GroupInstruction implements Instruction { - private final GroupId groupId; - - private GroupInstruction(GroupId groupId) { - this.groupId = groupId; - } - - public GroupId groupId() { - return groupId; - } - - @Override - public Type type() { - return Type.GROUP; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .addValue("group ID=0x" + Integer.toHexString(groupId.id())) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), groupId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof GroupInstruction) { - GroupInstruction that = (GroupInstruction) obj; - return Objects.equals(groupId, that.groupId); - - } - return false; - } - } - - /** - * Set-Queue Instruction. - */ - public static final class SetQueueInstruction implements Instruction { - private final long queueId; - private final PortNumber port; - - private SetQueueInstruction(long queueId) { - this.queueId = queueId; - this.port = null; - } - - private SetQueueInstruction(long queueId, PortNumber port) { - this.queueId = queueId; - this.port = port; - } - - public long queueId() { - return queueId; - } - - public PortNumber port() { - return port; - } - - @Override - public Type type() { - return Type.QUEUE; - } - - @Override - public String toString() { - MoreObjects.ToStringHelper toStringHelper = toStringHelper(type().toString()); - toStringHelper.add("queueId", queueId); - - if (port() != null) { - toStringHelper.add("port", port); - } - return toStringHelper.toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), queueId, port); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof SetQueueInstruction) { - SetQueueInstruction that = (SetQueueInstruction) obj; - return Objects.equals(queueId, that.queueId) && Objects.equals(port, that.port); - - } - return false; - } - } - - /** - * A meter instruction. - */ - public static final class MeterInstruction implements Instruction { - private final MeterId meterId; - - private MeterInstruction(MeterId meterId) { - this.meterId = meterId; - } - - public MeterId meterId() { - return meterId; - } - - @Override - public Type type() { - return Type.METER; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("meter ID", meterId.id()).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), meterId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof MeterInstruction) { - MeterInstruction that = (MeterInstruction) obj; - return Objects.equals(meterId, that.meterId); - - } - return false; - } - } - - /** - * Transition instruction. - */ - public static class TableTypeTransition implements Instruction { - private final Integer tableId; - - TableTypeTransition(Integer tableId) { - this.tableId = tableId; - } - - @Override - public Type type() { - return Type.TABLE; - } - - public Integer tableId() { - return this.tableId; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("tableId", this.tableId).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), tableId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof TableTypeTransition) { - TableTypeTransition that = (TableTypeTransition) obj; - return Objects.equals(tableId, that.tableId); - - } - return false; - } - } - - /** - * Metadata instruction. - */ - public static class MetadataInstruction implements Instruction { - private final long metadata; - private final long metadataMask; - - MetadataInstruction(long metadata, long metadataMask) { - this.metadata = metadata; - this.metadataMask = metadataMask; - } - - @Override - public Type type() { - return Type.METADATA; - } - - public long metadata() { - return this.metadata; - } - - public long metadataMask() { - return this.metadataMask; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("metadata", Long.toHexString(this.metadata)) - .add("metadata mask", Long.toHexString(this.metadataMask)) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), metadata, metadataMask); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof MetadataInstruction) { - MetadataInstruction that = (MetadataInstruction) obj; - return Objects.equals(metadata, that.metadata) && - Objects.equals(metadataMask, that.metadataMask); - - } - return false; - } - } - - /** - * Extension instruction. - */ - public static class ExtensionInstructionWrapper implements Instruction { - private final ExtensionTreatment extensionTreatment; - private final DeviceId deviceId; - - ExtensionInstructionWrapper(ExtensionTreatment extension, DeviceId deviceId) { - extensionTreatment = extension; - this.deviceId = deviceId; - } - - public ExtensionTreatment extensionInstruction() { - return extensionTreatment; - } - - public DeviceId deviceId() { - return deviceId; - } - - @Override - public Type type() { - return Type.EXTENSION; - } - - @Override - public String toString() { - return toStringHelper(type().toString()) - .add("extension", extensionTreatment) - .add("deviceId", deviceId) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type().ordinal(), extensionTreatment, deviceId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ExtensionInstructionWrapper) { - ExtensionInstructionWrapper that = (ExtensionInstructionWrapper) obj; - return Objects.equals(extensionTreatment, that.extensionTreatment) - && Objects.equals(deviceId, that.deviceId); - - } - return false; - } - } - -} - - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L0ModificationInstruction.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L0ModificationInstruction.java deleted file mode 100644 index 4af3d168..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L0ModificationInstruction.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2014-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.net.flow.instructions; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.OchSignal; - -import static com.google.common.base.MoreObjects.toStringHelper; - -import java.util.Objects; - -public abstract class L0ModificationInstruction implements Instruction { - - /** - * Represents the type of traffic treatment. - */ - public enum L0SubType { - /** - * Lambda modification. - */ - LAMBDA, - /** - * OCh (Optical Channel) modification. - */ - OCH, - } - - public abstract L0SubType subtype(); - - @Override - public final Type type() { - return Type.L0MODIFICATION; - } - - /** - * Represents a L0 lambda modification instruction. - */ - public static final class ModLambdaInstruction extends L0ModificationInstruction { - - private final L0SubType subtype; - private final short lambda; - - ModLambdaInstruction(L0SubType subType, short lambda) { - this.subtype = subType; - this.lambda = lambda; - } - - @Override - public L0SubType subtype() { - return this.subtype; - } - - public short lambda() { - return this.lambda; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("lambda", lambda).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype, lambda); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModLambdaInstruction) { - ModLambdaInstruction that = (ModLambdaInstruction) obj; - return Objects.equals(lambda, that.lambda) && - Objects.equals(subtype, that.subtype); - } - return false; - } - } - - /** - * Represents an L0 OCh (Optical Channel) modification instruction. - */ - public static final class ModOchSignalInstruction extends L0ModificationInstruction { - - private final OchSignal lambda; - - ModOchSignalInstruction(OchSignal lambda) { - this.lambda = lambda; - } - - @Override - public L0SubType subtype() { - return L0SubType.OCH; - } - - public OchSignal lambda() { - return lambda; - } - - @Override - public int hashCode() { - return lambda.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof ModOchSignalInstruction)) { - return false; - } - final ModOchSignalInstruction that = (ModOchSignalInstruction) obj; - return Objects.equals(this.lambda, that.lambda); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("lambda", lambda) - .toString(); - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L1ModificationInstruction.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L1ModificationInstruction.java deleted file mode 100644 index b72dd7bc..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L1ModificationInstruction.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2014-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.net.flow.instructions; - -import org.onosproject.net.OduSignalId; - -import static com.google.common.base.MoreObjects.toStringHelper; - -import java.util.Objects; - -public abstract class L1ModificationInstruction implements Instruction { - - /** - * Represents the type of traffic treatment. - */ - public enum L1SubType { - /** - * ODU (Optical channel Data Unit) Signal Id modification. - */ - ODU_SIGID - } - - public abstract L1SubType subtype(); - - @Override - public final Type type() { - return Type.L1MODIFICATION; - } - - /** - * Represents an L1 ODU (Optical channel Data Unit) Signal Id modification instruction. - */ - public static final class ModOduSignalIdInstruction extends L1ModificationInstruction { - - private final OduSignalId oduSignalId; - - ModOduSignalIdInstruction(OduSignalId oduSignalId) { - this.oduSignalId = oduSignalId; - } - - @Override - public L1SubType subtype() { - return L1SubType.ODU_SIGID; - } - - public OduSignalId oduSignalId() { - return oduSignalId; - } - - @Override - public int hashCode() { - return oduSignalId.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof ModOduSignalIdInstruction)) { - return false; - } - final ModOduSignalIdInstruction that = (ModOduSignalIdInstruction) obj; - return Objects.equals(this.oduSignalId, that.oduSignalId); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("oduSignalId", oduSignalId) - .toString(); - } - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java deleted file mode 100644 index 0dbbb451..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L2ModificationInstruction.java +++ /dev/null @@ -1,517 +0,0 @@ -/* - * Copyright 2014-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.net.flow.instructions; - -import org.onlab.packet.EthType; -import org.onlab.packet.MacAddress; -import org.onlab.packet.MplsLabel; -import org.onlab.packet.VlanId; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Abstraction of a single traffic treatment step. - */ -public abstract class L2ModificationInstruction implements Instruction { - - /** - * Represents the type of traffic treatment. - */ - public enum L2SubType { - /** - * Ether src modification. - */ - ETH_SRC, - - /** - * Ether dst modification. - */ - ETH_DST, - - /** - * VLAN id modification. - */ - VLAN_ID, - - /** - * VLAN priority modification. - */ - VLAN_PCP, - - /** - * MPLS Label modification. - */ - MPLS_LABEL, - - /** - * MPLS Push modification. - */ - MPLS_PUSH, - - /** - * MPLS Pop modification. - */ - MPLS_POP, - - /** - * MPLS TTL modification. - */ - DEC_MPLS_TTL, - - /** - * VLAN Pop modification. - */ - VLAN_POP, - - /** - * VLAN Push modification. - */ - VLAN_PUSH, - - /** - * Tunnel id modification. - */ - TUNNEL_ID, - - /** - * MPLS BOS instruction. - */ - MPLS_BOS - } - - // TODO: Create factory class 'Instructions' that will have various factory - // to create specific instructions. - - public abstract L2SubType subtype(); - - @Override - public final Type type() { - return Type.L2MODIFICATION; - } - - /** - * Represents a L2 src/dst modification instruction. - */ - public static final class ModEtherInstruction extends L2ModificationInstruction { - - private final L2SubType subtype; - private final MacAddress mac; - - ModEtherInstruction(L2SubType subType, MacAddress addr) { - - this.subtype = subType; - this.mac = addr; - } - - @Override - public L2SubType subtype() { - return this.subtype; - } - - public MacAddress mac() { - return this.mac; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("mac", mac).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype, mac); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModEtherInstruction) { - ModEtherInstruction that = (ModEtherInstruction) obj; - return Objects.equals(mac, that.mac) && - Objects.equals(subtype, that.subtype); - } - return false; - } - } - - // TODO This instruction is reused for Pop-Mpls. Consider renaming. - public static final class PushHeaderInstructions extends - L2ModificationInstruction { - - - private final L2SubType subtype; - private final EthType ethernetType; // Ethernet type value: 16 bits - - PushHeaderInstructions(L2SubType subType, EthType ethernetType) { - this.subtype = subType; - this.ethernetType = ethernetType; - } - - public EthType ethernetType() { - return ethernetType; - } - - @Override - public L2SubType subtype() { - return this.subtype; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("ethernetType", ethernetType()) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype, ethernetType); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof PushHeaderInstructions) { - PushHeaderInstructions that = (PushHeaderInstructions) obj; - return Objects.equals(subtype, that.subtype) && - Objects.equals(this.ethernetType, that.ethernetType); - } - return false; - } - } - - - - /** - * Represents a VLAN id modification instruction. - */ - public static final class ModVlanIdInstruction extends L2ModificationInstruction { - - private final VlanId vlanId; - - ModVlanIdInstruction(VlanId vlanId) { - this.vlanId = vlanId; - } - - @Override - public L2SubType subtype() { - return L2SubType.VLAN_ID; - } - - public VlanId vlanId() { - return this.vlanId; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("id", vlanId).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), vlanId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModVlanIdInstruction) { - ModVlanIdInstruction that = (ModVlanIdInstruction) obj; - return Objects.equals(vlanId, that.vlanId); - } - return false; - } - } - - /** - * Represents a VLAN PCP modification instruction. - */ - public static final class ModVlanPcpInstruction extends L2ModificationInstruction { - - private static final byte MASK = 0x7; - private final byte vlanPcp; - - ModVlanPcpInstruction(byte vlanPcp) { - this.vlanPcp = (byte) (vlanPcp & MASK); - } - - @Override - public L2SubType subtype() { - return L2SubType.VLAN_PCP; - } - - public byte vlanPcp() { - return this.vlanPcp; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("pcp", Long.toHexString(vlanPcp)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), vlanPcp); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModVlanPcpInstruction) { - ModVlanPcpInstruction that = (ModVlanPcpInstruction) obj; - return Objects.equals(vlanPcp, that.vlanPcp); - } - return false; - } - } - - /** - * Represents a VLAN POP modification instruction. - */ - public static final class PopVlanInstruction extends L2ModificationInstruction { - private final L2SubType subtype; - - PopVlanInstruction(L2SubType subType) { - this.subtype = subType; - } - - @Override - public L2SubType subtype() { - return subtype; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof PopVlanInstruction) { - PopVlanInstruction that = (PopVlanInstruction) obj; - return Objects.equals(subtype, that.subtype); - } - return false; - } - } - - /** - * Represents a MPLS label modification. - */ - public static final class ModMplsLabelInstruction - extends L2ModificationInstruction { - - private final MplsLabel mplsLabel; - - ModMplsLabelInstruction(MplsLabel mplsLabel) { - this.mplsLabel = mplsLabel; - } - - /** - * @deprecated in Drake Release. - * @return integer value of label - */ - // Consider changing return value to MplsLabel - // after deprecation process so that it'll be symmetric to - // MplsCriterion#label() - @Deprecated - public Integer label() { - return mplsLabel.toInt(); - } - - public MplsLabel mplsLabel() { - return mplsLabel; - } - - @Override - public L2SubType subtype() { - return L2SubType.MPLS_LABEL; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("mpls", mplsLabel).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), mplsLabel); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModMplsLabelInstruction) { - ModMplsLabelInstruction that = (ModMplsLabelInstruction) obj; - return Objects.equals(mplsLabel, that.mplsLabel); - } - return false; - } - } - - /** - * Represents a MPLS BOS modification. - */ - public static final class ModMplsBosInstruction - extends L2ModificationInstruction { - - private final boolean mplsBos; - - ModMplsBosInstruction(boolean mplsBos) { - this.mplsBos = mplsBos; - } - - public boolean mplsBos() { - return mplsBos; - } - - @Override - public L2SubType subtype() { - return L2SubType.MPLS_BOS; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()).add("bos", mplsBos) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), mplsBos); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModMplsBosInstruction) { - ModMplsBosInstruction that = (ModMplsBosInstruction) obj; - return Objects.equals(mplsBos, that.mplsBos()); - } - return false; - } - } - - /** - * Represents a MPLS TTL modification. - */ - public static final class ModMplsTtlInstruction - extends L2ModificationInstruction { - - ModMplsTtlInstruction() { - } - - @Override - public L2SubType subtype() { - return L2SubType.DEC_MPLS_TTL; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModMplsTtlInstruction) { - return true; - } - return false; - } - } - - /** - * Represents a Tunnel id modification. - */ - public static final class ModTunnelIdInstruction - extends L2ModificationInstruction { - - private final long tunnelId; - - ModTunnelIdInstruction(long tunnelId) { - this.tunnelId = tunnelId; - } - - public long tunnelId() { - return this.tunnelId; - } - - @Override - public L2SubType subtype() { - return L2SubType.TUNNEL_ID; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("id", Long.toHexString(tunnelId)) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), tunnelId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModTunnelIdInstruction) { - ModTunnelIdInstruction that = (ModTunnelIdInstruction) obj; - return Objects.equals(tunnelId, that.tunnelId); - } - return false; - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L3ModificationInstruction.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L3ModificationInstruction.java deleted file mode 100644 index 0efe9a77..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L3ModificationInstruction.java +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Copyright 2014-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.net.flow.instructions; - -import static com.google.common.base.MoreObjects.toStringHelper; - -import java.util.Objects; - -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; - -/** - * Abstraction of a single traffic treatment step. - */ -public abstract class L3ModificationInstruction implements Instruction { - - /** - * Represents the type of traffic treatment. - */ - public enum L3SubType { - /** - * IPv4 src modification. - */ - IPV4_SRC, - - /** - * IPv4 dst modification. - */ - IPV4_DST, - - /** - * IPv6 src modification. - */ - IPV6_SRC, - - /** - * IPv6 dst modification. - */ - IPV6_DST, - - /** - * IPv6 flow label modification. - */ - IPV6_FLABEL, - - /** - * Decrement TTL. - */ - DEC_TTL, - - /** - * Copy TTL out. - */ - TTL_OUT, - - /** - * Copy TTL in. - */ - TTL_IN, - - /** - * ARP IP src modification. - */ - ARP_SPA, - - /** - * ARP Ether src modification. - */ - ARP_SHA, - - /** - * Arp operation modification. - */ - ARP_OP - - //TODO: remaining types - } - - /** - * Returns the subtype of the modification instruction. - * @return type of instruction - */ - public abstract L3SubType subtype(); - - @Override - public final Type type() { - return Type.L3MODIFICATION; - } - - /** - * Represents a L3 src/dst modification instruction. - */ - public static final class ModIPInstruction extends L3ModificationInstruction { - - private final L3SubType subtype; - private final IpAddress ip; - - ModIPInstruction(L3SubType subType, IpAddress addr) { - - this.subtype = subType; - this.ip = addr; - } - - @Override - public L3SubType subtype() { - return this.subtype; - } - - public IpAddress ip() { - return this.ip; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("ip", ip).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), ip); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModIPInstruction) { - ModIPInstruction that = (ModIPInstruction) obj; - return Objects.equals(ip, that.ip) && - Objects.equals(this.subtype(), that.subtype()); - } - return false; - } - } - - /** - * Represents a L3 ARP IP src/dst modification instruction. - */ - public static final class ModArpIPInstruction extends L3ModificationInstruction { - - private final L3SubType subtype; - private final IpAddress ip; - - ModArpIPInstruction(L3SubType subType, IpAddress addr) { - - this.subtype = subType; - this.ip = addr; - } - - @Override - public L3SubType subtype() { - return this.subtype; - } - - public IpAddress ip() { - return this.ip; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("ip", ip).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), ip); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModArpIPInstruction) { - ModArpIPInstruction that = (ModArpIPInstruction) obj; - return Objects.equals(ip, that.ip) && - Objects.equals(this.subtype(), that.subtype()); - } - return false; - } - } - - /** - * Represents a L3 ARP Ether src/dst modification instruction. - */ - public static final class ModArpEthInstruction extends L3ModificationInstruction { - - private final L3SubType subtype; - private final MacAddress mac; - - ModArpEthInstruction(L3SubType subType, MacAddress addr) { - - this.subtype = subType; - this.mac = addr; - } - - @Override - public L3SubType subtype() { - return this.subtype; - } - - public MacAddress mac() { - return this.mac; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("mac", mac).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), mac); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModArpEthInstruction) { - ModArpEthInstruction that = (ModArpEthInstruction) obj; - return Objects.equals(mac, that.mac) && - Objects.equals(this.subtype(), that.subtype()); - } - return false; - } - } - - /** - * Represents a L3 ARP operation modification instruction. - */ - public static final class ModArpOpInstruction extends L3ModificationInstruction { - - private final L3SubType subtype; - private final short op; - - ModArpOpInstruction(L3SubType subType, short op) { - - this.subtype = subType; - this.op = op; - } - - @Override - public L3SubType subtype() { - return this.subtype; - } - - public long op() { - return this.op; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("op", op).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), op); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModArpOpInstruction) { - ModArpOpInstruction that = (ModArpOpInstruction) obj; - return Objects.equals(op, that.op) && - Objects.equals(this.subtype(), that.subtype()); - } - return false; - } - } - - /** - * Represents a L3 IPv6 Flow Label (RFC 6437) modification instruction - * (20 bits unsigned integer). - */ - public static final class ModIPv6FlowLabelInstruction - extends L3ModificationInstruction { - private static final int MASK = 0xfffff; - private final int flowLabel; // IPv6 flow label: 20 bits - - /** - * Creates a new flow mod instruction. - * - * @param flowLabel the IPv6 flow label to set in the treatment (20 bits) - */ - ModIPv6FlowLabelInstruction(int flowLabel) { - this.flowLabel = flowLabel & MASK; - } - - @Override - public L3SubType subtype() { - return L3SubType.IPV6_FLABEL; - } - - /** - * Gets the IPv6 flow label to set in the treatment. - * - * @return the IPv6 flow label to set in the treatment (20 bits) - */ - public int flowLabel() { - return this.flowLabel; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("flowLabel", Long.toHexString(flowLabel)).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), flowLabel); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModIPv6FlowLabelInstruction) { - ModIPv6FlowLabelInstruction that = - (ModIPv6FlowLabelInstruction) obj; - return Objects.equals(flowLabel, that.flowLabel); - } - return false; - } - } - - /** - * Represents a L3 TTL modification instruction. - */ - public static final class ModTtlInstruction extends L3ModificationInstruction { - - private final L3SubType subtype; - - ModTtlInstruction(L3SubType subtype) { - this.subtype = subtype; - } - - @Override - public L3SubType subtype() { - return this.subtype; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModTtlInstruction) { - ModTtlInstruction that = (ModTtlInstruction) obj; - return Objects.equals(this.subtype(), that.subtype()); - } - return false; - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L4ModificationInstruction.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L4ModificationInstruction.java deleted file mode 100644 index 441a2c5f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/L4ModificationInstruction.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2014-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.net.flow.instructions; - -import org.onlab.packet.TpPort; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Abstraction of a single traffic treatment step. - */ -public abstract class L4ModificationInstruction implements Instruction { - - /** - * Represents the type of traffic treatment. - */ - public enum L4SubType { - /** - * TCP src modification. - */ - TCP_SRC, - - /** - * TCP dst modification. - */ - TCP_DST, - - /** - * UDP src modification. - */ - UDP_SRC, - - /** - * UDP dst modification. - */ - UDP_DST - - //TODO: remaining types - } - - /** - * Returns the subtype of the modification instruction. - * - * @return type of instruction - */ - public abstract L4SubType subtype(); - - @Override - public Type type() { - return Type.L4MODIFICATION; - } - - /** - * Represents a L4 src/dst modification instruction. - */ - public static final class ModTransportPortInstruction extends L4ModificationInstruction { - - private final L4SubType subtype; - private final TpPort port; - - public ModTransportPortInstruction(L4SubType subtype, TpPort port) { - this.subtype = subtype; - this.port = port; - } - - @Override - public L4SubType subtype() { - return this.subtype; - } - - public TpPort port() { - return this.port; - } - - @Override - public String toString() { - return toStringHelper(subtype().toString()) - .add("port", port).toString(); - } - - @Override - public int hashCode() { - return Objects.hash(type(), subtype(), port); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ModTransportPortInstruction) { - ModTransportPortInstruction that = (ModTransportPortInstruction) obj; - return Objects.equals(port, that.port) && - Objects.equals(this.subtype(), that.subtype()); - } - return false; - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/package-info.java deleted file mode 100644 index 65f58a40..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/instructions/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Traffic treatment model. - */ -package org.onosproject.net.flow.instructions; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/package-info.java deleted file mode 100644 index 6068b6f2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/package-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2014-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. - */ - -/** - * Flow rule model & related services API definitions. - * - * <p> - * The figure below depicts the general interactions between different - * components of the intent subsystem.<br> - * <img src="doc-files/flow-design.png" alt="ONOS flow rule subsystem design"> - * </p> - */ -package org.onosproject.net.flow; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultFilteringObjective.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultFilteringObjective.java deleted file mode 100644 index 4d9d7225..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultFilteringObjective.java +++ /dev/null @@ -1,255 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableList; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.flow.criteria.Criteria; -import org.onosproject.net.flow.criteria.Criterion; - -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default implementation of a filtering objective. - */ -@Beta -public final class DefaultFilteringObjective implements FilteringObjective { - - - private final Type type; - private final boolean permanent; - private final int timeout; - private final ApplicationId appId; - private final int priority; - private final Criterion key; - private final List<Criterion> conditions; - private final int id; - private final Operation op; - private final Optional<ObjectiveContext> context; - private final TrafficTreatment meta; - - private DefaultFilteringObjective(Builder builder) { - this.key = builder.key; - this.type = builder.type; - this.permanent = builder.permanent; - this.timeout = builder.timeout; - this.appId = builder.appId; - this.priority = builder.priority; - this.conditions = builder.conditions; - this.op = builder.op; - this.context = Optional.ofNullable(builder.context); - this.meta = builder.meta; - - this.id = Objects.hash(type, key, conditions, permanent, - timeout, appId, priority); - } - - @Override - public Criterion key() { - return key; - } - - @Override - public Type type() { - return this.type; - } - - @Override - public Collection<Criterion> conditions() { - return conditions; - } - - @Override - public int id() { - return id; - } - - @Override - public TrafficTreatment meta() { - return meta; - } - - - @Override - public int priority() { - return priority; - } - - @Override - public ApplicationId appId() { - return appId; - } - - @Override - public int timeout() { - return timeout; - } - - @Override - public boolean permanent() { - return permanent; - } - - @Override - public Operation op() { - return op; - } - - @Override - public Optional<ObjectiveContext> context() { - return context; - } - - /** - * Returns a new builder. - * - * @return new builder - */ - public static Builder builder() { - return new Builder(); - } - - - public static final class Builder implements FilteringObjective.Builder { - private final ImmutableList.Builder<Criterion> listBuilder - = ImmutableList.builder(); - - private Type type; - private boolean permanent = DEFAULT_PERMANENT; - private int timeout = DEFAULT_TIMEOUT; - private ApplicationId appId; - private int priority = DEFAULT_PRIORITY; - private Criterion key = Criteria.dummy(); - private List<Criterion> conditions; - private Operation op; - private ObjectiveContext context; - private TrafficTreatment meta; - - @Override - public Builder withKey(Criterion key) { - this.key = key; - return this; - } - - @Override - public Builder addCondition(Criterion criterion) { - listBuilder.add(criterion); - return this; - } - - @Override - public Builder permit() { - this.type = Type.PERMIT; - return this; - } - - @Override - public Builder deny() { - this.type = Type.DENY; - return this; - } - - @Override - public Builder makeTemporary(int timeout) { - this.timeout = timeout; - permanent = false; - return this; - } - - @Override - public Builder makePermanent() { - permanent = true; - return this; - } - - @Override - public Builder fromApp(ApplicationId appId) { - this.appId = appId; - return this; - } - - @Override - public Builder withPriority(int priority) { - this.priority = priority; - return this; - } - - @Override - public Builder withMeta(TrafficTreatment treatment) { - this.meta = treatment; - return this; - } - - @Override - public FilteringObjective add() { - conditions = listBuilder.build(); - op = Operation.ADD; - checkNotNull(type, "Must have a type."); - checkArgument(!conditions.isEmpty(), "Must have at least one condition."); - checkNotNull(appId, "Must supply an application id"); - - return new DefaultFilteringObjective(this); - - } - - @Override - public FilteringObjective remove() { - conditions = listBuilder.build(); - checkNotNull(type, "Must have a type."); - checkArgument(!conditions.isEmpty(), "Must have at least one condition."); - checkNotNull(appId, "Must supply an application id"); - op = Operation.REMOVE; - - return new DefaultFilteringObjective(this); - - } - - @Override - public FilteringObjective add(ObjectiveContext context) { - conditions = listBuilder.build(); - checkNotNull(type, "Must have a type."); - checkArgument(!conditions.isEmpty(), "Must have at least one condition."); - checkNotNull(appId, "Must supply an application id"); - op = Operation.ADD; - this.context = context; - - return new DefaultFilteringObjective(this); - } - - @Override - public FilteringObjective remove(ObjectiveContext context) { - conditions = listBuilder.build(); - checkNotNull(type, "Must have a type."); - checkArgument(!conditions.isEmpty(), "Must have at least one condition."); - checkNotNull(appId, "Must supply an application id"); - op = Operation.REMOVE; - this.context = context; - - return new DefaultFilteringObjective(this); - } - - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java deleted file mode 100644 index af481805..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultForwardingObjective.java +++ /dev/null @@ -1,289 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import java.util.Objects; -import java.util.Optional; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default implementation of a forwarding objective. - */ -@Beta -public final class DefaultForwardingObjective implements ForwardingObjective { - - private final TrafficSelector selector; - private final Flag flag; - private final boolean permanent; - private final int timeout; - private final ApplicationId appId; - private final int priority; - private final Integer nextId; - private final TrafficTreatment treatment; - private final Operation op; - private final Optional<ObjectiveContext> context; - - private final int id; - - private DefaultForwardingObjective(Builder builder) { - this.selector = builder.selector; - this.flag = builder.flag; - this.permanent = builder.permanent; - this.timeout = builder.timeout; - this.appId = builder.appId; - this.priority = builder.priority; - this.nextId = builder.nextId; - this.treatment = builder.treatment; - this.op = builder.op; - this.context = Optional.ofNullable(builder.context); - - this.id = Objects.hash(selector, flag, permanent, - timeout, appId, priority, nextId, - treatment, op); - } - - - @Override - public TrafficSelector selector() { - return selector; - } - - @Override - public Integer nextId() { - return nextId; - } - - @Override - public TrafficTreatment treatment() { - return treatment; - } - - - @Override - public Flag flag() { - return flag; - } - - @Override - public int id() { - return id; - } - - @Override - public int priority() { - return priority; - } - - @Override - public ApplicationId appId() { - return appId; - } - - @Override - public int timeout() { - return timeout; - } - - @Override - public boolean permanent() { - return permanent; - } - - @Override - public Operation op() { - return op; - } - - @Override - public Optional<ObjectiveContext> context() { - return context; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return Objects.hash(selector, flag, permanent, - timeout, appId, priority, nextId, - treatment, op); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof DefaultForwardingObjective)) { - return false; - } - final DefaultForwardingObjective other = (DefaultForwardingObjective) obj; - boolean nextEq = false, treatmentEq = false; - if (this.selector.equals(other.selector) && - this.flag == other.flag && - this.permanent == other.permanent && - this.timeout == other.timeout && - this.appId.equals(other.appId) && - this.priority == other.priority && - this.op == other.op) { - if (this.nextId != null && other.nextId != null) { - nextEq = this.nextId == other.nextId; - } - if (this.treatment != null && other.treatment != null) { - treatmentEq = this.treatment.equals(other.treatment); - } - if (nextEq && treatmentEq) { - return true; - } - } - return false; - } - - /** - * Returns a new builder. - * - * @return new builder - */ - public static Builder builder() { - return new Builder(); - } - - public static final class Builder implements ForwardingObjective.Builder { - - private TrafficSelector selector; - private Flag flag; - private boolean permanent = DEFAULT_PERMANENT; - private int timeout = DEFAULT_TIMEOUT; - private int priority = DEFAULT_PRIORITY; - private ApplicationId appId; - private Integer nextId; - private TrafficTreatment treatment; - private Operation op; - private ObjectiveContext context; - - @Override - public Builder withSelector(TrafficSelector selector) { - this.selector = selector; - return this; - } - - @Override - public Builder nextStep(int nextId) { - this.nextId = nextId; - return this; - } - - @Override - public Builder withTreatment(TrafficTreatment treatment) { - this.treatment = treatment; - return this; - } - - @Override - public Builder withFlag(Flag flag) { - this.flag = flag; - return this; - } - - @Override - public Builder makeTemporary(int timeout) { - this.timeout = timeout; - this.permanent = false; - return this; - } - - @Override - public Builder makePermanent() { - this.permanent = true; - return this; - } - - @Override - public Builder fromApp(ApplicationId appId) { - this.appId = appId; - return this; - } - - @Override - public Builder withPriority(int priority) { - this.priority = priority; - return this; - } - - @Override - public ForwardingObjective add() { - checkNotNull(selector, "Must have a selector"); - checkNotNull(flag, "A flag must be set"); - checkArgument(nextId != null || treatment != null, "Must supply at " + - "least a treatment and/or a nextId"); - checkNotNull(appId, "Must supply an application id"); - op = Operation.ADD; - return new DefaultForwardingObjective(this); - } - - @Override - public ForwardingObjective remove() { - checkNotNull(selector, "Must have a selector"); - checkNotNull(flag, "A flag must be set"); - checkArgument(nextId != null || treatment != null, "Must supply at " + - "least a treatment and/or a nextId"); - checkNotNull(appId, "Must supply an application id"); - op = Operation.REMOVE; - return new DefaultForwardingObjective(this); - } - - @Override - public ForwardingObjective add(ObjectiveContext context) { - checkNotNull(selector, "Must have a selector"); - checkNotNull(flag, "A flag must be set"); - checkArgument(nextId != null || treatment != null, "Must supply at " + - "least a treatment and/or a nextId"); - checkNotNull(appId, "Must supply an application id"); - op = Operation.ADD; - this.context = context; - - return new DefaultForwardingObjective(this); - } - - @Override - public ForwardingObjective remove(ObjectiveContext context) { - checkNotNull(selector, "Must have a selector"); - checkNotNull(flag, "A flag must be set"); - checkArgument(nextId != null || treatment != null, "Must supply at " + - "least a treatment and/or a nextId"); - checkNotNull(appId, "Must supply an application id"); - op = Operation.REMOVE; - this.context = context; - - return new DefaultForwardingObjective(this); - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java deleted file mode 100644 index bd580507..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/DefaultNextObjective.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableList; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default implementation of a next objective. - */ -@Beta -public final class DefaultNextObjective implements NextObjective { - - private final List<TrafficTreatment> treatments; - private final ApplicationId appId; - private final Type type; - private final Integer id; - private final Operation op; - private final Optional<ObjectiveContext> context; - private final TrafficSelector meta; - - private DefaultNextObjective(Builder builder) { - this.treatments = builder.treatments; - this.appId = builder.appId; - this.type = builder.type; - this.id = builder.id; - this.op = builder.op; - this.context = Optional.ofNullable(builder.context); - this.meta = builder.meta; - } - - @Override - public Collection<TrafficTreatment> next() { - return treatments; - } - - @Override - public Type type() { - return type; - } - - @Override - public int id() { - return id; - } - - @Override - public int priority() { - return 0; - } - - @Override - public ApplicationId appId() { - return appId; - } - - @Override - public int timeout() { - return 0; - } - - @Override - public boolean permanent() { - return false; - } - - @Override - public Operation op() { - return op; - } - - @Override - public Optional<ObjectiveContext> context() { - return context; - } - - @Override - public TrafficSelector meta() { - return meta; - } - - /** - * Returns a new builder. - * - * @return new builder - */ - public static Builder builder() { - return new Builder(); - } - - public static final class Builder implements NextObjective.Builder { - - private ApplicationId appId; - private Type type; - private Integer id; - private List<TrafficTreatment> treatments; - private Operation op; - private ObjectiveContext context; - private TrafficSelector meta; - - private final ImmutableList.Builder<TrafficTreatment> listBuilder - = ImmutableList.builder(); - - @Override - public Builder withId(int nextId) { - this.id = nextId; - return this; - } - - @Override - public Builder withType(Type type) { - this.type = type; - return this; - } - - @Override - public Builder addTreatment(TrafficTreatment treatment) { - listBuilder.add(treatment); - return this; - } - - /** - * Noop. This method has no effect. - * - * @param timeout a timeout - * @return a next objective builder - */ - @Override - public Builder makeTemporary(int timeout) { - return this; - } - - /** - * Noop. This method has no effect. - * - * @return a next objective builder - */ - @Override - public Builder makePermanent() { - return this; - } - - @Override - public Builder fromApp(ApplicationId appId) { - this.appId = appId; - return this; - } - - /** - * Noop. This method has no effect. - * - * @param priority an integer - * @return a next objective builder - */ - @Override - public Builder withPriority(int priority) { - return this; - } - - @Override - public Builder withMeta(TrafficSelector meta) { - this.meta = meta; - return this; - } - - @Override - public NextObjective add() { - treatments = listBuilder.build(); - op = Operation.ADD; - checkNotNull(appId, "Must supply an application id"); - checkNotNull(id, "id cannot be null"); - checkNotNull(type, "The type cannot be null"); - checkArgument(!treatments.isEmpty(), "Must have at least one treatment"); - - return new DefaultNextObjective(this); - } - - @Override - public NextObjective remove() { - treatments = listBuilder.build(); - op = Operation.REMOVE; - checkNotNull(appId, "Must supply an application id"); - checkNotNull(id, "id cannot be null"); - checkNotNull(type, "The type cannot be null"); - - return new DefaultNextObjective(this); - } - - @Override - public NextObjective add(ObjectiveContext context) { - treatments = listBuilder.build(); - op = Operation.ADD; - this.context = context; - checkNotNull(appId, "Must supply an application id"); - checkNotNull(id, "id cannot be null"); - checkNotNull(type, "The type cannot be null"); - checkArgument(!treatments.isEmpty(), "Must have at least one treatment"); - - return new DefaultNextObjective(this); - } - - @Override - public NextObjective remove(ObjectiveContext context) { - treatments = listBuilder.build(); - op = Operation.REMOVE; - this.context = context; - checkNotNull(appId, "Must supply an application id"); - checkNotNull(id, "id cannot be null"); - checkNotNull(type, "The type cannot be null"); - - return new DefaultNextObjective(this); - } - - @Override - public NextObjective addToExisting() { - treatments = listBuilder.build(); - op = Operation.ADD_TO_EXISTING; - checkNotNull(appId, "Must supply an application id"); - checkNotNull(id, "id cannot be null"); - checkNotNull(type, "The type cannot be null"); - checkArgument(!treatments.isEmpty(), "Must have at least one treatment"); - - return new DefaultNextObjective(this); - } - - @Override - public NextObjective removeFromExisting() { - treatments = listBuilder.build(); - op = Operation.REMOVE_FROM_EXISTING; - checkNotNull(appId, "Must supply an application id"); - checkNotNull(id, "id cannot be null"); - checkNotNull(type, "The type cannot be null"); - - return new DefaultNextObjective(this); - } - - @Override - public NextObjective addToExisting(ObjectiveContext context) { - treatments = listBuilder.build(); - op = Operation.ADD_TO_EXISTING; - this.context = context; - checkNotNull(appId, "Must supply an application id"); - checkNotNull(id, "id cannot be null"); - checkNotNull(type, "The type cannot be null"); - checkArgument(!treatments.isEmpty(), "Must have at least one treatment"); - - return new DefaultNextObjective(this); - } - - @Override - public NextObjective removeFromExisting(ObjectiveContext context) { - treatments = listBuilder.build(); - op = Operation.REMOVE_FROM_EXISTING; - this.context = context; - checkNotNull(appId, "Must supply an application id"); - checkNotNull(id, "id cannot be null"); - checkNotNull(type, "The type cannot be null"); - - return new DefaultNextObjective(this); - } - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java deleted file mode 100644 index 8ed793d0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FilteringObjective.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.flow.criteria.Criterion; - -import java.util.Collection; - -/** - * Represents a filtering flow objective. Each filtering flow objective - * is made up of a key (typically a PortCriterion) mapped to a set of criteria. - * Using this information, a pipeline aware driver will decide how this objective - * should be mapped to the device specific pipeline-tables in order to satisfy the - * filtering condition. For example, consider the following PERMIT filtering - * objective: - * <p> - * portX -> {MAC1, VLAN1} - * <p> - * The driver could decide to pass packets to the MAC table or VLAN or PORT - * tables to ensure that only those packets arriving with the correct dst MAC - * and VLAN ids from Port X are allowed into the pipeline. - * <p> - * Filtering objectives of type PERMIT allow packets that match the key:criteria - * to enter the pipeline. As a result, the implication is that packets that don't - * match are automatically denied (dropped). - * <p> - * Filtering objectives of type DENY, are used to deny packets that would - * otherwise be permitted and forwarded through the pipeline (ie. those packets - * that make it through the PERMIT filters). - */ -@Beta -public interface FilteringObjective extends Objective { - - enum Type { - /** - * Permits packets that match the filtering condition to be processed - * by the rest of the pipeline. Automatically denies packets that don't - * match the criteria. - */ - PERMIT, - - /** - * Denies packets that make it through the permit filters. - */ - DENY - } - - /** - * Obtain the key for this filter. The filter may or may not require a key. - * - * @return a criterion, which could be null if no key was provided. - */ - Criterion key(); - - /** - * Obtain this filtering type. - * - * @return the type - */ - Type type(); - - /** - * The set of conditions the filter must provision at the device. - * - * @return a collection of criteria - */ - Collection<Criterion> conditions(); - - /** - * Auxiliary optional information provided to the device-driver.Typically - * conveys information about changes (treatments) to packets that are - * permitted into the pipeline by the PERMIT filtering condition. - * - * @return a treatment on the packets that make it through the PERMIT filters. - * Value may be null if no meta information is provided. - */ - TrafficTreatment meta(); - - /** - * Builder of Filtering objective entities. - */ - interface Builder extends Objective.Builder { - - /** - * Specify the key for the filter. - * - * @param key a criterion - * @return a filter objective builder - */ - Builder withKey(Criterion key); - - /** - * Add a filtering condition. - * - * @param criterion new criterion - * @return a filtering builder - */ - Builder addCondition(Criterion criterion); - - /** - * Permit this filtering condition set. - * - * @return a filtering builder - */ - Builder permit(); - - /** - * Deny this filtering condition set. - * - * @return a filtering builder - */ - Builder deny(); - - /** - * Set meta information about this filtering condition set. - * - * @param treatment traffic treatment to use - * @return a filtering builder - */ - Builder withMeta(TrafficTreatment treatment); - - /** - * Assigns an application id. - * - * @param appId an application id - * @return a filtering builder - */ - @Override - Builder fromApp(ApplicationId appId); - - /** - * Builds the filtering objective that will be added. - * - * @return a filtering objective - */ - FilteringObjective add(); - - /** - * Builds the filtering objective that will be removed. - * - * @return a filtering objective. - */ - FilteringObjective remove(); - - /** - * Builds the filtering objective that will be added. - * The context will be used to notify the calling application. - * - * @param context an objective context - * @return a filtering objective - */ - FilteringObjective add(ObjectiveContext context); - - /** - * Builds the filtering objective that will be removed. - * The context will be used to notify the calling application. - * - * @param context an objective context - * @return a filtering objective - */ - FilteringObjective remove(ObjectiveContext context); - - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveService.java deleted file mode 100644 index d3254151..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveService.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import org.onosproject.net.DeviceId; - -/** - * Service for programming data plane flow rules in manner independent of - * specific device table pipeline configuration. - */ -@Beta -public interface FlowObjectiveService { - - /** - * Installs the filtering rules onto the specified device. - * - * @param deviceId device identifier - * @param filteringObjective the filtering objective - */ - void filter(DeviceId deviceId, FilteringObjective filteringObjective); - - /** - * Installs the forwarding rules onto the specified device. - * - * @param deviceId device identifier - * @param forwardingObjective the forwarding objective - */ - void forward(DeviceId deviceId, ForwardingObjective forwardingObjective); - - /** - * Installs the next hop elements into the specified device. - * - * @param deviceId device identifier - * @param nextObjective a next objective - */ - void next(DeviceId deviceId, NextObjective nextObjective); - - /** - * Obtains a globally unique next objective. - * - * @return an integer - */ - int allocateNextId(); - - /** - * Installs the filtering rules onto the specified device. - * - * @param policy policy expression - */ - void initPolicy(String policy); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveStore.java deleted file mode 100644 index ecf5d733..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveStore.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import org.onosproject.net.behaviour.NextGroup; -import org.onosproject.store.Store; - -/** - * The flow objective store. - */ -@Beta -public interface FlowObjectiveStore - extends Store<ObjectiveEvent, FlowObjectiveStoreDelegate> { - - /** - * Adds a NextGroup to the store. - * - * @param nextId an integer - * @param group a next group opaque object - */ - void putNextGroup(Integer nextId, NextGroup group); - - /** - * Fetch a next group from the store. - * @param nextId an integer - * @return a next group - */ - NextGroup getNextGroup(Integer nextId); - - /** - * Allocates a next objective id. This id is globally unique - * - * @return an integer - */ - int allocateNextId(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveStoreDelegate.java deleted file mode 100644 index 2189af1b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/FlowObjectiveStoreDelegate.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import org.onosproject.store.StoreDelegate; - -/** - * Flow Objective store delegate abstraction. - */ -@Beta -public interface FlowObjectiveStoreDelegate extends StoreDelegate<ObjectiveEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java deleted file mode 100644 index 9857a710..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ForwardingObjective.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -/** - * Represents a description of which types of traffic need to - * be forwarded through the device. A forwarding objective may - * result in multiple rules at the device. There are two main types - * of forwarding objectives: - * - * - Versatile - * - Specific - * - * A versatile forwarding objective represents a composite rule that matches - * two or more header fields. The use of versatile usually indicates that this - * rule should be inserted in its entirety into the ACL table. Although, - * drivers for some devices are free to implement this differently. - * - * A specific forwarding objective represents a specific rule matching one or - * more header fields. The installation of this rule may result in several rules - * at the device. For example, one per table type. - */ -@Beta -public interface ForwardingObjective extends Objective { - - /** - * Represents whether this objective is monolithic or - * may be broken down into parts. - */ - enum Flag { - /** - * A decomposable objective. - */ - SPECIFIC, - - /** - * A monolithic objective. - */ - VERSATILE - } - - /** - * Obtain the selector for this objective. - * - * @return a traffic selector - */ - TrafficSelector selector(); - - /** - * Obtain the traffic treatment for this objective. Mutually exclusive with - * 'treatment'. - * - * @return an integer - */ - Integer nextId(); - - /** - * A traffic treatment for this forwarding objective. Mutually exclusive - * with a nextId. - * - * @return a traffic treatment - */ - TrafficTreatment treatment(); - - /** - * Obtain the type of this objective. - * - * @return a flag type - */ - Flag flag(); - - /** - * A forwarding objective builder. - */ - interface Builder extends Objective.Builder { - - /** - * Assigns a selector to the forwarding objective. - * - * @param selector a traffic selector - * @return a forwarding objective builder - */ - Builder withSelector(TrafficSelector selector); - - /** - * Assigns a next step to the forwarding objective. - * - * @param nextId a next objective id. - * @return a forwarding objective builder - */ - Builder nextStep(int nextId); - - /** - * Assigns the treatment for this forwarding objective. - * - * @param treatment a traffic treatment - * @return a forwarding objective - */ - Builder withTreatment(TrafficTreatment treatment); - - /** - * Assigns the flag to the forwarding objective. - * - * @param flag a flag - * @return a forwarding objective builder - */ - Builder withFlag(Flag flag); - - /** - * Builds the forwarding objective that will be added. - * - * @return a forwarding objective - */ - ForwardingObjective add(); - - /** - * Builds the forwarding objective that will be removed. - * - * @return a forwarding objective. - */ - ForwardingObjective remove(); - - /** - * Builds the forwarding objective that will be added. - * The context will be used to notify the calling application. - * - * @param context an objective context - * @return a forwarding objective - */ - ForwardingObjective add(ObjectiveContext context); - - /** - * Builds the forwarding objective that will be removed. - * The context will be used to notify the calling application. - * - * @param context an objective context - * @return a forwarding objective - */ - ForwardingObjective remove(ObjectiveContext context); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java deleted file mode 100644 index 36098d71..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/NextObjective.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import java.util.Collection; - -/** - * Represents a nexthop which will be translated by a driver - * into the appropriate group or actions needed to implement - * the egress function. - * - * A next objective is made up of a collection of traffic treatments - * associated with a type. These types are: - * - * - Hashed - * - Broadcast - * - Failover - * - Simple - * - * These types will indicate to the driver what the intended behavior is. - * For example, a broadcast next objective with a collection of output - * treatments will indicate to a driver that all output actions are expected - * to be executed simultaneously. The driver is then free to implement this - * as a group or a simple action list. - */ -@Beta -public interface NextObjective extends Objective { - - /** - * Represents the type of next phase to build. - */ - enum Type { - /** - * A hashed packet processing. - */ - HASHED, - - /** - * Broadcast packet process. - */ - BROADCAST, - - /** - * Failover handling. - */ - FAILOVER, - - /** - * Simple processing. Could be a group or a treatment. - */ - SIMPLE - } - - /** - * The collection of treatments that need to be applied to a set of traffic. - * - * @return a collection of traffic treatments - */ - Collection<TrafficTreatment> next(); - - /** - * The type of operation that will be applied to the traffic using the collection - * of treatments. - * - * @return a type - */ - Type type(); - - /** - * Auxiliary optional information provided to the device-driver.Typically - * conveys information about selectors (matches) that are intended to - * use this Next Objective. - * - * @return a selector intended to pass meta information to the device driver. - * Value may be null if no meta information is provided. - */ - TrafficSelector meta(); - - /** - * A next step builder. - */ - interface Builder extends Objective.Builder { - - /** - * Specifies the id for this next objective. - * - * @param nextId an integer - * @return a next objective builder - */ - Builder withId(int nextId); - - /** - * Sets the type of next step. - * - * @param type a type - * @return a next step builder - */ - Builder withType(Type type); - - /** - * Adds a treatment to this next step. - * - * @param treatment a traffic treatment - * @return a next step builder - */ - Builder addTreatment(TrafficTreatment treatment); - - /** - * Specifies the application which applied the filter. - * - * @param appId an application id - * @return an objective builder - */ - @Override - Builder fromApp(ApplicationId appId); - - /** - * Sets the priority for this objective. - * - * @param priority an integer - * @return an objective builder - */ - @Override - Builder withPriority(int priority); - - /** - * Set meta information related to this next objective. - * - * @param selector match conditions - * @return an objective builder - */ - Builder withMeta(TrafficSelector selector); - - /** - * Builds the next objective that will be added. - * - * @return a next objective - */ - NextObjective add(); - - /** - * Builds the next objective that will be removed. - * - * @return a next objective. - */ - NextObjective remove(); - - /** - * Builds the next objective that will be added. - * The context will be used to notify the calling application. - * - * @param context an objective context - * @return a next objective - */ - NextObjective add(ObjectiveContext context); - - /** - * Builds the next objective that will be removed. - * The context will be used to notify the calling application. - * - * @param context an objective context - * @return a next objective - */ - NextObjective remove(ObjectiveContext context); - - /** - * Build the next objective that will be added, with {@link Operation} - * ADD_TO_EXISTING. - * - * @return a next objective - */ - NextObjective addToExisting(); - - /** - * Build the next objective that will be removed, with {@link Operation} - * REMOVE_FROM_EXISTING. - * - * @return a next objective - */ - NextObjective removeFromExisting(); - - /** - * Builds the next objective that will be added, with {@link Operation} - * ADD_TO_EXISTING. The context will be used to notify the calling application. - * - * @param context an objective context - * @return a next objective - */ - NextObjective addToExisting(ObjectiveContext context); - - /** - * Builds the next objective that will be removed, with {@link Operation} - * REMOVE_FROM_EXISTING. The context will be used to notify the calling application. - * - * @param context an objective context - * @return a next objective - */ - NextObjective removeFromExisting(ObjectiveContext context); - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java deleted file mode 100644 index b1d73a7c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/Objective.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; - -import java.util.Optional; - -/** - * Base representation of a flow-objective description. - */ -@Beta -public interface Objective { - - boolean DEFAULT_PERMANENT = true; - int DEFAULT_TIMEOUT = 0; - int DEFAULT_PRIORITY = 32768; - - /** - * Type of operation. - */ - enum Operation { - /** - * Adds the objective. Can be used for any flow objective. For forwarding - * and filtering objectives, existing objectives with identical selector - * and priority fields (but different treatments or next) will be replaced. - * For next objectives, if modification is desired, ADD will not - * do anything - use ADD_TO_EXISTING. - */ - ADD, - - /** - * Removes the objective. Can be used for any flow objective. - */ - REMOVE, - - /** - * Add to an existing Next Objective. Should not be used for any other - * objective. - */ - ADD_TO_EXISTING, - - /** - * Remove from an existing Next Objective. Should not be used for any - * other objective. - */ - REMOVE_FROM_EXISTING - } - - /** - * An identifier for this objective. - * - * @return an integer - */ - int id(); - - /** - * The priority for this objective. - * - * @return an integer - */ - int priority(); - - /** - * The application which applied this objective. - * - * @return an application id - */ - ApplicationId appId(); - - /** - * The timeout for this objective. - * - * @return an integer - */ - int timeout(); - - /** - * Whether this objective is permanent. - * - * @return a boolean - */ - boolean permanent(); - - /** - * The type of operation for this objective. - * - * @return an operation - */ - Operation op(); - - /** - * Obtains an optional context. - * - * @return optional; which will be empty if there is no context. - * Otherwise it will return the context. - */ - Optional<ObjectiveContext> context(); - - /** - * An objective builder. - */ - interface Builder { - /** - * Makes the filtering objective temporary. - * - * @param timeout a timeout - * @return an objective builder - */ - Builder makeTemporary(int timeout); - - /** - * Makes the filtering objective permanent. - * - * @return an objective builder - */ - Builder makePermanent(); - - /** - * Specifies the application which applied the filter. - * - * @param appId an application id - * @return an objective builder - */ - Builder fromApp(ApplicationId appId); - - /** - * Sets the priority for this objective. - * - * @param priority an integer - * @return an objective builder - */ - Builder withPriority(int priority); - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveContext.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveContext.java deleted file mode 100644 index f3d23e4a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveContext.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; - -/** - * The context of a objective that will become the subject of - * the notification. - * <p> - * Implementations of this class must be serializable. - * </p> - */ -@Beta -public interface ObjectiveContext { - - /** - * Invoked on successful execution of the flow objective. - * - * @param objective objective to execute - */ - default void onSuccess(Objective objective) { - } - - /** - * Invoked when error is encountered while executing the flow objective. - * - * @param objective objective to execute - * @param error error encountered - */ - default void onError(Objective objective, ObjectiveError error) { - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveError.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveError.java deleted file mode 100644 index fd159d7e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveError.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; - -/** - * Represents the set of errors possible when processing an objective. - */ -@Beta -public enum ObjectiveError { - - /** - * The driver processing this objective does not know how to process it. - */ - UNSUPPORTED, - - /** - * The flow installation for this objective failed. - */ - FLOWINSTALLATIONFAILED, - - /** - * THe group installation for this objective failed. - */ - GROUPINSTALLATIONFAILED, - - /** - * The group was reported as installed but is missing. - */ - GROUPMISSING, - - /** - * The device was not available to install objectives to. - */ - DEVICEMISSING, - - /** - * Incorrect Objective parameters passed in by the caller. - */ - BADPARAMS, - - /** - * An unknown error occurred. - */ - UNKNOWN -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveEvent.java deleted file mode 100644 index c6937e31..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/ObjectiveEvent.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.net.flowobjective; - -import com.google.common.annotations.Beta; -import org.onosproject.event.AbstractEvent; - -/** - * Describes a objective event. - */ -@Beta -public class ObjectiveEvent extends AbstractEvent<ObjectiveEvent.Type, Integer> { - - /** - * Type of objective events. - */ - public enum Type { - /** - * Signifies that the objective has been added to the store. - */ - ADD, - - /** - * Signifies that the objective has been removed. - */ - REMOVE - } - - /** - * Creates an event of the given type for the specified objective id. - * - * @param type the type of the event - * @param objective the objective id the event is about - */ - public ObjectiveEvent(Type type, Integer objective) { - super(type, objective); - } - - /** - * Creates an event of the given type for the specified objective id at the given - * time. - * - * @param type the type of the event - * @param objective the objective id the event is about - * @param time the time of the event - */ - public ObjectiveEvent(Type type, Integer objective, long time) { - super(type, objective, time); - } -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/package-info.java deleted file mode 100644 index 105f7b59..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flowobjective/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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. - */ - -/** - * Abstractions for objective-based flow programming of data plane without - * requiring device pipeline structure awareness. This subsystem is - * experimental and its interfaces will change in the upcoming release. - */ -package org.onosproject.net.flowobjective;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroup.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroup.java deleted file mode 100644 index 97f8aedf..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroup.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * 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.net.group; - -import static com.google.common.base.MoreObjects.toStringHelper; - -import java.util.Objects; - -import org.onosproject.core.GroupId; -import org.onosproject.net.DeviceId; - -/** - * ONOS implementation of default group that is stored in the system. - */ -public class DefaultGroup extends DefaultGroupDescription - implements Group, StoredGroupEntry { - - private GroupState state; - private boolean isGroupStateAddedFirstTime; - private long life; - private long packets; - private long bytes; - private long referenceCount; - private GroupId id; - - /** - * Initializes default values. - * - * @param newId group id for new group - */ - private void initialize(GroupId newId) { - id = newId; - state = GroupState.PENDING_ADD; - life = 0; - packets = 0; - bytes = 0; - referenceCount = 0; - } - - /** - * Default group object constructor with the parameters. - * - * @param id group identifier - * @param groupDesc group description parameters - */ - public DefaultGroup(GroupId id, GroupDescription groupDesc) { - super(groupDesc); - initialize(id); - } - - /** - * Default group object constructor with the available information - * from data plane. - * - * @param id group identifier - * @param deviceId device identifier - * @param type type of the group - * @param buckets immutable list of group bucket - */ - public DefaultGroup(GroupId id, - DeviceId deviceId, - GroupDescription.Type type, - GroupBuckets buckets) { - super(deviceId, type, buckets); - initialize(id); - } - - /** - * Returns group identifier associated with a group object. - * - * @return GroupId Group Identifier - */ - @Override - public GroupId id() { - return this.id; - } - - /** - * Returns current state of a group object. - * - * @return GroupState Group State - */ - @Override - public GroupState state() { - return this.state; - } - - /** - * Returns the number of milliseconds this group has been alive. - * - * @return number of millis - */ - @Override - public long life() { - return this.life; - } - - /** - * Returns the number of packets processed by this group. - * - * @return number of packets - */ - @Override - public long packets() { - return this.packets; - } - - /** - * Returns the number of bytes processed by this group. - * - * @return number of bytes - */ - @Override - public long bytes() { - return this.bytes; - } - - /** - * Sets the new state for this entry. - * - * @param newState new group entry state. - */ - @Override - public void setState(Group.GroupState newState) { - this.state = newState; - } - - /** - * Sets how long this entry has been entered in the system. - * - * @param life epoch time - */ - @Override - public void setLife(long life) { - this.life = life; - } - - /** - * Sets number of packets processed by this group entry. - * - * @param packets a long value - */ - @Override - public void setPackets(long packets) { - this.packets = packets; - } - - /** - * Sets number of bytes processed by this group entry. - * - * @param bytes a long value - */ - @Override - public void setBytes(long bytes) { - this.bytes = bytes; - } - - @Override - public void setReferenceCount(long referenceCount) { - this.referenceCount = referenceCount; - } - - @Override - public long referenceCount() { - return referenceCount; - } - - /* - * The deviceId, type and buckets are used for hash. - * - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), id); - } - - /* - * The deviceId, groupId, type and buckets should be same. - * - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultGroup) { - DefaultGroup that = (DefaultGroup) obj; - return super.equals(obj) && - Objects.equals(id, that.id); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("description", super.toString()) - .add("groupid", id) - .add("state", state) - .toString(); - } - - @Override - public void setIsGroupStateAddedFirstTime(boolean isGroupStateAddedFirstTime) { - this.isGroupStateAddedFirstTime = isGroupStateAddedFirstTime; - } - - @Override - public boolean isGroupStateAddedFirstTime() { - return isGroupStateAddedFirstTime; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java deleted file mode 100644 index 9d942ee4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.core.GroupId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.flow.instructions.Instruction; - -import java.util.List; -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Group bucket implementation. A group bucket is collection of - * instructions that can be performed on a traffic flow. A select - * Group can have one or more Buckets where traffic will be - * processed by a single bucket in the group, based on device - * specific selection algorithm (e.g. hash on some fields of the - * incoming traffic flows or round robin) and hence can contains - * optional weight field to define the weights among the buckets - * in the group. A failover group bucket is associated with a - * specific port or group that controls its liveness. - */ -public final class DefaultGroupBucket implements GroupBucket, StoredGroupBucketEntry { - private final GroupDescription.Type type; - private final TrafficTreatment treatment; - private final short weight; - private final PortNumber watchPort; - private final GroupId watchGroup; - private long packets; - private long bytes; - - /** - * Group bucket constructor with the parameters. - * - * @param type group bucket type - * @param treatment traffic treatment associated with group bucket - * @param weight optional weight associated with group bucket - * @param watchPort port that determines the liveness of group bucket - * @param watchGroup group that determines the liveness of group bucket - */ - private DefaultGroupBucket(GroupDescription.Type type, - TrafficTreatment treatment, - short weight, - PortNumber watchPort, - GroupId watchGroup) { - this.type = type; - this.treatment = checkNotNull(treatment); - this.weight = weight; - this.watchPort = watchPort; - this.watchGroup = watchGroup; - } - - /** - * Creates indirect group bucket. - * - * @param treatment traffic treatment associated with group bucket - * @return indirect group bucket object - */ - public static GroupBucket createIndirectGroupBucket( - TrafficTreatment treatment) { - return new DefaultGroupBucket(GroupDescription.Type.INDIRECT, - treatment, - (short) -1, - null, - null); - } - - /** - * Creates select group bucket with weight as 1. - * - * @param treatment traffic treatment associated with group bucket - * @return select group bucket object - */ - public static GroupBucket createSelectGroupBucket( - TrafficTreatment treatment) { - return new DefaultGroupBucket(GroupDescription.Type.SELECT, - treatment, - (short) 1, - null, - null); - } - - /** - * Creates select group bucket with specified weight. - * - * @param treatment traffic treatment associated with group bucket - * @param weight weight associated with group bucket - * @return select group bucket object - */ - public static GroupBucket createSelectGroupBucket( - TrafficTreatment treatment, - short weight) { - if (weight == 0) { - return null; - } - - return new DefaultGroupBucket(GroupDescription.Type.SELECT, - treatment, - weight, - null, - null); - } - - /** - * Creates failover group bucket with watchport or watchgroup. - * - * @param treatment traffic treatment associated with group bucket - * @param watchPort port that determines the liveness of group bucket - * @param watchGroup group that determines the liveness of group bucket - * @return failover group bucket object - */ - public static GroupBucket createFailoverGroupBucket( - TrafficTreatment treatment, - PortNumber watchPort, - GroupId watchGroup) { - checkArgument(((watchPort != null) || (watchGroup != null))); - return new DefaultGroupBucket(GroupDescription.Type.FAILOVER, - treatment, - (short) -1, - watchPort, - watchGroup); - } - - /** - * Creates all group bucket. - * - * @param treatment traffic treatment associated with group bucket - * @return all group bucket object - */ - public static GroupBucket createAllGroupBucket(TrafficTreatment treatment) { - return new DefaultGroupBucket(GroupDescription.Type.ALL, - treatment, - (short) -1, - null, - null); - } - - @Override - public GroupDescription.Type type() { - return this.type; - } - - /** - * Returns list of Traffic instructions that are part of the bucket. - * - * @return TrafficTreatment Traffic instruction list - */ - @Override - public TrafficTreatment treatment() { - return treatment; - } - - /** - * Returns weight of select group bucket. - * - * @return short weight associated with a bucket - */ - @Override - public short weight() { - return weight; - } - - /** - * Returns port number used for liveness detection for a - * failover bucket. - * - * @return PortNumber port number used for liveness detection - */ - @Override - public PortNumber watchPort() { - return watchPort; - } - - /** - * Returns group identifier used for liveness detection for a - * failover bucket. - * - * @return GroupId group identifier to be used for liveness detection - */ - @Override - public GroupId watchGroup() { - return watchGroup; - } - - /* - * The type and treatment can change on a given bucket - * - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public int hashCode() { - return Objects.hash(type, treatment); - } - - /* - * The priority and statistics can change on a given treatment and selector - * - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultGroupBucket) { - DefaultGroupBucket that = (DefaultGroupBucket) obj; - List<Instruction> myInstructions = this.treatment.allInstructions(); - List<Instruction> theirInstructions = that.treatment.allInstructions(); - - return Objects.equals(type, that.type) && - myInstructions.containsAll(theirInstructions) && - theirInstructions.containsAll(myInstructions); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("type", type) - .add("treatment", treatment) - .add("packets", packets) - .add("bytes", bytes) - .toString(); - } - - @Override - public long packets() { - return packets; - } - - @Override - public long bytes() { - return bytes; - } - - @Override - public void setPackets(long packets) { - this.packets = packets; - } - - @Override - public void setBytes(long bytes) { - this.bytes = bytes; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java deleted file mode 100644 index 1580d835..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * 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.net.group; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Objects; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; - -/** - * Default implementation of group description interface. - */ -public class DefaultGroupDescription implements GroupDescription { - private final GroupDescription.Type type; - private final GroupBuckets buckets; - private final GroupKey appCookie; - private final ApplicationId appId; - private final DeviceId deviceId; - private final Integer givenGroupId; - - /** - * Constructor to be used by north bound applications. - * NOTE: The caller of this subsystem MUST ensure the appCookie - * provided in this API is immutable. - * NOTE: The caller may choose to pass in 'null' for the groupId. This is - * the typical case, where the caller allows the group subsystem to choose - * the groupId in a globally unique way. If the caller passes in the groupId, - * the caller MUST ensure that the id is globally unique (not just unique - * per device). - * - * @param deviceId device identifier - * @param type type of the group - * @param buckets immutable list of group bucket - * @param appCookie immutable application cookie of type DefaultGroupKey - * to be associated with the group - * @param groupId group identifier - * @param appId application id - */ - public DefaultGroupDescription(DeviceId deviceId, - GroupDescription.Type type, - GroupBuckets buckets, - GroupKey appCookie, - Integer groupId, - ApplicationId appId) { - this.type = checkNotNull(type); - this.deviceId = checkNotNull(deviceId); - this.buckets = checkNotNull(buckets); - this.appCookie = appCookie; - this.givenGroupId = groupId; - this.appId = appId; - } - - /** - * Constructor to be used by group subsystem internal components. - * Creates group description object from another object of same type. - * - * @param groupDesc group description object - * - */ - public DefaultGroupDescription(GroupDescription groupDesc) { - this.type = groupDesc.type(); - this.deviceId = groupDesc.deviceId(); - this.buckets = groupDesc.buckets(); - this.appCookie = groupDesc.appCookie(); - this.appId = groupDesc.appId(); - this.givenGroupId = groupDesc.givenGroupId(); - } - - /** - * Constructor to be used by group subsystem internal components. - * Creates group description object from the information retrieved - * from data plane. - * - * @param deviceId device identifier - * @param type type of the group - * @param buckets immutable list of group bucket - * - */ - public DefaultGroupDescription(DeviceId deviceId, - GroupDescription.Type type, - GroupBuckets buckets) { - this(deviceId, type, buckets, null, null, null); - } - - /** - * Returns type of a group object. - * - * @return GroupType group type - */ - @Override - public GroupDescription.Type type() { - return this.type; - } - - /** - * Returns device identifier on which this group object is created. - * - * @return DeviceId device identifier - */ - @Override - public DeviceId deviceId() { - return this.deviceId; - } - - /** - * Returns application identifier that has created this group object. - * - * @return ApplicationId application identifier - */ - @Override - public ApplicationId appId() { - return this.appId; - } - - /** - * Returns application cookie associated with a group object. - * - * @return GroupKey application cookie - */ - @Override - public GroupKey appCookie() { - return this.appCookie; - } - - /** - * Returns group buckets of a group. - * - * @return GroupBuckets immutable list of group bucket - */ - @Override - public GroupBuckets buckets() { - return this.buckets; - } - - /** - * Returns groupId passed in by application. - * - * @return Integer group Id passed in by caller. May be null if caller passed - * in null during GroupDescription creation. - */ - @Override - public Integer givenGroupId() { - return this.givenGroupId; - } - - @Override - /* - * The deviceId, type and buckets are used for hash. - * - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public int hashCode() { - return Objects.hash(deviceId, type, buckets); - } - - @Override - /* - * The deviceId, type and buckets should be same. - * - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultGroupDescription) { - DefaultGroupDescription that = (DefaultGroupDescription) obj; - return Objects.equals(deviceId, that.deviceId) && - Objects.equals(type, that.type) && - Objects.equals(buckets, that.buckets); - - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("deviceId", deviceId) - .add("type", type) - .add("buckets", buckets) - .add("appId", appId) - .add("givenGroupId", givenGroupId) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupKey.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupKey.java deleted file mode 100644 index e1eacd1e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/DefaultGroupKey.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * 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.net.group; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Arrays; - -/** - * Default implementation of group key interface. - */ -public class DefaultGroupKey implements GroupKey { - - private final byte[] key; - protected static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); - - public DefaultGroupKey(byte[] key) { - this.key = checkNotNull(key); - } - - @Override - public byte[] key() { - return key; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof DefaultGroupKey)) { - return false; - } - DefaultGroupKey that = (DefaultGroupKey) o; - return (Arrays.equals(this.key, that.key)); - } - - @Override - public int hashCode() { - return Arrays.hashCode(this.key); - } - - /** - * Returns a hex string representation of the byte array that is used - * as a group key. This solution was adapted from - * http://stackoverflow.com/questions/9655181/ - */ - @Override - public String toString() { - char[] hexChars = new char[key.length * 2]; - for (int j = 0; j < key.length; j++) { - int v = key[j] & 0xFF; - hexChars[j * 2] = HEX_ARRAY[v >>> 4]; - hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; - } - return "GroupKey:0x" + new String(hexChars); - } - -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/Group.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/Group.java deleted file mode 100644 index 54407752..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/Group.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.core.GroupId; - -/** - * ONOS representation of group that is stored in the system. - */ -public interface Group extends GroupDescription { - /** - * State of the group object in ONOS. - */ - enum GroupState { - /** - * Group create request is queued as group AUDIT is in progress. - */ - WAITING_AUDIT_COMPLETE, - /** - * Group create request is processed by ONOS and not yet - * received the confirmation from data plane. - */ - PENDING_ADD, - /** - * Group is missing in data plane and retrying GROUP ADD request. - */ - PENDING_ADD_RETRY, - /** - * Group is created in the data plane. - */ - ADDED, - /** - * Group update request is processed by ONOS and not - * received the confirmation from data plane post which - * state moves to ADDED state. - */ - PENDING_UPDATE, - /** - * Group delete request is processed by ONOS and not - * received the confirmation from data plane. - */ - PENDING_DELETE - } - - /** - * Returns group identifier associated with a group object. - * - * @return GroupId Group Identifier - */ - GroupId id(); - - /** - * Returns current state of a group object. - * - * @return GroupState Group State - */ - GroupState state(); - - /** - * Returns the number of milliseconds this group has been alive. - * - * @return number of millis - */ - long life(); - - /** - * Returns the number of packets processed by this group. - * - * @return number of packets - */ - long packets(); - - /** - * Returns the number of bytes processed by this group. - * - * @return number of bytes - */ - long bytes(); - - /** - * Returns the number of flow rules or other groups reference this group. - * - * @return number of flow rules or other groups pointing to this group - */ - long referenceCount(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java deleted file mode 100644 index a503c154..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupBucket.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.core.GroupId; -import org.onosproject.net.PortNumber; -import org.onosproject.net.flow.TrafficTreatment; - -/** - * Group Bucket definition. A default group Bucket is collection of - * Instructions that can be performed on a traffic flow. A failover - * group bucket is associated with a specific port or group that - * controls its liveness. A select group bucket contains optional - * weight field to define the weights among the buckets in the group. - */ -public interface GroupBucket { - /** - * Returns group type of the bucket. - * - * @return GroupType group type - */ - GroupDescription.Type type(); - - /** - * Returns list of Traffic instructions that are part of the bucket. - * - * @return TrafficTreatment traffic instruction list - */ - TrafficTreatment treatment(); - - /** - * Returns weight of select group bucket. - * - * @return short weight associated with a bucket - */ - short weight(); - - /** - * Returns port number used for liveness detection for a - * failover bucket. - * - * @return PortNumber port number used for liveness detection - */ - PortNumber watchPort(); - - /** - * Returns group identifier used for liveness detection for a - * failover bucket. - * - * @return GroupId group identifier to be used for liveness detection - */ - GroupId watchGroup(); - - /** - * Returns the number of packets processed by this group bucket. - * - * @return number of packets - */ - long packets(); - - /** - * Returns the number of bytes processed by this group bucket. - * - * @return number of bytes - */ - long bytes(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupBuckets.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupBuckets.java deleted file mode 100644 index c0b5e5c6..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupBuckets.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.net.group; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.List; - -import com.google.common.collect.ImmutableList; - -/** - * Immutable collection of group bucket. - */ -public final class GroupBuckets { - private final List<GroupBucket> buckets; - - /** - * Creates a immutable list of group bucket. - * - * @param buckets list of group bucket - */ - public GroupBuckets(List<GroupBucket> buckets) { - this.buckets = ImmutableList.copyOf(checkNotNull(buckets)); - } - - /** - * Returns immutable list of group buckets. - * - * @return list of group bucket - */ - public List<GroupBucket> buckets() { - return buckets; - } - - @Override - public int hashCode() { - int result = 17; - int combinedHash = 0; - for (GroupBucket bucket:buckets) { - combinedHash = combinedHash + bucket.hashCode(); - } - result = 31 * result + combinedHash; - - return result; - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof GroupBuckets) { - return (this.buckets.containsAll(((GroupBuckets) obj).buckets) && - ((GroupBuckets) obj).buckets.containsAll(this.buckets)); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("buckets", buckets.toString()) - .toString(); - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java deleted file mode 100644 index 671b9a54..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; - -/** - * ONOS representation of group description that is used to create - * a group. It contains immutable properties of a ONOS group construct - * such as "type", "DeviceId", "appCookie", "appId" and "buckets" - */ -public interface GroupDescription { - /** - * Types of the group supported by ONOS. - */ - enum Type { - /** - * Load-balancing among different buckets in a group. - */ - SELECT, - /** - * Single Bucket Group. - */ - INDIRECT, - /** - * Multicast to all buckets in a group. - */ - ALL, - /** - * Uses the first live bucket in a group. - */ - FAILOVER - } - - /** - * Returns type of a group object. - * - * @return GroupType group type - */ - Type type(); - - /** - * Returns device identifier on which this group object is created. - * - * @return DeviceId device identifier - */ - DeviceId deviceId(); - - /** - * Returns application identifier that has created this group object. - * - * @return ApplicationId application identifier - */ - ApplicationId appId(); - - /** - * Returns application cookie associated with a group object. - * - * @return GroupKey application cookie - */ - GroupKey appCookie(); - - /** - * Returns groupId passed in by caller. - * - * @return Integer group id passed in by caller. May be null if caller - * passed in null to let groupService determin the group id. - */ - Integer givenGroupId(); - - /** - * Returns group buckets of a group. - * - * @return GroupBuckets immutable list of group bucket - */ - GroupBuckets buckets(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupEvent.java deleted file mode 100644 index 45fbb3ed..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupEvent.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.event.AbstractEvent; - -/** - * Describes group events. - */ -public class GroupEvent extends AbstractEvent<GroupEvent.Type, Group> { - - /** - * Type of flow rule events. - */ - public enum Type { - /** - * Signifies that a new Group has been detected. - */ - GROUP_ADDED, - - /** - * Signifies that a Group has been removed. - */ - GROUP_REMOVED, - - /** - * Signifies that a Group has been updated. - */ - GROUP_UPDATED, - - /** - * Signifies that a request to create Group has failed. - */ - GROUP_ADD_FAILED, - - /** - * Signifies that a request to remove Group has failed. - */ - GROUP_REMOVE_FAILED, - - /** - * Signifies that a request to update Group has failed. - */ - GROUP_UPDATE_FAILED, - - // internal event between Manager <-> Store - - /* - * Signifies that a request to create Group has been added to the store. - */ - GROUP_ADD_REQUESTED, - /* - * Signifies that a request to update Group has been added to the store. - */ - GROUP_UPDATE_REQUESTED, - /* - * Signifies that a request to delete Group has been added to the store. - */ - GROUP_REMOVE_REQUESTED, - - - } - - /** - * Creates an event of a given type and for the specified Group and the - * current time. - * - * @param type Group event type - * @param group event subject - */ - public GroupEvent(Type type, Group group) { - super(type, group); - } - - /** - * Creates an event of a given type and for the specified Group and time. - * - * @param type Group event type - * @param group event subject - * @param time occurrence time - */ - public GroupEvent(Type type, Group group, long time) { - super(type, group, time); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupKey.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupKey.java deleted file mode 100644 index a63bee27..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupKey.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.net.group; - -/** - * Representation of generalized Key that would be used to store - * groups in < Key, Value > store. This key uses a generic - * byte array so that applications can associate their groups with - * any of their data by translating it into a byte array. - */ -public interface GroupKey { - /** - * Returns the byte representation of key. - * - * @return byte array - */ - byte[] key(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupListener.java deleted file mode 100644 index 349ce6a7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving Group related events. - */ -public interface GroupListener extends EventListener<GroupEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupOperation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupOperation.java deleted file mode 100644 index e4173b30..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupOperation.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * 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.net.group; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Objects; - -import org.onosproject.core.GroupId; - -/** - * Group operation definition to be used between core and provider - * layers of group subsystem. - * - */ -public final class GroupOperation { - private final Type opType; - private final GroupId groupId; - private final GroupDescription.Type groupType; - private final GroupBuckets buckets; - - public enum Type { - /** - * Create a group in a device with the specified parameters. - */ - ADD, - /** - * Modify a group in a device with the specified parameters. - */ - MODIFY, - /** - * Delete a specified group. - */ - DELETE - } - - /** - * Group operation constructor with the parameters. - * - * @param opType group operation type - * @param groupId group Identifier - * @param groupType type of the group - * @param buckets immutable list of group buckets to be part of group - */ - private GroupOperation(Type opType, - GroupId groupId, - GroupDescription.Type groupType, - GroupBuckets buckets) { - this.opType = checkNotNull(opType); - this.groupId = checkNotNull(groupId); - this.groupType = checkNotNull(groupType); - this.buckets = buckets; - } - - /** - * Creates ADD group operation object. - * - * @param groupId group Identifier - * @param groupType type of the group - * @param buckets immutable list of group buckets to be part of group - * @return add group operation object - */ - public static GroupOperation createAddGroupOperation(GroupId groupId, - GroupDescription.Type groupType, - GroupBuckets buckets) { - checkNotNull(buckets); - return new GroupOperation(Type.ADD, groupId, groupType, buckets); - } - - /** - * Creates MODIFY group operation object. - * - * @param groupId group Identifier - * @param groupType type of the group - * @param buckets immutable list of group buckets to be part of group - * @return modify group operation object - */ - public static GroupOperation createModifyGroupOperation(GroupId groupId, - GroupDescription.Type groupType, - GroupBuckets buckets) { - checkNotNull(buckets); - return new GroupOperation(Type.MODIFY, groupId, groupType, buckets); - - } - - /** - * Creates DELETE group operation object. - * - * @param groupId group Identifier - * @param groupType type of the group - * @return delete group operation object - */ - public static GroupOperation createDeleteGroupOperation(GroupId groupId, - GroupDescription.Type groupType) { - return new GroupOperation(Type.DELETE, groupId, groupType, null); - - } - - /** - * Returns group operation type. - * - * @return GroupOpType group operation type - */ - public Type opType() { - return this.opType; - } - - /** - * Returns group identifier attribute of the operation. - * - * @return GroupId group identifier - */ - public GroupId groupId() { - return this.groupId; - } - - /** - * Returns group type attribute of the operation. - * - * @return GroupType group type - */ - public GroupDescription.Type groupType() { - return this.groupType; - } - - /** - * Returns group buckets associated with the operation. - * - * @return GroupBuckets group buckets - */ - public GroupBuckets buckets() { - return this.buckets; - } - - @Override - /* - * The deviceId, type and buckets are used for hash. - * - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public int hashCode() { - return (buckets != null) ? Objects.hash(groupId, opType, buckets) : - Objects.hash(groupId, opType); - } - - @Override - /* - * The deviceId, type and buckets should be same. - * - * (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof GroupOperation) { - GroupOperation that = (GroupOperation) obj; - return Objects.equals(groupId, that.groupId) && - Objects.equals(groupType, that.groupType) && - Objects.equals(opType, that.opType) && - Objects.equals(buckets, that.buckets); - - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupOperations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupOperations.java deleted file mode 100644 index bc03628d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupOperations.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.net.group; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.List; - -import com.google.common.collect.ImmutableList; - -/** - * Immutable collection of group operation to be used between - * core and provider layers of group subsystem. - * - */ -public final class GroupOperations { - private final List<GroupOperation> operations; - - /** - * Creates a immutable list of group operation. - * - * @param operations list of group operation - */ - public GroupOperations(List<GroupOperation> operations) { - this.operations = ImmutableList.copyOf(checkNotNull(operations)); - } - - /** - * Returns immutable list of group operation. - * - * @return list of group operation - */ - public List<GroupOperation> operations() { - return operations; - } - -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProvider.java deleted file mode 100644 index 6757e669..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProvider.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.provider.Provider; - -/** - * Abstraction of group provider. - */ -public interface GroupProvider extends Provider { - - /** - * Performs a batch of group operation in the specified device with the - * specified parameters. - * - * @param deviceId device identifier on which the batch of group - * operations to be executed - * @param groupOps immutable list of group operation - */ - void performGroupOperation(DeviceId deviceId, - GroupOperations groupOps); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProviderRegistry.java deleted file mode 100644 index d45789db..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProviderRegistry.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.net.provider.ProviderRegistry; - -/** - * Abstraction for a group provider registry. - */ -public interface GroupProviderRegistry - extends ProviderRegistry<GroupProvider, GroupProviderService> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProviderService.java deleted file mode 100644 index 076de498..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupProviderService.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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.net.group; - -import java.util.Collection; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.provider.ProviderService; - -/** - * Service through which Group providers can inject information into - * the core. - */ -public interface GroupProviderService extends ProviderService<GroupProvider> { - - /** - * Notifies core if any failure from data plane during group operations. - * - * @param deviceId the device ID - * @param operation offended group operation - */ - void groupOperationFailed(DeviceId deviceId, GroupOperation operation); - - /** - * Pushes the collection of group detected in the data plane along - * with statistics. - * - * @param deviceId device identifier - * @param groupEntries collection of group entries as seen in data plane - */ - void pushGroupMetrics(DeviceId deviceId, - Collection<Group> groupEntries); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupService.java deleted file mode 100644 index 4163248f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupService.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.core.ApplicationId; -import org.onosproject.event.ListenerService; -import org.onosproject.net.DeviceId; - -/** - * Service for create/update/delete "group" in the devices. - * Flow entries can point to a "group" defined in the devices that enables - * to represent additional methods of forwarding like load-balancing or - * failover among different group of ports or multicast to all ports - * specified in a group. - * "group" can also be used for grouping common actions of different flows, - * so that in some scenarios only one group entry required to be modified - * for all the referencing flow entries instead of modifying all of them. - * - * This implements semantics of a distributed authoritative group store - * where the master copy of the groups lies with the controller and - * the devices hold only the 'cached' copy. - */ -public interface GroupService - extends ListenerService<GroupEvent, GroupListener> { - - /** - * Creates a group in the specified device with the provided buckets. - * This API provides an option for application to associate a cookie - * while creating a group, so that applications can look-up the - * groups based on the cookies. These Groups will be retained by - * the core system and re-applied if any groups found missing in the - * device when it reconnects. This API would immediately return after - * submitting the request locally or to a remote Master controller - * instance. As a response to this API invocation, GROUP_ADDED or - * GROUP_ADD_FAILED notifications would be provided along with cookie - * depending on the result of the operation on the device in the - * data plane. The caller may also use "getGroup" API to get the - * Group object created as part of this request. - * - * @param groupDesc group creation parameters - * - */ - void addGroup(GroupDescription groupDesc); - - /** - * Returns a group object associated to an application cookie. - * - * NOTE1: The presence of group object in the system does not - * guarantee that the "group" is actually created in device. - * GROUP_ADDED notification would confirm the creation of - * this group in data plane. - * - * @param deviceId device identifier - * @param appCookie application cookie to be used for lookup - * @return group associated with the application cookie or - * NULL if Group is not found for the provided cookie - */ - Group getGroup(DeviceId deviceId, GroupKey appCookie); - - /** - * Appends buckets to existing group. The caller can optionally - * associate a new cookie during this updation. GROUP_UPDATED or - * GROUP_UPDATE_FAILED notifications would be provided along with - * cookie depending on the result of the operation on the device. - * - * @param deviceId device identifier - * @param oldCookie cookie to be used to retrieve the existing group - * @param buckets immutable list of group bucket to be added - * @param newCookie immutable cookie to be used post update operation - * @param appId Application Id - */ - void addBucketsToGroup(DeviceId deviceId, - GroupKey oldCookie, - GroupBuckets buckets, - GroupKey newCookie, - ApplicationId appId); - - /** - * Removes buckets from existing group. The caller can optionally - * associate a new cookie during this updation. GROUP_UPDATED or - * GROUP_UPDATE_FAILED notifications would be provided along with - * cookie depending on the result of the operation on the device. - * - * @param deviceId device identifier - * @param oldCookie cookie to be used to retrieve the existing group - * @param buckets immutable list of group bucket to be removed - * @param newCookie immutable cookie to be used post update operation - * @param appId Application Id - */ - void removeBucketsFromGroup(DeviceId deviceId, - GroupKey oldCookie, - GroupBuckets buckets, - GroupKey newCookie, - ApplicationId appId); - - /** - * Deletes a group associated to an application cookie. - * GROUP_DELETED or GROUP_DELETE_FAILED notifications would be - * provided along with cookie depending on the result of the - * operation on the device. - * - * @param deviceId device identifier - * @param appCookie application cookie to be used for lookup - * @param appId Application Id - */ - void removeGroup(DeviceId deviceId, GroupKey appCookie, ApplicationId appId); - - /** - * Retrieves all groups created by an application in the specified device - * as seen by current controller instance. - * - * @param deviceId device identifier - * @param appId application id - * @return collection of immutable group objects created by the application - */ - Iterable<Group> getGroups(DeviceId deviceId, ApplicationId appId); - - /** - * Returns all groups associated with the given device. - * - * @param deviceId device ID to get groups for - * @return iterable of device's groups - */ - Iterable<Group> getGroups(DeviceId deviceId); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupStore.java deleted file mode 100644 index 8b6df5d9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupStore.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * 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.net.group; - -import java.util.Collection; - -import org.onosproject.core.GroupId; -import org.onosproject.net.DeviceId; -import org.onosproject.store.Store; - -/** - * Manages inventory of groups per device; not intended for direct use. - */ -public interface GroupStore extends Store<GroupEvent, GroupStoreDelegate> { - - enum UpdateType { - /** - * Modify existing group entry by adding provided information. - */ - ADD, - /** - * Modify existing group by removing provided information from it. - */ - REMOVE - } - - /** - * Returns the number of groups for the specified device in the store. - * - * @param deviceId the device ID - * @return number of groups for the specified device - */ - int getGroupCount(DeviceId deviceId); - - /** - * Returns the groups associated with a device. - * - * @param deviceId the device ID - * @return the group entries - */ - Iterable<Group> getGroups(DeviceId deviceId); - - /** - * Returns the stored group entry. - * - * @param deviceId the device ID - * @param appCookie the group key - * @return a group associated with the key - */ - Group getGroup(DeviceId deviceId, GroupKey appCookie); - - /** - * Returns the stored group entry for an id. - * - * @param deviceId the device ID - * @param groupId the group identifier - * @return a group associated with the key - */ - Group getGroup(DeviceId deviceId, GroupId groupId); - - /** - * Stores a new group entry using the information from group description. - * - * @param groupDesc group description to be used to store group entry - */ - void storeGroupDescription(GroupDescription groupDesc); - - /** - * Updates the existing group entry with the information - * from group description. - * - * @param deviceId the device ID - * @param oldAppCookie the current group key - * @param type update type - * @param newBuckets group buckets for updates - * @param newAppCookie optional new group key - */ - void updateGroupDescription(DeviceId deviceId, - GroupKey oldAppCookie, - UpdateType type, - GroupBuckets newBuckets, - GroupKey newAppCookie); - - /** - * Triggers deleting the existing group entry. - * - * @param deviceId the device ID - * @param appCookie the group key - */ - void deleteGroupDescription(DeviceId deviceId, - GroupKey appCookie); - - /** - * Stores a new group entry, or updates an existing entry. - * - * @param group group entry - */ - void addOrUpdateGroupEntry(Group group); - - /** - * Removes the group entry from store. - * - * @param group group entry - */ - void removeGroupEntry(Group group); - - /** - * A group entry that is present in switch but not in the store. - * - * @param group group entry - */ - void addOrUpdateExtraneousGroupEntry(Group group); - - /** - * Remove the group entry from extraneous database. - * - * @param group group entry - */ - void removeExtraneousGroupEntry(Group group); - - /** - * Returns the extraneous groups associated with a device. - * - * @param deviceId the device ID - * - * @return the extraneous group entries - */ - Iterable<Group> getExtraneousGroups(DeviceId deviceId); - - /** - * Indicates the first group audit is completed. - * - * @param deviceId the device ID - * @param completed initial audit status - */ - void deviceInitialAuditCompleted(DeviceId deviceId, boolean completed); - - /** - * Retrieves the initial group audit status for a device. - * - * @param deviceId the device ID - * - * @return initial group audit status - */ - boolean deviceInitialAuditStatus(DeviceId deviceId); - - /** - * Indicates the group operations failed. - * - * @param deviceId the device ID - * @param operation the group operation failed - */ - void groupOperationFailed(DeviceId deviceId, GroupOperation operation); - - /** - * Submits the group metrics to store for a given device ID. - * - * @param deviceId the device ID - * @param groupEntries the group entries as received from southbound - */ - void pushGroupMetrics(DeviceId deviceId, Collection<Group> groupEntries); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupStoreDelegate.java deleted file mode 100644 index 308ebb1c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/GroupStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.net.group; - -import org.onosproject.store.StoreDelegate; - -/** - * Group store delegate abstraction. - */ -public interface GroupStoreDelegate extends StoreDelegate<GroupEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/StoredGroupBucketEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/StoredGroupBucketEntry.java deleted file mode 100644 index 131875b3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/StoredGroupBucketEntry.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.net.group; - -/** - * Generic group bucket entry representation that is stored in a - * group object. A group bucket entry provides additional info of - * group bucket like statistics...etc - */ -public interface StoredGroupBucketEntry extends GroupBucket { - /** - * Sets number of packets processed by this group bucket entry. - * - * @param packets a long value - */ - void setPackets(long packets); - - /** - * Sets number of bytes processed by this group bucket entry. - * - * @param bytes a long value - */ - void setBytes(long bytes); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/StoredGroupEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/StoredGroupEntry.java deleted file mode 100644 index 47d36122..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/StoredGroupEntry.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.net.group; - -/** - * Interface that defines set methods for a group entry - * that is stored in the system. - */ -public interface StoredGroupEntry extends Group { - - /** - * Sets the new state for this entry. - * - * @param newState new group entry state. - */ - void setState(Group.GroupState newState); - - /** - * Sets if group has transitioned to ADDED state for the first time. - * This is to differentiate state transitions "from PENDING_ADD to ADDED" - * and "from PENDING_UPDATE to ADDED". For internal use only. - * - * @param isGroupAddedFirstTime true if group moves to ADDED state - * for the first time. - */ - void setIsGroupStateAddedFirstTime(boolean isGroupAddedFirstTime); - - /** - * Returns the isGroupStateAddedFirstTime value. For internal use only. - * - * @return isGroupStateAddedFirstTime value - */ - boolean isGroupStateAddedFirstTime(); - - /** - * Sets how long this entry has been entered in the system. - * - * @param life epoch time - */ - void setLife(long life); - - /** - * Sets number of packets processed by this group entry. - * - * @param packets a long value - */ - void setPackets(long packets); - - /** - * Sets number of bytes processed by this group entry. - * - * @param bytes a long value - */ - void setBytes(long bytes); - - /** - * Sets number of flow rules or groups referencing this group entry. - * - * @param referenceCount reference count - */ - void setReferenceCount(long referenceCount); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/package-info.java deleted file mode 100644 index 26528c48..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/group/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/** - * Abstractions for interacting with device port groups. - */ -package org.onosproject.net.group;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/DefaultHostDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/DefaultHostDescription.java deleted file mode 100644 index 307a6078..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/DefaultHostDescription.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import java.util.Collections; -import java.util.Set; - -import org.onosproject.net.AbstractDescription; -import org.onosproject.net.HostLocation; -import org.onosproject.net.SparseAnnotations; -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; - -import com.google.common.collect.ImmutableSet; - -import static com.google.common.base.MoreObjects.toStringHelper; -import com.google.common.base.Objects; - -/** - * Default implementation of an immutable host description. - */ -public class DefaultHostDescription extends AbstractDescription - implements HostDescription { - - private final MacAddress mac; - private final VlanId vlan; - private final HostLocation location; - private final Set<IpAddress> ip; - - /** - * Creates a host description using the supplied information. - * - * @param mac host MAC address - * @param vlan host VLAN identifier - * @param location host location - * @param annotations optional key/value annotations map - */ - public DefaultHostDescription(MacAddress mac, VlanId vlan, - HostLocation location, - SparseAnnotations... annotations) { - this(mac, vlan, location, Collections.<IpAddress>emptySet(), - annotations); - } - - /** - * Creates a host description using the supplied information. - * - * @param mac host MAC address - * @param vlan host VLAN identifier - * @param location host location - * @param ip host IP address - * @param annotations optional key/value annotations map - */ - public DefaultHostDescription(MacAddress mac, VlanId vlan, - HostLocation location, IpAddress ip, - SparseAnnotations... annotations) { - this(mac, vlan, location, ImmutableSet.of(ip), annotations); - } - - /** - * Creates a host description using the supplied information. - * - * @param mac host MAC address - * @param vlan host VLAN identifier - * @param location host location - * @param ip host IP addresses - * @param annotations optional key/value annotations map - */ - public DefaultHostDescription(MacAddress mac, VlanId vlan, - HostLocation location, Set<IpAddress> ip, - SparseAnnotations... annotations) { - super(annotations); - this.mac = mac; - this.vlan = vlan; - this.location = location; - this.ip = ImmutableSet.copyOf(ip); - } - - @Override - public MacAddress hwAddress() { - return mac; - } - - @Override - public VlanId vlan() { - return vlan; - } - - @Override - public HostLocation location() { - return location; - } - - @Override - public Set<IpAddress> ipAddress() { - return ip; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("mac", mac) - .add("vlan", vlan) - .add("location", location) - .add("ipAddress", ip) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hashCode(super.hashCode(), mac, vlan, location, ip); - } - - @Override - public boolean equals(Object object) { - if (object != null && getClass() == object.getClass()) { - if (!super.equals(object)) { - return false; - } - DefaultHostDescription that = (DefaultHostDescription) object; - return Objects.equal(this.mac, that.mac) - && Objects.equal(this.vlan, that.vlan) - && Objects.equal(this.location, that.location) - && Objects.equal(this.ip, that.ip); - } - return false; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostAdminService.java deleted file mode 100644 index 8676e46a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostAdminService.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2014-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.net.host; - -import org.onosproject.net.HostId; - -/** - * Service for administering the inventory of end-station hosts. - */ -public interface HostAdminService extends HostService { - - /** - * Removes the end-station host with the specified identifier. - * - * @param hostId host identifier - */ - void removeHost(HostId hostId); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostDescription.java deleted file mode 100644 index 14c6f7ad..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostDescription.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import java.util.Set; - -import org.onosproject.net.Description; -import org.onosproject.net.HostLocation; -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; - -/** - * Information describing host and its location. - */ -public interface HostDescription extends Description { - - /** - * Returns the MAC address associated with this host (NIC). - * - * @return the MAC address of this host - */ - MacAddress hwAddress(); - - /** - * Returns the VLAN associated with this host. - * - * @return the VLAN ID value - */ - VlanId vlan(); - - /** - * Returns the location of the host on the network edge. - * - * @return the network location - */ - HostLocation location(); - - /** - * Returns the IP address associated with this host's MAC. - * - * @return host IP address - */ - Set<IpAddress> ipAddress(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostEvent.java deleted file mode 100644 index 92824cf8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostEvent.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.joda.time.LocalDateTime; -import org.onosproject.event.AbstractEvent; -import org.onosproject.net.Host; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Describes end-station host event. - */ -public class HostEvent extends AbstractEvent<HostEvent.Type, Host> { - - /** - * Type of host events. - */ - public enum Type { - /** - * Signifies that a new host has been detected. - */ - HOST_ADDED, - - /** - * Signifies that a host has been removed. - */ - HOST_REMOVED, - - /** - * Signifies that host data changed, e.g. IP address - */ - HOST_UPDATED, - - /** - * Signifies that a host location has changed. - */ - HOST_MOVED - } - - private Host prevSubject; - - /** - * Creates an event of a given type and for the specified host and the - * current time. - * - * @param type host event type - * @param host event host subject - */ - public HostEvent(Type type, Host host) { - super(type, host); - } - - /** - * Creates an event of a given type and for the specified host and time. - * - * @param type host event type - * @param host event host subject - * @param time occurrence time - */ - public HostEvent(Type type, Host host, long time) { - super(type, host, time); - } - - /** - * Creates an event with previous subject. - * - * The previous subject is ignored if the type is not moved or updated - * - * @param type host event type - * @param host event host subject - * @param prevSubject previous host subject - */ - public HostEvent(Type type, Host host, Host prevSubject) { - super(type, host); - if (type == Type.HOST_MOVED || type == Type.HOST_UPDATED) { - this.prevSubject = prevSubject; - } - } - - /** - * Gets the previous subject in this host event. - * - * @return the previous subject, or null if previous subject is not - * specified. - */ - public Host prevSubject() { - return this.prevSubject; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("time", new LocalDateTime(time())) - .add("type", type()) - .add("subject", subject()) - .add("prevSubject", prevSubject()) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostListener.java deleted file mode 100644 index 2eef7592..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving end-station host related events. - */ -public interface HostListener extends EventListener<HostEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProvider.java deleted file mode 100644 index 0270996b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProvider.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.onosproject.net.Host; -import org.onosproject.net.provider.Provider; - -/** - * Provider of information about hosts and their location on the network. - */ -public interface HostProvider extends Provider { - - /** - * Triggers an asynchronous probe of the specified host, intended to - * determine whether the host is present or not. An indirect result of this - * should be invocation of {@link org.onosproject.net.host.HostProviderService#hostDetected} - * or {@link org.onosproject.net.host.HostProviderService#hostVanished} - * at some later point in time. - * - * @param host host to probe - */ - void triggerProbe(Host host); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderRegistry.java deleted file mode 100644 index 8ab600c2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderRegistry.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.onosproject.net.provider.ProviderRegistry; - -/** - * Abstraction of a host provider registry. - */ -public interface HostProviderRegistry - extends ProviderRegistry<HostProvider, HostProviderService> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderService.java deleted file mode 100644 index 3403486c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostProviderService.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.onlab.packet.IpAddress; -import org.onosproject.net.HostId; -import org.onosproject.net.provider.ProviderService; - -/** - * Means of conveying host information to the core. - */ -public interface HostProviderService extends ProviderService<HostProvider> { - - /** - * Notifies the core when a host has been detected on a network along with - * information that identifies the host location. - * - * @param hostId id of the host that been detected - * @param hostDescription description of host and its location - * @deprecated in Drake release - */ - @Deprecated - default void hostDetected(HostId hostId, HostDescription hostDescription) { - hostDetected(hostId, hostDescription, false); - } - - /** - * Notifies the core when a host has been detected on a network along with - * information that identifies the host location. - * - * @param hostId id of the host that been detected - * @param hostDescription description of host and its location - * @param replaceIps replace IP set if true, merge IP set otherwise - */ - void hostDetected(HostId hostId, HostDescription hostDescription, boolean replaceIps); - - /** - * Notifies the core when a host is no longer detected on a network. - * - * @param hostId id of the host that vanished - */ - void hostVanished(HostId hostId); - - /** - * Notifies the core when an IP is no longer associated with a host. - * - * @param hostId id of the host - * @param ipAddress ip address of host that vanished - */ - void removeIpFromHost(HostId hostId, IpAddress ipAddress); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostService.java deleted file mode 100644 index 39012159..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostService.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; -import org.onosproject.event.ListenerService; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Host; -import org.onosproject.net.HostId; - -import java.util.Set; - -/** - * Service for interacting with the inventory of end-station hosts. - */ -public interface HostService - extends ListenerService<HostEvent, HostListener> { - - /** - * Returns the number of end-station hosts known to the system. - * - * @return number of end-station hosts - */ - int getHostCount(); - - /** - * Returns a collection of all end-station hosts. - * - * @return collection of hosts - */ - Iterable<Host> getHosts(); - - /** - * Returns the host with the specified identifier. - * - * @param hostId host identifier - * @return host or null if one with the given identifier is not known - */ - Host getHost(HostId hostId); - - /** - * Returns the set of hosts that belong to the specified VLAN. - * - * @param vlanId vlan identifier - * @return set of hosts in the given vlan id - */ - Set<Host> getHostsByVlan(VlanId vlanId); - - /** - * Returns the set of hosts that have the specified MAC address. - * - * @param mac mac address - * @return set of hosts with the given mac - */ - Set<Host> getHostsByMac(MacAddress mac); - - /** - * Returns the set of hosts that have the specified IP address. - * - * @param ip ip address - * @return set of hosts with the given IP - */ - Set<Host> getHostsByIp(IpAddress ip); - - // TODO: consider adding Host getHostByIp(IpAddress ip, VlanId vlan); - - /** - * Returns the set of hosts whose most recent location is the specified - * connection point. - * - * @param connectPoint connection point - * @return set of hosts connected to the connection point - */ - Set<Host> getConnectedHosts(ConnectPoint connectPoint); - - /** - * Returns the set of hosts whose most recent location is the specified - * infrastructure device. - * - * @param deviceId device identifier - * @return set of hosts connected to the device - */ - Set<Host> getConnectedHosts(DeviceId deviceId); - - /** - * Requests the host service to monitor hosts with the given IP address and - * notify listeners of changes. - * - * @param ip IP address of the host to monitor - */ - void startMonitoringIp(IpAddress ip); - - /** - * Stops the host service from monitoring an IP address. - * - * @param ip IP address to stop monitoring - */ - // TODO clients can cancel other client's requests - void stopMonitoringIp(IpAddress ip); - - /** - * Requests the host service to resolve the MAC address for the given IP - * address. This will trigger a notification to the host listeners if the MAC - * address is found. - * - * @param ip IP address to find the MAC address for - */ - void requestMac(IpAddress ip); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStore.java deleted file mode 100644 index 918ced45..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStore.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.onlab.packet.IpAddress; -import org.onlab.packet.MacAddress; -import org.onlab.packet.VlanId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Host; -import org.onosproject.net.HostId; -import org.onosproject.net.provider.ProviderId; -import org.onosproject.store.Store; - -import java.util.Set; - -/** - * Manages inventory of end-station hosts; not intended for direct use. - */ -public interface HostStore extends Store<HostEvent, HostStoreDelegate> { - - /** - * Creates a new host or updates the existing one based on the specified - * description. - * - * @param providerId provider identification - * @param hostId host identification - * @param hostDescription host description data - * @param replaceIps replace IP set if true, merge IP set otherwise - * @return appropriate event or null if no change resulted - */ - HostEvent createOrUpdateHost(ProviderId providerId, HostId hostId, - HostDescription hostDescription, - boolean replaceIps); - - /** - * Removes the specified host from the inventory. - * - * @param hostId host identification - * @return remove event or null if host was not found - */ - HostEvent removeHost(HostId hostId); - - /** - * Removes the specified ip from the host entry. - * - * @param hostId host identification - * @param ipAddress ipAddress to be removed - * @return remove event or null if host was not found - */ - HostEvent removeIp(HostId hostId, IpAddress ipAddress); - - /** - * Returns the number of hosts in the store. - * - * @return host count - */ - int getHostCount(); - - /** - * Returns a collection of all hosts in the store. - * - * @return iterable collection of all hosts - */ - Iterable<Host> getHosts(); - - /** - * Returns the host with the specified identifer. - * - * @param hostId host identification - * @return host or null if not found - */ - Host getHost(HostId hostId); - - /** - * Returns the set of all hosts within the specified VLAN. - * - * @param vlanId vlan id - * @return set of hosts in the vlan - */ - Set<Host> getHosts(VlanId vlanId); - - /** - * Returns the set of hosts with the specified MAC address. - * - * @param mac mac address - * @return set of hosts with the given mac - */ - Set<Host> getHosts(MacAddress mac); - - /** - * Returns the set of hosts with the specified IP address. - * - * @param ip ip address - * @return set of hosts with the given IP - */ - Set<Host> getHosts(IpAddress ip); - - /** - * Returns the set of hosts whose location falls on the given connection point. - * - * @param connectPoint connection point - * @return set of hosts - */ - Set<Host> getConnectedHosts(ConnectPoint connectPoint); - - /** - * Returns the set of hosts whose location falls on the given device. - * - * @param deviceId infrastructure device identifier - * @return set of hosts - */ - Set<Host> getConnectedHosts(DeviceId deviceId); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStoreDelegate.java deleted file mode 100644 index efc84232..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/HostStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.onosproject.store.StoreDelegate; - -/** - * Infrastructure link store delegate abstraction. - */ -public interface HostStoreDelegate extends StoreDelegate<HostEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/InterfaceIpAddress.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/InterfaceIpAddress.java deleted file mode 100644 index 2f53df50..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/InterfaceIpAddress.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright 2014 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.net.host; - -import org.onlab.packet.IpAddress; -import org.onlab.packet.IpPrefix; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Represents a single IP address information on an interface. - * - * TODO: - * - Add computation for the default broadcast address if it is not - * specified - * - Add explicit checks that each IP address or prefix belong to the - * same IP version: IPv4/IPv6. - * - Inside the copy constructor we should use copy constructors for each - * field - */ -public class InterfaceIpAddress { - private final IpAddress ipAddress; - private final IpPrefix subnetAddress; - private final IpAddress broadcastAddress; - private final IpAddress peerAddress; - - /** - * Copy constructor. - * - * @param other the object to copy from - */ - public InterfaceIpAddress(InterfaceIpAddress other) { - // TODO: we should use copy constructors for each field - this.ipAddress = other.ipAddress; - this.subnetAddress = other.subnetAddress; - this.broadcastAddress = other.broadcastAddress; - this.peerAddress = other.peerAddress; - } - - /** - * Constructor for a given IP address and a subnet address. - * - * @param ipAddress the IP address - * @param subnetAddress the IP subnet address - */ - public InterfaceIpAddress(IpAddress ipAddress, IpPrefix subnetAddress) { - this.ipAddress = checkNotNull(ipAddress); - this.subnetAddress = checkNotNull(subnetAddress); - // TODO: Recompute the default broadcast address from the subnet - // address - this.broadcastAddress = null; - this.peerAddress = null; - } - - /** - * Constructor for a given IP address and a subnet address. - * - * @param ipAddress the IP address - * @param subnetAddress the IP subnet address - * @param broadcastAddress the IP broadcast address. It can be used - * to specify non-default broadcast address - */ - public InterfaceIpAddress(IpAddress ipAddress, IpPrefix subnetAddress, - IpAddress broadcastAddress) { - this.ipAddress = checkNotNull(ipAddress); - this.subnetAddress = checkNotNull(subnetAddress); - this.broadcastAddress = broadcastAddress; - this.peerAddress = null; - } - - /** - * Constructor for a given IP address and a subnet address. - * - * @param ipAddress the IP address - * @param subnetAddress the IP subnet address - * @param broadcastAddress the IP broadcast address. It can be used - * to specify non-default broadcast address. It should be null for - * point-to-point interfaces with a peer address - * @param peerAddress the peer IP address for point-to-point interfaces - */ - public InterfaceIpAddress(IpAddress ipAddress, IpPrefix subnetAddress, - IpAddress broadcastAddress, - IpAddress peerAddress) { - this.ipAddress = checkNotNull(ipAddress); - this.subnetAddress = checkNotNull(subnetAddress); - this.broadcastAddress = broadcastAddress; - this.peerAddress = peerAddress; - } - - /** - * Gets the IP address. - * - * @return the IP address - */ - public IpAddress ipAddress() { - return ipAddress; - } - - /** - * Gets the IP subnet address. - * - * @return the IP subnet address - */ - public IpPrefix subnetAddress() { - return subnetAddress; - } - - /** - * Gets the subnet IP broadcast address. - * - * @return the subnet IP broadcast address - */ - public IpAddress broadcastAddress() { - return broadcastAddress; - } - - /** - * Gets the IP point-to-point interface peer address. - * - * @return the IP point-to-point interface peer address - */ - public IpAddress peerAddress() { - return peerAddress; - } - - /** - * Converts a CIDR string literal to an interface IP address. - * E.g. 10.0.0.1/24 - * - * @param value an IP address value in string form - * @return an interface IP address - * @throws IllegalArgumentException if the argument is invalid - */ - public static InterfaceIpAddress valueOf(String value) { - String[] splits = value.split("/"); - checkArgument(splits.length == 2, "Invalid IP address and prefix length format"); - - // NOTE: IpPrefix will mask-out the bits after the prefix length. - IpPrefix subnet = IpPrefix.valueOf(value); - IpAddress addr = IpAddress.valueOf(splits[0]); - return new InterfaceIpAddress(addr, subnet); - } - - @Override - public boolean equals(Object other) { - if (other == this) { - return true; - } - if (!(other instanceof InterfaceIpAddress)) { - return false; - } - InterfaceIpAddress otherAddr = (InterfaceIpAddress) other; - - return Objects.equals(this.ipAddress, otherAddr.ipAddress) - && Objects.equals(this.subnetAddress, otherAddr.subnetAddress) - && Objects.equals(this.broadcastAddress, - otherAddr.broadcastAddress) - && Objects.equals(this.peerAddress, otherAddr.peerAddress); - } - - @Override - public int hashCode() { - return Objects.hash(ipAddress, subnetAddress, broadcastAddress, - peerAddress); - } - - @Override - public String toString() { - /*return toStringHelper(this).add("ipAddress", ipAddress) - .add("subnetAddress", subnetAddress) - .add("broadcastAddress", broadcastAddress) - .add("peerAddress", peerAddress) - .omitNullValues().toString();*/ - return ipAddress.toString() + "/" + subnetAddress.prefixLength(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/package-info.java deleted file mode 100644 index 4f2bc7c4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/host/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * End-station host model & related services API definitions. - */ -package org.onosproject.net.host; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/ConnectivityIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/ConnectivityIntent.java deleted file mode 100644 index 7caee3e8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/ConnectivityIntent.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.Link; -import org.onosproject.net.NetworkResource; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of connectivity intent for traffic matching some criteria. - */ -@Beta -public abstract class ConnectivityIntent extends Intent { - - // TODO: other forms of intents should be considered for this family: - // point-to-point with constraints (waypoints/obstacles) - // multi-to-single point with constraints (waypoints/obstacles) - // single-to-multi point with constraints (waypoints/obstacles) - // concrete path (with alternate) - // ... - - private final TrafficSelector selector; - private final TrafficTreatment treatment; - private final List<Constraint> constraints; - - /** - * Creates a connectivity intent that matches on the specified selector - * and applies the specified treatment. - * <p> - * Path will be optimized based on the first constraint if one is given. - * </p> - * - * @param appId application identifier - * @param key explicit key to use for intent - * @param resources required network resources (optional) - * @param selector traffic selector - * @param treatment treatment - * @param constraints optional prioritized list of constraints - * @param priority priority to use for flows generated by this intent - * @throws NullPointerException if the selector or treatment is null - */ - protected ConnectivityIntent(ApplicationId appId, - Key key, - Collection<NetworkResource> resources, - TrafficSelector selector, - TrafficTreatment treatment, - List<Constraint> constraints, - int priority) { - super(appId, key, resources, priority); - this.selector = checkNotNull(selector); - this.treatment = checkNotNull(treatment); - this.constraints = checkNotNull(constraints); - } - - /** - * Constructor for serializer. - */ - protected ConnectivityIntent() { - super(); - this.selector = null; - this.treatment = null; - this.constraints = Collections.emptyList(); - } - - /** - * Abstract builder for connectivity intents. - */ - public abstract static class Builder extends Intent.Builder { - protected TrafficSelector selector = DefaultTrafficSelector.emptySelector(); - protected TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment(); - protected List<Constraint> constraints = ImmutableList.of(); - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - - /** - * Sets the traffic selector for the intent that will be built. - * - * @param selector selector to use for built intent - * @return this builder - */ - public Builder selector(TrafficSelector selector) { - this.selector = selector; - return this; - } - - /** - * Sets the traffic treatment for the intent that will be built. - * - * @param treatment treatment to use for built intent - * @return this builder - */ - public Builder treatment(TrafficTreatment treatment) { - this.treatment = treatment; - return this; - } - - /** - * Sets the constraints for the intent that will be built. - * - * @param constraints constraints to use for built intent - * @return this builder - */ - public Builder constraints(List<Constraint> constraints) { - this.constraints = ImmutableList.copyOf(constraints); - return this; - } - } - - - /** - * Returns the match specifying the type of traffic. - * - * @return traffic match - */ - public TrafficSelector selector() { - return selector; - } - - /** - * Returns the action applied to the traffic. - * - * @return applied action - */ - public TrafficTreatment treatment() { - return treatment; - } - - /** - * Returns the set of connectivity constraints. - * - * @return list of intent constraints - */ - public List<Constraint> constraints() { - return constraints; - } - - /** - * Produces a collection of network resources from the given links. - * - * @param links collection of links - * @return collection of link resources - */ - protected static Collection<NetworkResource> resources(Collection<Link> links) { - return ImmutableSet.copyOf(links); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Constraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Constraint.java deleted file mode 100644 index 03acf17c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Constraint.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2014 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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.resource.link.LinkResourceService; - -/** - * Representation of a connectivity constraint capable of evaluating a link - * and determining the cost of traversing that link in the context of this - * constraint. - */ -@Beta -public interface Constraint { - - // TODO: Consider separating cost vs viability. - - /** - * Evaluates the specified link and provides the cost for its traversal. - * - * @param link link to be evaluated - * @param resourceService resource service for validating availability of - * link resources - * @return cost of link traversal - */ - double cost(Link link, LinkResourceService resourceService); - - /** - * Validates that the specified path satisfies the constraint. - * - * @param path path to be validated - * @param resourceService resource service for validating availability of - * link resources - * @return cost of link traversal - */ - boolean validate(Path path, LinkResourceService resourceService); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/FlowRuleIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/FlowRuleIntent.java deleted file mode 100644 index 2a2d7c78..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/FlowRuleIntent.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.NetworkResource; -import org.onosproject.net.flow.FlowRule; - -import java.util.Collection; -import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * An intent that enables to tell flow level operation. - * This instance holds a collection of flow rules that may be executed in parallel. - */ -@Beta -public class FlowRuleIntent extends Intent { - - private final Collection<FlowRule> flowRules; - - /** - * Creates a flow rule intent with the specified flow rules and resources. - * - * @param appId application id - * @param flowRules flow rules to be set - * @param resources network resource to be set - */ - public FlowRuleIntent(ApplicationId appId, List<FlowRule> flowRules, Collection<NetworkResource> resources) { - this(appId, null, flowRules, resources); - } - - /** - * Creates an flow rule intent with the specified key, flow rules to be set, and - * required network resources. - * - * @param appId application id - * @param key key - * @param flowRules flow rules - * @param resources network resources - */ - public FlowRuleIntent(ApplicationId appId, Key key, Collection<FlowRule> flowRules, - Collection<NetworkResource> resources) { - super(appId, key, resources, DEFAULT_INTENT_PRIORITY); - this.flowRules = ImmutableList.copyOf(checkNotNull(flowRules)); - } - - /** - * Constructor for serializer. - */ - protected FlowRuleIntent() { - super(); - this.flowRules = null; - } - - /** - * Returns a collection of flow rules to be set. - * - * @return a collection of flow rules - */ - public Collection<FlowRule> flowRules() { - return flowRules; - } - - @Override - public boolean isInstallable() { - return true; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("resources", resources()) - .add("flowRule", flowRules) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java deleted file mode 100644 index 306597b3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/HostToHostIntent.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.HostId; -import org.onosproject.net.Link; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.intent.constraint.LinkTypeConstraint; - -import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of end-station to end-station bidirectional connectivity. - */ -@Beta -public final class HostToHostIntent extends ConnectivityIntent { - - static final LinkTypeConstraint NOT_OPTICAL = new LinkTypeConstraint(false, Link.Type.OPTICAL); - - private final HostId one; - private final HostId two; - - /** - * Returns a new host to host intent builder. - * - * @return host to host intent builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of a host to host intent. - */ - public static final class Builder extends ConnectivityIntent.Builder { - HostId one; - HostId two; - - private Builder() { - // Hide constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the first host of the intent that will be built. - * - * @param one first host - * @return this builder - */ - public Builder one(HostId one) { - this.one = one; - return this; - } - - /** - * Sets the second host of the intent that will be built. - * - * @param two second host - * @return this builder - */ - public Builder two(HostId two) { - this.two = two; - return this; - } - - - - /** - * Builds a host to host intent from the accumulated parameters. - * - * @return point to point intent - */ - public HostToHostIntent build() { - - List<Constraint> theConstraints = constraints; - // If not-OPTICAL constraint hasn't been specified, add them - if (!constraints.contains(NOT_OPTICAL)) { - theConstraints = ImmutableList.<Constraint>builder() - .add(NOT_OPTICAL) - .addAll(constraints) - .build(); - } - - return new HostToHostIntent( - appId, - key, - one, - two, - selector, - treatment, - theConstraints, - priority - ); - } - } - - - /** - * Creates a new host-to-host intent with the supplied host pair. - * - * @param appId application identifier - * @param key intent key - * @param one first host - * @param two second host - * @param selector action - * @param treatment ingress port - * @param constraints optional prioritized list of path selection constraints - * @param priority priority to use for flows generated by this intent - * @throws NullPointerException if {@code one} or {@code two} is null. - */ - private HostToHostIntent(ApplicationId appId, Key key, - HostId one, HostId two, - TrafficSelector selector, - TrafficTreatment treatment, - List<Constraint> constraints, - int priority) { - super(appId, key, ImmutableSet.of(one, two), selector, treatment, - constraints, priority); - - // TODO: consider whether the case one and two are same is allowed - this.one = checkNotNull(one); - this.two = checkNotNull(two); - - } - - /** - * Returns identifier of the first host. - * - * @return first host identifier - */ - public HostId one() { - return one; - } - - /** - * Returns identifier of the second host. - * - * @return second host identifier - */ - public HostId two() { - return two; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("selector", selector()) - .add("treatment", treatment()) - .add("constraints", constraints()) - .add("one", one) - .add("two", two) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Intent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Intent.java deleted file mode 100644 index 077fd895..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Intent.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import java.util.Collection; -import java.util.Objects; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.core.IdGenerator; -import org.onosproject.net.NetworkResource; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -/** - * Abstraction of an application level intent. - * <p> - * Make sure that an Intent should be immutable when a new type is defined. - * </p> - */ -@Beta -public abstract class Intent { - - private final IntentId id; - - private final ApplicationId appId; - private final Key key; - - private final int priority; - public static final int DEFAULT_INTENT_PRIORITY = 100; - public static final int MAX_PRIORITY = (1 << 16) - 1; - public static final int MIN_PRIORITY = 1; - - private final Collection<NetworkResource> resources; - - private static IdGenerator idGenerator; - - /** - * Constructor for serializer. - */ - protected Intent() { - this.id = null; - this.appId = null; - this.key = null; - this.resources = null; - this.priority = DEFAULT_INTENT_PRIORITY; - } - - /** - * Creates a new intent. - * - * @param appId application identifier - * @param key optional key - * @param resources required network resources (optional) - * @param priority flow rule priority - */ - protected Intent(ApplicationId appId, - Key key, - Collection<NetworkResource> resources, - int priority) { - checkState(idGenerator != null, "Id generator is not bound."); - checkArgument(priority <= MAX_PRIORITY && priority >= MIN_PRIORITY); - this.id = IntentId.valueOf(idGenerator.getNewId()); - this.appId = checkNotNull(appId, "Application ID cannot be null"); - this.key = (key != null) ? key : Key.of(id.fingerprint(), appId); - this.priority = priority; - this.resources = checkNotNull(resources); - } - - /** - * Abstract builder for intents. - */ - public abstract static class Builder { - protected ApplicationId appId; - protected Key key; - protected int priority = Intent.DEFAULT_INTENT_PRIORITY; - - /** - * Sets the application id for the intent that will be built. - * - * @param appId application id to use for built intent - * @return this builder - */ - public Builder appId(ApplicationId appId) { - this.appId = appId; - return this; - } - - /** - * Sets the key for the intent that will be built. - * - * @param key key to use for built intent - * @return this builder - */ - public Builder key(Key key) { - this.key = key; - return this; - } - - /** - * Sets the priority for the intent that will be built. - * - * @param priority priority to use for built intent - * @return this builder - */ - public Builder priority(int priority) { - this.priority = priority; - return this; - } - - } - - /** - * Returns the intent identifier. - * - * @return intent fingerprint - */ - public IntentId id() { - return id; - } - - /** - * Returns the identifier of the application that requested the intent. - * - * @return application identifier - */ - public ApplicationId appId() { - return appId; - } - - /** - * Returns the priority of the intent. - * - * @return intent priority - */ - public int priority() { - return priority; - } - - /** - * Returns the collection of resources required for this intent. - * - * @return collection of resources; may be null - */ - public Collection<NetworkResource> resources() { - return resources; - } - - /** - * Indicates whether or not the intent is installable. - * - * @return true if installable - */ - public boolean isInstallable() { - return false; - } - - @Override - public final int hashCode() { - return id.hashCode(); - } - - @Override - public final boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final Intent other = (Intent) obj; - return this.id().equals(other.id()); - } - - /** - * Binds an id generator for unique intent id generation. - * - * Note: A generator cannot be bound if there is already a generator bound. - * - * @param newIdGenerator id generator - */ - public static void bindIdGenerator(IdGenerator newIdGenerator) { - checkState(idGenerator == null, "Id generator is already bound."); - idGenerator = checkNotNull(newIdGenerator); - } - - /** - * Unbinds an id generator. - * - * Note: The caller must provide the old id generator to succeed. - * - * @param oldIdGenerator the current id generator - */ - public static void unbindIdGenerator(IdGenerator oldIdGenerator) { - if (Objects.equals(idGenerator, oldIdGenerator)) { - idGenerator = null; - } - } - - public Key key() { - return key; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentBatchDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentBatchDelegate.java deleted file mode 100644 index e4babfb1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentBatchDelegate.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; - -import java.util.Collection; - -/** - * Facade for receiving notifications from the intent batch service. - */ -@Beta -public interface IntentBatchDelegate { - - /** - * Submits the specified batch of intent operations for processing. - * - * @param operations batch of operations - */ - void execute(Collection<IntentData> operations); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentClockService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentClockService.java deleted file mode 100644 index d0dbacf8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentClockService.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.store.Timestamp; - -/** - * Logical clock service that issues per-intent timestamps. - */ -@Beta -public interface IntentClockService { - - /** - * Returns a new timestamp for the specified intent. - * - * @param intentId identifier for the intent. - * @return timestamp - */ - Timestamp getTimestamp(IntentId intentId); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentCompiler.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentCompiler.java deleted file mode 100644 index 9a059be8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentCompiler.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2014 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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.net.resource.link.LinkResourceAllocations; - -import java.util.List; -import java.util.Set; - -/** - * Abstraction of a compiler which is capable of taking an intent - * and translating it to other, potentially installable, intents. - * - * @param <T> the type of intent - */ -@Beta -public interface IntentCompiler<T extends Intent> { - /** - * Compiles the specified intent into other intents. - * - * @param intent intent to be compiled - * @param installable previously compilation result; optional - * @param resources previously allocated resources; optional - * @return list of resulting intents - * @throws IntentException if issues are encountered while compiling the intent - */ - List<Intent> compile(T intent, List<Intent> installable, - Set<LinkResourceAllocations> resources); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentData.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentData.java deleted file mode 100644 index e24e14e0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentData.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * 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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; -import org.onosproject.cluster.NodeId; -import org.onosproject.store.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.onosproject.net.intent.IntentState.*; - -/** - * A wrapper class that contains an intents, its state, and other metadata for - * internal use. - */ -@Beta -public class IntentData { //FIXME need to make this "immutable" - // manager should be able to mutate a local copy while processing - - private static final Logger log = LoggerFactory.getLogger(IntentData.class); - - private final Intent intent; - - private final IntentState request; //TODO perhaps we want a full fledged object for requests - private IntentState state; - private Timestamp version; - private NodeId origin; - private int errorCount; - - private List<Intent> installables; - - /** - * Creates a new intent data object. - * - * @param intent intent this metadata references - * @param state intent state - * @param version version of the intent for this key - */ - public IntentData(Intent intent, IntentState state, Timestamp version) { - this.intent = intent; - this.state = state; - this.request = state; - this.version = version; - } - - /** - * Copy constructor. - * - * @param intentData intent data to copy - */ - public IntentData(IntentData intentData) { - checkNotNull(intentData); - - intent = intentData.intent; - state = intentData.state; - request = intentData.request; - version = intentData.version; - origin = intentData.origin; - installables = intentData.installables; - errorCount = intentData.errorCount; - } - - // kryo constructor - protected IntentData() { - intent = null; - request = null; - } - - /** - * Returns the intent this metadata references. - * - * @return intent - */ - public Intent intent() { - return intent; - } - - /** - * Returns the state of the intent. - * - * @return intent state - */ - public IntentState state() { - return state; - } - - public IntentState request() { - return request; - } - - /** - * Returns the intent key. - * - * @return intent key - */ - public Key key() { - return intent.key(); - } - - /** - * Returns the version of the intent for this key. - * - * @return intent version - */ - public Timestamp version() { - return version; - } - - /** - * Sets the origin, which is the node that created the intent. - * - * @param origin origin instance - */ - public void setOrigin(NodeId origin) { - this.origin = origin; - } - - /** - * Returns the origin node that created this intent. - * - * @return origin node ID - */ - public NodeId origin() { - return origin; - } - - /** - * Updates the state of the intent to the given new state. - * - * @param newState new state of the intent - */ - public void setState(IntentState newState) { - this.state = newState; - } - - /** - * Sets the version for this intent data. - * <p> - * The store should call this method only once when the IntentData is - * first passed into the pending map. Ideally, an IntentData is timestamped - * on the same thread that the called used to submit the intents. - * </p> - * - * @param version the version/timestamp for this intent data - */ - public void setVersion(Timestamp version) { - this.version = version; - } - - /** - * Increments the error count for this intent. - */ - public void incrementErrorCount() { - errorCount++; - } - - /** - * Sets the error count for this intent. - * - * @param newCount new count - */ - public void setErrorCount(int newCount) { - errorCount = newCount; - } - - /** - * Returns the number of times that this intent has encountered an error - * during installation or withdrawal. - * - * @return error count - */ - public int errorCount() { - return errorCount; - } - - /** - * Sets the intent installables to the given list of intents. - * - * @param installables list of installables for this intent - */ - public void setInstallables(List<Intent> installables) { - this.installables = ImmutableList.copyOf(installables); - } - - /** - * Returns the installables associated with this intent. - * - * @return list of installable intents - */ - public List<Intent> installables() { - return installables != null ? installables : Collections.emptyList(); - } - - /** - * Determines whether an intent data update is allowed. The update must - * either have a higher version than the current data, or the state - * transition between two updates of the same version must be sane. - * - * @param currentData existing intent data in the store - * @param newData new intent data update proposal - * @return true if we can apply the update, otherwise false - */ - public static boolean isUpdateAcceptable(IntentData currentData, IntentData newData) { - - if (currentData == null) { - return true; - } else if (currentData.version().isOlderThan(newData.version())) { - return true; - } else if (currentData.version().isNewerThan(newData.version())) { - return false; - } - - // current and new data versions are the same - IntentState currentState = currentData.state(); - IntentState newState = newData.state(); - - switch (newState) { - case INSTALLING: - if (currentState == INSTALLING) { - return false; - } - // FALLTHROUGH - case INSTALLED: - if (currentState == INSTALLED) { - return false; - } else if (currentState == WITHDRAWING || currentState == WITHDRAWN - || currentState == PURGE_REQ) { - log.warn("Invalid state transition from {} to {} for intent {}", - currentState, newState, newData.key()); - return false; - } - return true; - - case WITHDRAWING: - if (currentState == WITHDRAWING) { - return false; - } - // FALLTHROUGH - case WITHDRAWN: - if (currentState == WITHDRAWN) { - return false; - } else if (currentState == INSTALLING || currentState == INSTALLED - || currentState == PURGE_REQ) { - log.warn("Invalid state transition from {} to {} for intent {}", - currentState, newState, newData.key()); - return false; - } - return true; - - case FAILED: - if (currentState == FAILED) { - return false; - } - return true; - - case CORRUPT: - if (currentState == CORRUPT) { - return false; - } - return true; - - case PURGE_REQ: - // TODO we should enforce that only WITHDRAWN intents can be purged - return true; - - case COMPILING: - case RECOMPILING: - case INSTALL_REQ: - case WITHDRAW_REQ: - default: - log.warn("Invalid state {} for intent {}", newState, newData.key()); - return false; - } - } - - @Override - public int hashCode() { - return Objects.hash(intent, version); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final IntentData other = (IntentData) obj; - return Objects.equals(this.intent, other.intent) - && Objects.equals(this.version, other.version); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("key", key()) - .add("state", state()) - .add("version", version()) - .add("intent", intent()) - .add("origin", origin()) - .add("installables", installables()) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentEvent.java deleted file mode 100644 index b27a5074..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentEvent.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.event.AbstractEvent; - -/** - * A class to represent an intent related event. - */ -@Beta -public class IntentEvent extends AbstractEvent<IntentEvent.Type, Intent> { - - public enum Type { - /** - * Signifies that an intent is to be installed or reinstalled. - */ - INSTALL_REQ, - - /** - * Signifies that an intent has been successfully installed. - */ - INSTALLED, - - /** - * Signifies that an intent has failed compilation and that it cannot - * be satisfied by the network at this time. - */ - FAILED, - - /** - * Signifies that an intent will be withdrawn. - */ - WITHDRAW_REQ, - - /** - * Signifies that an intent has been withdrawn from the system. - */ - WITHDRAWN, - - /** - * Signifies that an intent has failed installation or withdrawal, but - * still hold some or all of its resources. - * (e.g. link reservations, flow rules on the data plane, etc.) - */ - CORRUPT, - - /** - * Signifies that an intent has been purged from the system. - */ - PURGED - } - - /** - * Creates an event of a given type and for the specified intent and the - * current time. - * - * @param type event type - * @param intent subject intent - * @param time time the event created in milliseconds since start of epoch - */ - public IntentEvent(Type type, Intent intent, long time) { - super(type, intent, time); - } - - /** - * Creates an event of a given type and for the specified intent and the - * current time. - * - * @param type event type - * @param intent subject intent - */ - public IntentEvent(Type type, Intent intent) { - super(type, intent); - } - - /** - * Creates an IntentEvent based on the state contained in the given intent - * data. Some states are not sent as external events, and these states will - * return null events. - * - * @param data the intent data to create an event for - * @return new intent event if the state is valid, otherwise null. - */ - public static IntentEvent getEvent(IntentData data) { - return getEvent(data.state(), data.intent()); - } - - /** - * Creates an IntentEvent based on the given state and intent. Some states - * are not sent as external events, and these states will return null events. - * - * @param state new state of the intent - * @param intent intent to put in event - * @return new intent event if the state is valid, otherwise null. - */ - public static IntentEvent getEvent(IntentState state, Intent intent) { - Type type; - switch (state) { - case INSTALL_REQ: - type = Type.INSTALL_REQ; - break; - case INSTALLED: - type = Type.INSTALLED; - break; - case WITHDRAW_REQ: - type = Type.WITHDRAW_REQ; - break; - case WITHDRAWN: - type = Type.WITHDRAWN; - break; - case FAILED: - type = Type.FAILED; - break; - case CORRUPT: - type = Type.CORRUPT; - break; - case PURGE_REQ: - type = Type.PURGED; - break; - - // fallthrough to default from here - case COMPILING: - case INSTALLING: - case RECOMPILING: - case WITHDRAWING: - default: - return null; - } - return new IntentEvent(type, intent); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentException.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentException.java deleted file mode 100644 index 3ac1df50..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentException.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2014 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.net.intent; - -import com.google.common.annotations.Beta; - -/** - * Represents an intent related error. - */ -@Beta -public class IntentException extends RuntimeException { - - private static final long serialVersionUID = 1907263634145241319L; - - /** - * Constructs an exception with no message and no underlying cause. - */ - public IntentException() { - } - - /** - * Constructs an exception with the specified message. - * - * @param message the message describing the specific nature of the error - */ - public IntentException(String message) { - super(message); - } - - /** - * Constructs an exception with the specified message and the underlying cause. - * - * @param message the message describing the specific nature of the error - * @param cause the underlying cause of this error - */ - public IntentException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentExtensionService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentExtensionService.java deleted file mode 100644 index d7c7c641..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentExtensionService.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; - -import java.util.Map; - -/** - * Service for extending the capability of intent framework by - * adding additional compilers or/and installers. - */ -@Beta -public interface IntentExtensionService { - /** - * Registers the specified compiler for the given intent class. - * - * @param cls intent class - * @param compiler intent compiler - * @param <T> the type of intent - */ - <T extends Intent> void registerCompiler(Class<T> cls, IntentCompiler<T> compiler); - - /** - * Unregisters the compiler for the specified intent class. - * - * @param cls intent class - * @param <T> the type of intent - */ - <T extends Intent> void unregisterCompiler(Class<T> cls); - - /** - * Returns immutable set of bindings of currently registered intent compilers. - * - * @return the set of compiler bindings - */ - Map<Class<? extends Intent>, IntentCompiler<? extends Intent>> getCompilers(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentId.java deleted file mode 100644 index b9a30d2d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentId.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.net.newresource.ResourceConsumer; - -/** - * Intent identifier suitable as an external key. - * <p>This class is immutable.</p> - */ -@Beta -public final class IntentId implements ResourceConsumer { - - private final long value; - - /** - * Creates an intent identifier from the specified long representation. - * - * @param value long value - * @return intent identifier - */ - public static IntentId valueOf(long value) { - return new IntentId(value); - } - - /** - * Constructor for serializer. - */ - IntentId() { - this.value = 0; - } - - /** - * Constructs the ID corresponding to a given long value. - * - * @param value the underlying value of this ID - */ - IntentId(long value) { - this.value = value; - } - - /** - * Returns the backing value. - * - * @return the value - */ - public long fingerprint() { - return value; - } - - @Override - public int hashCode() { - return Long.hashCode(value); - } - - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof IntentId)) { - return false; - } - IntentId that = (IntentId) obj; - return this.value == that.value; - } - - @Override - public String toString() { - return "0x" + Long.toHexString(value); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentListener.java deleted file mode 100644 index 4858c7ed..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentListener.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2014 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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.event.EventListener; - -/** - * Listener for {@link IntentEvent intent events}. - */ -@Beta -public interface IntentListener extends EventListener<IntentEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentOperation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentOperation.java deleted file mode 100644 index 1b51b4f3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentOperation.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - - -import com.google.common.annotations.Beta; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of an intent-related operation, e.g. add, remove, replace. - */ -@Beta -public final class IntentOperation { - - private final Type type; - private final Intent intent; - - /** - * Operation type. - */ - public enum Type { - /** - * Indicates that an intent should be added. - */ - SUBMIT, - - /** - * Indicates that an intent should be removed. - */ - WITHDRAW, - } - - /** - * Creates an intent operation. - * - * @param type operation type - * @param intent intent subject - */ - public IntentOperation(Type type, Intent intent) { - this.type = checkNotNull(type); - this.intent = intent; - } - - /** - * Returns the type of the operation. - * - * @return operation type - */ - public Type type() { - return type; - } - - /** - * Returns the identifier of the intent to which this operation applies. - * - * @return intent identifier - */ - public IntentId intentId() { - return intent.id(); - } - - /** - * Returns the key for this intent. - * - * @return key value - */ - public Key key() { - return intent.key(); - } - - /** - * Returns the intent to which this operation applied. For remove, - * this can be null. - * - * @return intent that is the subject of the operation; null for remove - */ - public Intent intent() { - return intent; - } - - @Override - public int hashCode() { - return Objects.hash(type, intent); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final IntentOperation other = (IntentOperation) obj; - return Objects.equals(this.type, other.type) && - Objects.equals(this.intent, other.intent); - } - - - @Override - public String toString() { - return toStringHelper(this) - .add("type", type) - .add("intent", intent) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentService.java deleted file mode 100644 index 8533cebc..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentService.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - - -import com.google.common.annotations.Beta; -import org.onosproject.event.ListenerService; - -import java.util.List; - -/** - * Service for application submitting or withdrawing their intents. - */ -@Beta -public interface IntentService - extends ListenerService<IntentEvent, IntentListener> { - - /** - * Submits an intent into the system. - * <p> - * This is an asynchronous request meaning that any compiling or - * installation activities may be done at later time. - * </p> - * @param intent intent to be submitted - */ - void submit(Intent intent); - - /** - * Withdraws an intent from the system. - * <p> - * This is an asynchronous request meaning that the environment may be - * affected at later time. - * </p> - * @param intent intent to be withdrawn - */ - void withdraw(Intent intent); - - /** - * Purges a specific intent from the system if it is <b>FAILED</b> or - * <b>WITHDRAWN</b>. Otherwise, the intent remains in its current state. - * - * @param intent intent to purge - */ - void purge(Intent intent); - - /** - * Fetches an intent based on its key. - * - * @param key key of the intent - * @return intent object if the key is found, null otherwise - */ - Intent getIntent(Key key); - - /** - * Returns an iterable of intents currently in the system. - * - * @return set of intents - */ - Iterable<Intent> getIntents(); - - /** - * Returns an iterable of intent data objects currently in the system. - * - * @return set of intent data objects - */ - Iterable<IntentData> getIntentData(); - - /** - * Returns the number of intents currently in the system. - * - * @return number of intents - */ - long getIntentCount(); - - /** - * Retrieves the state of an intent by its identifier. - * - * @param intentKey intent identifier - * @return the intent state or null if one with the given identifier is not - * found - */ - IntentState getIntentState(Key intentKey); - - /** - * Returns the list of the installable events associated with the specified - * top-level intent. - * - * @param intentKey top-level intent identifier - * @return compiled installable intents - */ - List<Intent> getInstallableIntents(Key intentKey); - - /** - * Signifies whether the local node is responsible for processing the given - * intent key. - * - * @param intentKey intent key to check - * @return true if the local node is responsible for the intent key, - * otherwise false - */ - boolean isLocal(Key intentKey); - - /** - * Returns the list of intent requests pending processing. - * - * @return intents pending processing - */ - Iterable<Intent> getPending(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentState.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentState.java deleted file mode 100644 index 1e5fd054..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentState.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; - -/** - * Representation of the phases an intent may attain during its lifecycle. - */ -@Beta -public enum IntentState { - - /** - * Signifies that the intent has been submitted and will start compiling - * shortly. However, this compilation may not necessarily occur on the - * local controller instance. - * <p> - * All intent in the runtime take this state first. - * </p><p> - * Intents will also pass through this state when they are updated. - * </p> - */ - INSTALL_REQ, // TODO submit_REQ? - - /** - * Signifies that the intent is being compiled into installable intents. - * This is a transitional state after which the intent will enter either - * {@link #FAILED} state or {@link #INSTALLING} state. - */ - COMPILING, //TODO do we really need this? - - /** - * Signifies that the resulting installable intents are being installed - * into the network environment. This is a transitional state after which - * the intent will enter either {@link #INSTALLED} state or - * {@link #RECOMPILING} state. - */ - INSTALLING, - - /** - * The intent has been successfully installed. This is a state where the - * intent may remain parked until it is withdrawn by the application or - * until the network environment changes in some way to make the original - * set of installable intents untenable. - */ - INSTALLED, - - /** - * Signifies that the intent is being recompiled into installable intents - * as an attempt to adapt to an anomaly in the network environment. - * This is a transitional state after which the intent will enter either - * {@link #FAILED} state or {@link #INSTALLING} state. - * <p> - * Exit to the {@link #FAILED} state may be caused by failure to compile - * or by compiling into the same set of installable intents which have - * previously failed to be installed. - * </p> - */ - RECOMPILING, // TODO perhaps repurpose as BROKEN. - - /** - * Indicates that an application has requested that an intent be withdrawn. - * It will start withdrawing shortly, but not necessarily on this instance. - * Intents can also be parked here if it is impossible to withdraw them. - */ - WITHDRAW_REQ, - - /** - * Indicates that the intent is being withdrawn. This is a transitional - * state, triggered by invocation of the - * {@link IntentService#withdraw(Intent)} but one with only one outcome, - * which is the the intent being placed in the {@link #WITHDRAWN} state. - */ - WITHDRAWING, - - /** - * Indicates that the intent has been successfully withdrawn. - */ - WITHDRAWN, - - /** - * Signifies that the intent has failed to be installed and cannot be - * satisfied given current network conditions. But, the framework will - * reattempt to install it when network conditions change until it is - * withdrawn by an application. - */ - FAILED, //TODO consider renaming to UNSATISFIABLE - - /** - * Signifies that an intent has failed either installation or withdrawal, - * and still hold some or all of its resources. - * (e.g. link reservations, flow rules on the data plane, etc.) - */ - CORRUPT, //TODO consider renaming to ERROR - - /** - * Indicates that the intent should be purged from the database. - * <p> - * Note: This operation will only be performed if the intent is already - * in WITHDRAWN or FAILED. - * </p> - */ - PURGE_REQ -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentStore.java deleted file mode 100644 index 167ba152..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentStore.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.store.Store; - -import java.util.List; - -/** - * Manages inventory of end-station intents; not intended for direct use. - */ -@Beta -public interface IntentStore extends Store<IntentEvent, IntentStoreDelegate> { - - /** - * Returns the number of intents in the store. - * - * @return the number of intents in the store - */ - long getIntentCount(); - - /** - * Returns an iterable of all intents in the store. - * - * @return iterable of all intents - */ - Iterable<Intent> getIntents(); - - - /** - * Returns an iterable of all intent data objects in the store. - * - * @param localOnly should only intents for which this instance is master - * be returned - * @param olderThan specified duration in milliseconds (0 for "now") - * @return iterable of all intent data objects - */ - Iterable<IntentData> getIntentData(boolean localOnly, long olderThan); - - /** - * Returns the state of the specified intent. - * - * @param intentKey intent identification - * @return current intent state - */ - IntentState getIntentState(Key intentKey); - - /** - * Returns the list of the installable events associated with the specified - * original intent. - * - * @param intentKey original intent identifier - * @return compiled installable intents, or null if no installables exist - */ - List<Intent> getInstallableIntents(Key intentKey); - - /** - * Writes an IntentData object to the store. - * - * @param newData new intent data to write - */ - void write(IntentData newData); - - /** - * Writes a batch of IntentData objects to the store. A batch has no - * semantics, this is simply a convenience API. - * - * @param updates collection of intent data objects to write - */ - void batchWrite(Iterable<IntentData> updates); - - /** - * Returns the intent with the specified identifier. - * - * @param key key - * @return intent or null if not found - */ - Intent getIntent(Key key); - - /** - * Returns the intent data object associated with the specified key. - * - * @param key key to look up - * @return intent data object - */ - IntentData getIntentData(Key key); - - /** - * Adds a new operation, which should be persisted and delegated. - * - * @param intent operation - */ - void addPending(IntentData intent); - - /** - * Checks to see whether the calling instance is the master for processing - * this intent, or more specifically, the key contained in this intent. - * - * @param intentKey intentKey to check - * @return true if master; false, otherwise - */ - //TODO better name - boolean isMaster(Key intentKey); - - /** - * Returns the intent requests pending processing. - * - * @return pending intents - */ - Iterable<Intent> getPending(); - - /** - * Returns the intent data objects that are pending processing. - * - * @return pending intent data objects - */ - Iterable<IntentData> getPendingData(); - - /** - * Returns the intent data objects that are pending processing for longer - * than the specified duration. - * - * @param localOnly should only intents for which this instance is master - * be returned - * @param olderThan specified duration in milliseconds (0 for "now") - * @return pending intent data objects - */ - Iterable<IntentData> getPendingData(boolean localOnly, long olderThan); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentStoreDelegate.java deleted file mode 100644 index fd99881c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentStoreDelegate.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.store.StoreDelegate; - -/** - * Intent store delegate abstraction. - */ -@Beta -public interface IntentStoreDelegate extends StoreDelegate<IntentEvent> { - - /** - * Provides an intent data object that should be processed (compiled and - * installed) by this manager. - * - * @param intentData intent data object - */ - void process(IntentData intentData); - - /** - * Called when a new intent has been updated for which this node is the master. - * - * @param intentData intent data object - */ - default void onUpdate(IntentData intentData) { - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentUtils.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentUtils.java deleted file mode 100644 index f6e33b6b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/IntentUtils.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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.net.intent; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Objects; - -/** - * Utilities for dealing with intents. - */ -public final class IntentUtils { - - private static final Logger log = LoggerFactory.getLogger(IntentUtils.class); - - private IntentUtils() { - } - - /** - * Checks if two intents represent the same value. - * - * <p>({@link Intent#equals(Object)} only checks ID equality)</p> - * - * <p>Both intents must be of the same type.</p> - * - * @param one first intent - * @param two second intent - * @return true if the two intents represent the same value, otherwise false - */ - public static boolean equals(Intent one, Intent two) { - if (one.getClass() != two.getClass()) { - return false; - } - - if (!(Objects.equals(one.appId(), two.appId()) && - Objects.equals(one.key(), two.key()))) { - return false; - } - - if (one instanceof SinglePointToMultiPointIntent) { - SinglePointToMultiPointIntent intent1 = (SinglePointToMultiPointIntent) one; - SinglePointToMultiPointIntent intent2 = (SinglePointToMultiPointIntent) two; - - return Objects.equals(intent1.selector(), intent2.selector()) && - Objects.equals(intent1.treatment(), intent2.treatment()) && - Objects.equals(intent1.ingressPoint(), intent2.ingressPoint()) && - Objects.equals(intent1.egressPoints(), intent2.egressPoints()); - } else if (one instanceof MultiPointToSinglePointIntent) { - MultiPointToSinglePointIntent intent1 = (MultiPointToSinglePointIntent) one; - MultiPointToSinglePointIntent intent2 = (MultiPointToSinglePointIntent) two; - - return Objects.equals(intent1.selector(), intent2.selector()) && - Objects.equals(intent1.treatment(), intent2.treatment()) && - Objects.equals(intent1.ingressPoints(), intent2.ingressPoints()) && - Objects.equals(intent1.egressPoint(), intent2.egressPoint()); - } else if (one instanceof PointToPointIntent) { - PointToPointIntent intent1 = (PointToPointIntent) one; - PointToPointIntent intent2 = (PointToPointIntent) two; - - return Objects.equals(intent1.selector(), intent2.selector()) && - Objects.equals(intent1.treatment(), intent2.treatment()) && - Objects.equals(intent1.ingressPoint(), intent2.ingressPoint()) && - Objects.equals(intent1.egressPoint(), intent2.egressPoint()); - } else { - log.error("Unimplemented intent type"); - return false; - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Key.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Key.java deleted file mode 100644 index 0344acbf..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/Key.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * 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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.hash.HashFunction; -import com.google.common.hash.Hashing; -import org.onosproject.core.ApplicationId; - -import java.nio.charset.StandardCharsets; -import java.util.Objects; - -/** - * Key class for Intents. - */ -// TODO maybe pull this up to utils -@Beta -public abstract class Key implements Comparable<Key> { - - //TODO consider making this a HashCode object (worry about performance) - private final long hash; - private static final HashFunction HASH_FN = Hashing.md5(); - - protected Key(long hash) { - this.hash = hash; - } - - public long hash() { - return hash; - } - - @Override - public int hashCode() { - return Long.hashCode(hash); - } - - @Override - public abstract boolean equals(Object obj); - - /** - * Creates a key based on the provided string. - * <p> - * Note: Two keys with equal value, but different appId, are not equal. - * </p> - * - * @param key the provided string - * @param appId application id to associate with this key - * @return the key for the string - */ - public static Key of(String key, ApplicationId appId) { - return new StringKey(key, appId); - } - - /** - * Creates a key based on the provided long. - * <p> - * Note: Two keys with equal value, but different appId, are not equal. - * Also, "10" and 10L are different. - * </p> - * - * @param key the provided long - * @param appId application id to associate with this key - * @return the key for the long - */ - public static Key of(long key, ApplicationId appId) { - return new LongKey(key, appId); - } - - private static final class StringKey extends Key { - - private final ApplicationId appId; - private final String key; - - private StringKey(String key, ApplicationId appId) { - super(HASH_FN.newHasher() - .putShort(appId.id()) - .putString(key, StandardCharsets.UTF_8) - .hash().asLong()); - this.key = key; - this.appId = appId; - } - - @Override - public String toString() { - return key; - } - - // checkstyle requires this - @Override - public int hashCode() { - return super.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final StringKey other = (StringKey) obj; - return this.hash() == other.hash() && - Objects.equals(this.appId, other.appId) && - Objects.equals(this.key, other.key); - } - - @Override - public int compareTo(Key o) { - StringKey sk = (StringKey) o; - return this.key.compareTo(sk.key); - } - } - - private static final class LongKey extends Key { - - private final ApplicationId appId; - private final long key; - - private LongKey(long key, ApplicationId appId) { - super(HASH_FN.newHasher() - .putShort(appId.id()) - .putLong(key) - .hash().asLong()); - this.key = key; - this.appId = appId; - } - - @Override - public String toString() { - return "0x" + Long.toHexString(key); - } - - // checkstyle requires this - @Override - public int hashCode() { - return super.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final LongKey other = (LongKey) obj; - return this.hash() == other.hash() && - this.key == other.key && - Objects.equals(this.appId, other.appId); - } - - @Override - public int compareTo(Key o) { - Long myKey = key; - Long otherKey = ((LongKey) o).key; - return myKey.compareTo(otherKey); - } - } -} - - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java deleted file mode 100644 index d7953fd8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/LinkCollectionIntent.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import java.util.List; -import java.util.Set; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.Link; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; - -/** - * Abstraction of a connectivity intent that is implemented by a set of path - * segments. - */ -@Beta -public final class LinkCollectionIntent extends ConnectivityIntent { - - private final Set<Link> links; - - private final Set<ConnectPoint> ingressPoints; - private final Set<ConnectPoint> egressPoints; - - /** - * Creates a new actionable intent capable of funneling the selected - * traffic along the specified convergent tree and out the given egress - * point satisfying the specified constraints. - * - * @param appId application identifier - * @param key key to use for the intent - * @param selector traffic match - * @param treatment action - * @param links traversed links - * @param ingressPoints ingress points - * @param egressPoints egress points - * @param constraints optional list of constraints - * @param priority priority to use for the flows generated by this intent - * @throws NullPointerException {@code path} is null - */ - private LinkCollectionIntent(ApplicationId appId, - Key key, - TrafficSelector selector, - TrafficTreatment treatment, - Set<Link> links, - Set<ConnectPoint> ingressPoints, - Set<ConnectPoint> egressPoints, - List<Constraint> constraints, - int priority) { - super(appId, key, resources(links), selector, treatment, constraints, priority); - this.links = links; - this.ingressPoints = ingressPoints; - this.egressPoints = egressPoints; - } - - /** - * Constructor for serializer. - */ - protected LinkCollectionIntent() { - super(); - this.links = null; - this.ingressPoints = null; - this.egressPoints = null; - } - - /** - * Returns a new link collection intent builder. The application id, - * ingress point and egress points are required fields. If they are - * not set by calls to the appropriate methods, an exception will - * be thrown. - * - * @return single point to multi point builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of a single point to multi point intent. - */ - public static final class Builder extends ConnectivityIntent.Builder { - Set<Link> links; - Set<ConnectPoint> ingressPoints; - Set<ConnectPoint> egressPoints; - - private Builder() { - // Hide constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the ingress point of the single point to multi point intent - * that will be built. - * - * @param ingressPoints ingress connect points - * @return this builder - */ - public Builder ingressPoints(Set<ConnectPoint> ingressPoints) { - this.ingressPoints = ImmutableSet.copyOf(ingressPoints); - return this; - } - - /** - * Sets the egress points of the single point to multi point intent - * that will be built. - * - * @param egressPoints egress connect points - * @return this builder - */ - public Builder egressPoints(Set<ConnectPoint> egressPoints) { - this.egressPoints = ImmutableSet.copyOf(egressPoints); - return this; - } - - /** - * Sets the links of the link collection intent - * that will be built. - * - * @param links links for the intent - * @return this builder - */ - public Builder links(Set<Link> links) { - this.links = ImmutableSet.copyOf(links); - return this; - } - - - /** - * Builds a single point to multi point intent from the - * accumulated parameters. - * - * @return point to point intent - */ - public LinkCollectionIntent build() { - - return new LinkCollectionIntent( - appId, - key, - selector, - treatment, - links, - ingressPoints, - egressPoints, - constraints, - priority - ); - } - } - - - /** - * Returns the set of links that represent the network connections needed - * by this intent. - * - * @return Set of links for the network hops needed by this intent - */ - public Set<Link> links() { - return links; - } - - /** - * Returns the ingress points of the intent. - * - * @return the ingress points - */ - public Set<ConnectPoint> ingressPoints() { - return ingressPoints; - } - - /** - * Returns the egress points of the intent. - * - * @return the egress points - */ - public Set<ConnectPoint> egressPoints() { - return egressPoints; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("selector", selector()) - .add("treatment", treatment()) - .add("links", links()) - .add("ingress", ingressPoints()) - .add("egress", egressPoints()) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java deleted file mode 100644 index 7df3c81e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsIntent.java +++ /dev/null @@ -1,276 +0,0 @@ -/* - * 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.net.intent; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import com.google.common.annotations.Beta; -import org.onlab.packet.MplsLabel; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import com.google.common.base.MoreObjects; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - - -/** - * Abstraction of MPLS label-switched connectivity. - */ -@Beta -public final class MplsIntent extends ConnectivityIntent { - - private final ConnectPoint ingressPoint; - private final Optional<MplsLabel> ingressLabel; - private final ConnectPoint egressPoint; - private final Optional<MplsLabel> egressLabel; - - /** - * Creates a new point-to-point intent with the supplied ingress/egress - * ports, labels and constraints. - * - * @param appId application identifier - * @param selector traffic selector - * @param treatment treatment - * @param ingressPoint ingress port - * @param ingressLabel ingress MPLS label - * @param egressPoint egress port - * @param egressLabel egress MPLS label - * @param constraints optional list of constraints - * @param priority priority to use for flows generated by this intent - * @throws NullPointerException if {@code ingressPoint} or {@code egressPoints} is null. - */ - private MplsIntent(ApplicationId appId, - Key key, - TrafficSelector selector, - TrafficTreatment treatment, - ConnectPoint ingressPoint, - Optional<MplsLabel> ingressLabel, - ConnectPoint egressPoint, - Optional<MplsLabel> egressLabel, - List<Constraint> constraints, - int priority) { - - super(appId, key, Collections.emptyList(), selector, treatment, constraints, - priority); - - this.ingressPoint = checkNotNull(ingressPoint); - this.ingressLabel = checkNotNull(ingressLabel); - this.egressPoint = checkNotNull(egressPoint); - this.egressLabel = checkNotNull(egressLabel); - - checkArgument(!ingressPoint.equals(egressPoint), - "ingress and egress should be different (ingress: %s, egress: %s)", - ingressPoint, egressPoint); - } - - /** - * Returns a new MPLS intent builder. The application id, - * ingress point, egress point, ingress label and egress label are - * required fields. If they are not set by calls to the appropriate - * methods, an exception will be thrown. - * - * @return point to point builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of an MPLS intent. - */ - public static final class Builder extends ConnectivityIntent.Builder { - ConnectPoint ingressPoint; - ConnectPoint egressPoint; - Optional<MplsLabel> ingressLabel; - Optional<MplsLabel> egressLabel; - - private Builder() { - // Hide constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the ingress point of the point to point intent that will be built. - * - * @param ingressPoint ingress connect point - * @return this builder - */ - public Builder ingressPoint(ConnectPoint ingressPoint) { - this.ingressPoint = ingressPoint; - return this; - } - - /** - * Sets the egress point of the point to point intent that will be built. - * - * @param egressPoint egress connect point - * @return this builder - */ - public Builder egressPoint(ConnectPoint egressPoint) { - this.egressPoint = egressPoint; - return this; - } - - /** - * Sets the ingress label of the intent that will be built. - * - * @param ingressLabel ingress label - * @return this builder - */ - public Builder ingressLabel(Optional<MplsLabel> ingressLabel) { - this.ingressLabel = ingressLabel; - return this; - } - - /** - * Sets the ingress label of the intent that will be built. - * - * @param egressLabel ingress label - * @return this builder - */ - public Builder egressLabel(Optional<MplsLabel> egressLabel) { - this.egressLabel = egressLabel; - return this; - } - - /** - * Builds a point to point intent from the accumulated parameters. - * - * @return point to point intent - */ - public MplsIntent build() { - - return new MplsIntent( - appId, - key, - selector, - treatment, - ingressPoint, - ingressLabel, - egressPoint, - egressLabel, - constraints, - priority - ); - } - } - - - - /** - * Constructor for serializer. - */ - protected MplsIntent() { - super(); - this.ingressPoint = null; - this.ingressLabel = null; - this.egressPoint = null; - this.egressLabel = null; - } - - /** - * Returns the port on which the ingress traffic should be connected to - * the egress. - * - * @return ingress switch port - */ - public ConnectPoint ingressPoint() { - return ingressPoint; - } - - /** - * Returns the port on which the traffic should egress. - * - * @return egress switch port - */ - public ConnectPoint egressPoint() { - return egressPoint; - } - - - /** - * Returns the MPLS label which the ingress traffic should tagged. - * - * @return ingress MPLS label - */ - public Optional<MplsLabel> ingressLabel() { - return ingressLabel; - } - - /** - * Returns the MPLS label which the egress traffic should tagged. - * - * @return egress MPLS label - */ - public Optional<MplsLabel> egressLabel() { - return egressLabel; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("appId", appId()) - .add("key", key()) - .add("priority", priority()) - .add("selector", selector()) - .add("treatment", treatment()) - .add("ingressPoint", ingressPoint) - .add("ingressLabel", ingressLabel) - .add("egressPoint", egressPoint) - .add("egressLabel", egressLabel) - .add("constraints", constraints()) - .toString(); - } - - - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java deleted file mode 100644 index 4548c44d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MplsPathIntent.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * 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.net.intent; - -import java.util.List; -import java.util.Optional; - -import com.google.common.annotations.Beta; -import org.onlab.packet.MplsLabel; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.Path; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import static com.google.common.base.Preconditions.checkNotNull; - - -/** - * Abstraction of explicit MPLS label-switched path. - */ -@Beta -public final class MplsPathIntent extends PathIntent { - - private final Optional<MplsLabel> ingressLabel; - private final Optional<MplsLabel> egressLabel; - - /** - * Creates a new point-to-point intent with the supplied ingress/egress - * ports and using the specified explicit path. - * - * @param appId application identifier - * @param key intent key - * @param selector traffic selector - * @param treatment treatment - * @param path traversed links - * @param ingressLabel MPLS egress label - * @param egressLabel MPLS ingress label - * @param constraints optional list of constraints - * @param priority priority to use for flows generated by this intent - * @throws NullPointerException {@code path} is null - */ - private MplsPathIntent(ApplicationId appId, Key key, TrafficSelector selector, - TrafficTreatment treatment, Path path, Optional<MplsLabel> ingressLabel, - Optional<MplsLabel> egressLabel, List<Constraint> constraints, - int priority) { - super(appId, key, selector, treatment, path, constraints, - priority); - - this.ingressLabel = checkNotNull(ingressLabel); - this.egressLabel = checkNotNull(egressLabel); - } - - /** - * Returns a new host to host intent builder. - * - * @return host to host intent builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of a host to host intent. - */ - public static final class Builder extends PathIntent.Builder { - private Optional<MplsLabel> ingressLabel = Optional.empty(); - private Optional<MplsLabel> egressLabel = Optional.empty(); - - private Builder() { - // Hide constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - @Override - public Builder path(Path path) { - return (Builder) super.path(path); - } - - /** - * Sets the ingress label of the intent that will be built. - * - * @param ingressLabel ingress label - * @return this builder - */ - public Builder ingressLabel(Optional<MplsLabel> ingressLabel) { - this.ingressLabel = ingressLabel; - return this; - } - - /** - * Sets the ingress label of the intent that will be built. - * - * @param egressLabel ingress label - * @return this builder - */ - public Builder egressLabel(Optional<MplsLabel> egressLabel) { - this.egressLabel = egressLabel; - return this; - } - - - /** - * Builds a host to host intent from the accumulated parameters. - * - * @return point to point intent - */ - public MplsPathIntent build() { - - return new MplsPathIntent( - appId, - key, - selector, - treatment, - path, - ingressLabel, - egressLabel, - constraints, - priority - ); - } - } - - - /** - * Returns the MPLS label which the ingress traffic should tagged. - * - * @return ingress MPLS label - */ - public Optional<MplsLabel> ingressLabel() { - return ingressLabel; - } - - /** - * Returns the MPLS label which the egress traffic should tagged. - * - * @return egress MPLS label - */ - public Optional<MplsLabel> egressLabel() { - return egressLabel; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MultiPointToSinglePointIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MultiPointToSinglePointIntent.java deleted file mode 100644 index ac6061c7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/MultiPointToSinglePointIntent.java +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of multiple source to single destination connectivity intent. - */ -@Beta -public final class MultiPointToSinglePointIntent extends ConnectivityIntent { - - private final Set<ConnectPoint> ingressPoints; - private final ConnectPoint egressPoint; - - /** - * Creates a new multi-to-single point connectivity intent for the specified - * traffic selector and treatment. - * - * @param appId application identifier - * @param key intent key - * @param selector traffic selector - * @param treatment treatment - * @param ingressPoints set of ports from which ingress traffic originates - * @param egressPoint port to which traffic will egress - * @param constraints constraints to apply to the intent - * @param priority priority to use for flows generated by this intent - * @throws NullPointerException if {@code ingressPoints} or - * {@code egressPoint} is null. - * @throws IllegalArgumentException if the size of {@code ingressPoints} is - * not more than 1 - */ - private MultiPointToSinglePointIntent(ApplicationId appId, - Key key, - TrafficSelector selector, - TrafficTreatment treatment, - Set<ConnectPoint> ingressPoints, - ConnectPoint egressPoint, - List<Constraint> constraints, - int priority) { - super(appId, key, Collections.emptyList(), selector, treatment, constraints, - priority); - - checkNotNull(ingressPoints); - checkArgument(!ingressPoints.isEmpty(), "Ingress point set cannot be empty"); - checkNotNull(egressPoint); - checkArgument(!ingressPoints.contains(egressPoint), - "Set of ingresses should not contain egress (egress: %s)", egressPoint); - - this.ingressPoints = Sets.newHashSet(ingressPoints); - this.egressPoint = egressPoint; - } - - /** - * Constructor for serializer. - */ - protected MultiPointToSinglePointIntent() { - super(); - this.ingressPoints = null; - this.egressPoint = null; - } - - /** - * Returns a new multi point to single point intent builder. The application id, - * ingress points and egress point are required fields. If they are - * not set by calls to the appropriate methods, an exception will - * be thrown. - * - * @return single point to multi point builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of a multi point to single point intent. - */ - public static final class Builder extends ConnectivityIntent.Builder { - Set<ConnectPoint> ingressPoints; - ConnectPoint egressPoint; - - private Builder() { - // Hide constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the ingress point of the single point to multi point intent - * that will be built. - * - * @param ingressPoints ingress connect points - * @return this builder - */ - public Builder ingressPoints(Set<ConnectPoint> ingressPoints) { - this.ingressPoints = ImmutableSet.copyOf(ingressPoints); - return this; - } - - /** - * Sets the egress point of the multi point to single point intent - * that will be built. - * - * @param egressPoint egress connect point - * @return this builder - */ - public Builder egressPoint(ConnectPoint egressPoint) { - this.egressPoint = egressPoint; - return this; - } - - /** - * Builds a multi point to single point intent from the - * accumulated parameters. - * - * @return point to point intent - */ - public MultiPointToSinglePointIntent build() { - - return new MultiPointToSinglePointIntent( - appId, - key, - selector, - treatment, - ingressPoints, - egressPoint, - constraints, - priority - ); - } - } - - - /** - * Returns the set of ports on which ingress traffic should be connected to - * the egress port. - * - * @return set of ingress ports - */ - public Set<ConnectPoint> ingressPoints() { - return ingressPoints; - } - - /** - * Returns the port on which the traffic should egress. - * - * @return egress port - */ - public ConnectPoint egressPoint() { - return egressPoint; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("selector", selector()) - .add("treatment", treatment()) - .add("ingress", ingressPoints()) - .add("egress", egressPoint()) - .add("constraints", constraints()) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java deleted file mode 100644 index 1e515c8c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * 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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.OduCltPort; - -import java.util.Collections; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * An optical layer intent for circuits between two OduClt ports. - * No traffic selector or traffic treatment are needed. - */ -@Beta -public class OpticalCircuitIntent extends Intent { - private final ConnectPoint src; - private final ConnectPoint dst; - private final OduCltPort.SignalType signalType; - private final boolean isBidirectional; - - /** - * Creates an optical circuit intent between the specified - * connection points. - * - * @param appId application identification - * @param key intent key - * @param src the source transponder port - * @param dst the destination transponder port - * @param signalType ODU signal type - * @param isBidirectional indicate if intent is bidirectional - * @param priority priority to use for flows from this intent - */ - protected OpticalCircuitIntent(ApplicationId appId, Key key, ConnectPoint src, ConnectPoint dst, - OduCltPort.SignalType signalType, boolean isBidirectional, int priority) { - super(appId, key, Collections.emptyList(), priority); - this.src = checkNotNull(src); - this.dst = checkNotNull(dst); - this.signalType = checkNotNull(signalType); - this.isBidirectional = isBidirectional; - } - - /** - * Returns a new optical circuit intent builder. - * - * @return host to host intent builder - */ - public static Builder builder() { - return new Builder(); - } - - - /** - * Builder for optical circuit intents. - */ - public static class Builder extends Intent.Builder { - private ConnectPoint src; - private ConnectPoint dst; - private OduCltPort.SignalType signalType; - private boolean isBidirectional; - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the source for the intent that will be built. - * - * @param src source to use for built intent - * @return this builder - */ - public Builder src(ConnectPoint src) { - this.src = src; - return this; - } - - /** - * Sets the destination for the intent that will be built. - * - * @param dst dest to use for built intent - * @return this builder - */ - public Builder dst(ConnectPoint dst) { - this.dst = dst; - return this; - } - - /** - * Sets the ODU signal type for the intent that will be built. - * - * @param signalType signal type to use for built intent - * @return this builder - */ - public Builder signalType(OduCltPort.SignalType signalType) { - this.signalType = signalType; - return this; - } - - /** - * Sets the directionality of the intent. - * - * @param isBidirectional true if bidirectional, false if unidirectional - * @return this builder - */ - public Builder bidirectional(boolean isBidirectional) { - this.isBidirectional = isBidirectional; - return this; - } - - /** - * Builds an optical circuit intent from the accumulated parameters. - * - * @return point to point intent - */ - public OpticalCircuitIntent build() { - - return new OpticalCircuitIntent( - appId, - key, - src, - dst, - signalType, - isBidirectional, - priority - ); - } - } - - /** - * Constructor for serializer. - */ - protected OpticalCircuitIntent() { - super(); - this.src = null; - this.dst = null; - this.signalType = null; - this.isBidirectional = false; - } - - /** - * Returns the source transponder port. - * - * @return source transponder port - */ - public ConnectPoint getSrc() { - return src; - } - - /** - * Returns the destination transponder port. - * - * @return source transponder port - */ - public ConnectPoint getDst() { - return dst; - } - - /** - * Returns the ODU signal type. - * - * @return ODU signal type - */ - public OduCltPort.SignalType getSignalType() { - return signalType; - } - - /** - * Returns the directionality of the intent. - * - * @return true if bidirectional, false if unidirectional - */ - public boolean isBidirectional() { - return isBidirectional; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("src", src) - .add("dst", dst) - .add("signalType", signalType) - .add("isBidirectional", isBidirectional) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java deleted file mode 100644 index aeb0255f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalConnectivityIntent.java +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.OduSignalType; - -import java.util.Collections; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * An optical layer intent for connectivity between two OCh ports. - * No traffic selector or traffic treatment are needed. - */ -@Beta -public final class OpticalConnectivityIntent extends Intent { - private final ConnectPoint src; - private final ConnectPoint dst; - private final OduSignalType signalType; - private final boolean isBidirectional; - - /** - * Creates an optical connectivity intent between the specified - * connection points. - * - * @param appId application identification - * @param key intent key - * @param src the source transponder port - * @param dst the destination transponder port - * @param signalType signal type - * @param isBidirectional indicates if intent is unidirectional - * @param priority priority to use for flows from this intent - */ - protected OpticalConnectivityIntent(ApplicationId appId, - Key key, - ConnectPoint src, - ConnectPoint dst, - OduSignalType signalType, - boolean isBidirectional, - int priority) { - super(appId, key, Collections.emptyList(), priority); - this.src = checkNotNull(src); - this.dst = checkNotNull(dst); - this.signalType = checkNotNull(signalType); - this.isBidirectional = isBidirectional; - } - - /** - * Returns a new optical connectivity intent builder. - * - * @return host to host intent builder - */ - public static Builder builder() { - return new Builder(); - } - - - /** - * Builder for optical connectivity intents. - */ - public static class Builder extends Intent.Builder { - private ConnectPoint src; - private ConnectPoint dst; - private OduSignalType signalType; - private boolean isBidirectional; - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the source for the intent that will be built. - * - * @param src source to use for built intent - * @return this builder - */ - public Builder src(ConnectPoint src) { - this.src = src; - return this; - } - - /** - * Sets the destination for the intent that will be built. - * - * @param dst dest to use for built intent - * @return this builder - */ - public Builder dst(ConnectPoint dst) { - this.dst = dst; - return this; - } - - /** - * Sets the ODU signal type for the intent that will be built. - * - * @param signalType ODU signal type - * @return this builder - */ - public Builder signalType(OduSignalType signalType) { - this.signalType = signalType; - return this; - } - - /** - * Sets the directionality of the intent. - * - * @param isBidirectional true if bidirectional, false if unidirectional - * @return this builder - */ - public Builder bidirectional(boolean isBidirectional) { - this.isBidirectional = isBidirectional; - return this; - } - - /** - * Builds an optical connectivity intent from the accumulated parameters. - * - * @return point to point intent - */ - public OpticalConnectivityIntent build() { - - return new OpticalConnectivityIntent( - appId, - key, - src, - dst, - signalType, - isBidirectional, - priority - ); - } - } - - /** - * Constructor for serializer. - */ - protected OpticalConnectivityIntent() { - super(); - this.src = null; - this.dst = null; - this.signalType = null; - this.isBidirectional = false; - } - - /** - * Returns the source transponder port. - * - * @return source transponder port - */ - public ConnectPoint getSrc() { - return src; - } - - /** - * Returns the destination transponder port. - * - * @return source transponder port - */ - public ConnectPoint getDst() { - return dst; - } - - /** - * Returns the ODU signal type. - * - * @return ODU signal type - */ - public OduSignalType getSignalType() { - return signalType; - } - - /** - * Returns the directionality of the intent. - * - * @return true if bidirectional, false if unidirectional - */ - public boolean isBidirectional() { - return isBidirectional; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("src", src) - .add("dst", dst) - .add("signalType", signalType) - .add("isBidirectional", isBidirectional) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java deleted file mode 100644 index 5a5461cb..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/OpticalPathIntent.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.OchSignal; -import org.onosproject.net.OchSignalType; -import org.onosproject.net.Path; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * An optical layer intent with explicitly selected path. - */ -@Beta -public final class OpticalPathIntent extends Intent { - - private final ConnectPoint src; - private final ConnectPoint dst; - private final Path path; - private final OchSignal lambda; - private final OchSignalType signalType; - private final boolean isBidirectional; - - private OpticalPathIntent(ApplicationId appId, - Key key, - ConnectPoint src, - ConnectPoint dst, - Path path, - OchSignal lambda, - OchSignalType signalType, - boolean isBidirectional, - int priority) { - super(appId, key, ImmutableSet.copyOf(path.links()), priority); - this.src = checkNotNull(src); - this.dst = checkNotNull(dst); - this.path = checkNotNull(path); - this.lambda = checkNotNull(lambda); - this.signalType = checkNotNull(signalType); - this.isBidirectional = isBidirectional; - } - - protected OpticalPathIntent() { - this.src = null; - this.dst = null; - this.path = null; - this.lambda = null; - this.signalType = null; - this.isBidirectional = true; - } - - /** - * Returns a new optical connectivity intent builder. - * - * @return host to host intent builder - */ - public static Builder builder() { - return new Builder(); - } - - - /** - * Builder for optical path intents. - */ - public static class Builder extends Intent.Builder { - private ConnectPoint src; - private ConnectPoint dst; - private Path path; - private OchSignal lambda; - private OchSignalType signalType; - private boolean isBidirectional; - Key key; - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the source for the intent that will be built. - * - * @param src source to use for built intent - * @return this builder - */ - public Builder src(ConnectPoint src) { - this.src = src; - return this; - } - - /** - * Sets the destination for the intent that will be built. - * - * @param dst dest to use for built intent - * @return this builder - */ - public Builder dst(ConnectPoint dst) { - this.dst = dst; - return this; - } - - /** - * Sets the path for the intent that will be built. - * - * @param path path to use for built intent - * @return this builder - */ - public Builder path(Path path) { - this.path = path; - return this; - } - - /** - * Sets the optical channel (lambda) for the intent that will be built. - * - * @param lambda the optical channel - * @return this builder - */ - public Builder lambda(OchSignal lambda) { - this.lambda = lambda; - return this; - } - - /** - * Sets the optical signal type for the intent that will be built. - * - * @param signalType the optical signal type - * @return this builder - */ - public Builder signalType(OchSignalType signalType) { - this.signalType = signalType; - return this; - } - - /** - * Sets the intent's direction. - * - * @param isBidirectional indicates if intent is bidirectional - * @return this builder - */ - public Builder bidirectional(boolean isBidirectional) { - this.isBidirectional = isBidirectional; - return this; - } - - /** - * Builds an optical path intent from the accumulated parameters. - * - * @return optical path intent - */ - public OpticalPathIntent build() { - - return new OpticalPathIntent( - appId, - key, - src, - dst, - path, - lambda, - signalType, - isBidirectional, - priority - ); - } - } - - - public ConnectPoint src() { - return src; - } - - public ConnectPoint dst() { - return dst; - } - - public Path path() { - return path; - } - - public OchSignal lambda() { - return lambda; - } - - public OchSignalType signalType() { - return signalType; - } - - public boolean isBidirectional() { - return isBidirectional; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("appId", appId()) - .add("key", key()) - .add("resources", resources()) - .add("ingressPort", src) - .add("egressPort", dst) - .add("path", path) - .add("lambda", lambda) - .add("signalType", signalType) - .add("isBidirectional", isBidirectional) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionEvent.java deleted file mode 100644 index c79a3818..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionEvent.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.event.AbstractEvent; - -/** - * Partition event. - */ -//TODO change String into a proper object type -@Beta -public class PartitionEvent extends AbstractEvent<PartitionEvent.Type, String> { - - public enum Type { - LEADER_CHANGED - } - - public PartitionEvent(Type type, String partition) { - super(type, partition); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionEventListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionEventListener.java deleted file mode 100644 index 5f1da334..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionEventListener.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving device partition-related events. - */ -@Beta -public interface PartitionEventListener extends EventListener<PartitionEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionService.java deleted file mode 100644 index 02ccccac..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PartitionService.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.net.intent; - -import com.google.common.annotations.Beta; -import org.onosproject.cluster.NodeId; -import org.onosproject.event.ListenerService; - -/** - * Service for interacting with the partition-to-instance assignments. - */ -@Beta -public interface PartitionService - extends ListenerService<PartitionEvent, PartitionEventListener> { - - /** - * Returns whether the given intent key is in a partition owned by this - * instance or not. - * - * @param intentKey intent key to query - * @return true if the key is owned by this instance, otherwise false - */ - boolean isMine(Key intentKey); - - /** - * Returns the leader for a particular key. - * - * @param intentKey intent key to query - * @return the leader node - */ - NodeId getLeader(Key intentKey); - - // TODO add API for rebalancing partitions - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java deleted file mode 100644 index 9bf137a1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PathIntent.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import java.util.List; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.Iterables; - -import static com.google.common.base.Preconditions.checkArgument; - -/** - * Abstraction of explicitly path specified connectivity intent. - */ -@Beta -public class PathIntent extends ConnectivityIntent { - - private final Path path; - - /** - * Creates a new point-to-point intent with the supplied ingress/egress - * ports and using the specified explicit path. - * - * @param appId application identifier - * @param key intent key - * @param selector traffic selector - * @param treatment treatment - * @param path traversed links - * @param constraints optional list of constraints - * @param priority priority to use for the generated flows - * @throws NullPointerException {@code path} is null - */ - protected PathIntent(ApplicationId appId, - Key key, - TrafficSelector selector, - TrafficTreatment treatment, - Path path, - List<Constraint> constraints, - int priority) { - super(appId, key, resources(path.links()), selector, treatment, constraints, - priority); - PathIntent.validate(path.links()); - this.path = path; - } - - /** - * Constructor for serializer. - */ - protected PathIntent() { - super(); - this.path = null; - } - - /** - * Returns a new host to host intent builder. - * - * @return host to host intent builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of a host to host intent. - */ - public static class Builder extends ConnectivityIntent.Builder { - Path path; - - protected Builder() { - // Hide default constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the path of the intent that will be built. - * - * @param path path for the intent - * @return this builder - */ - public Builder path(Path path) { - this.path = path; - return this; - } - - /** - * Builds a path intent from the accumulated parameters. - * - * @return point to point intent - */ - public PathIntent build() { - - return new PathIntent( - appId, - key, - selector, - treatment, - path, - constraints, - priority - ); - } - } - - - - // NOTE: This methods takes linear time with the number of links. - /** - * Validates that source element ID and destination element ID of a link are - * different for the specified all links and that destination element ID of a link and source - * element ID of the next adjacent source element ID are same for the specified all links. - * - * @param links links to be validated - */ - public static void validate(List<Link> links) { - checkArgument(Iterables.all(links, link -> !link.src().elementId().equals(link.dst().elementId())), - "element of src and dst in a link must be different: {}", links); - - boolean adjacentSame = true; - for (int i = 0; i < links.size() - 1; i++) { - if (!links.get(i).dst().elementId().equals(links.get(i + 1).src().elementId())) { - adjacentSame = false; - break; - } - } - checkArgument(adjacentSame, "adjacent links must share the same element: {}", links); - } - - /** - * Returns the links which the traffic goes along. - * - * @return traversed links - */ - public Path path() { - return path; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("selector", selector()) - .add("treatment", treatment()) - .add("constraints", constraints()) - .add("path", path) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PointToPointIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PointToPointIntent.java deleted file mode 100644 index d3f7529d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/PointToPointIntent.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import java.util.Collections; -import java.util.List; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import com.google.common.base.MoreObjects; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of point-to-point connectivity. - */ -@Beta -public final class PointToPointIntent extends ConnectivityIntent { - - private final ConnectPoint ingressPoint; - private final ConnectPoint egressPoint; - - /** - * Returns a new point to point intent builder. The application id, - * ingress point and egress point are required fields. If they are - * not set by calls to the appropriate methods, an exception will - * be thrown. - * - * @return point to point builder - */ - public static PointToPointIntent.Builder builder() { - return new Builder(); - } - - /** - * Builder of a point to point intent. - */ - public static final class Builder extends ConnectivityIntent.Builder { - ConnectPoint ingressPoint; - ConnectPoint egressPoint; - - private Builder() { - // Hide constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the ingress point of the point to point intent that will be built. - * - * @param ingressPoint ingress connect point - * @return this builder - */ - public Builder ingressPoint(ConnectPoint ingressPoint) { - this.ingressPoint = ingressPoint; - return this; - } - - /** - * Sets the egress point of the point to point intent that will be built. - * - * @param egressPoint egress connect point - * @return this builder - */ - public Builder egressPoint(ConnectPoint egressPoint) { - this.egressPoint = egressPoint; - return this; - } - - /** - * Builds a point to point intent from the accumulated parameters. - * - * @return point to point intent - */ - public PointToPointIntent build() { - - return new PointToPointIntent( - appId, - key, - selector, - treatment, - ingressPoint, - egressPoint, - constraints, - priority - ); - } - } - - - - /** - * Creates a new point-to-point intent with the supplied ingress/egress - * ports and constraints. - * - * @param appId application identifier - * @param key key of the intent - * @param selector traffic selector - * @param treatment treatment - * @param ingressPoint ingress port - * @param egressPoint egress port - * @param constraints optional list of constraints - * @param priority priority to use for flows generated by this intent - * @throws NullPointerException if {@code ingressPoint} or - * {@code egressPoints} or {@code appId} is null. - */ - private PointToPointIntent(ApplicationId appId, - Key key, - TrafficSelector selector, - TrafficTreatment treatment, - ConnectPoint ingressPoint, - ConnectPoint egressPoint, - List<Constraint> constraints, - int priority) { - super(appId, key, Collections.emptyList(), selector, treatment, constraints, - priority); - - checkArgument(!ingressPoint.equals(egressPoint), - "ingress and egress should be different (ingress: %s, egress: %s)", ingressPoint, egressPoint); - - this.ingressPoint = checkNotNull(ingressPoint); - this.egressPoint = checkNotNull(egressPoint); - } - - /** - * Constructor for serializer. - */ - protected PointToPointIntent() { - super(); - this.ingressPoint = null; - this.egressPoint = null; - } - - /** - * Returns the port on which the ingress traffic should be connected to - * the egress. - * - * @return ingress port - */ - public ConnectPoint ingressPoint() { - return ingressPoint; - } - - /** - * Returns the port on which the traffic should egress. - * - * @return egress port - */ - public ConnectPoint egressPoint() { - return egressPoint; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("selector", selector()) - .add("treatment", treatment()) - .add("ingress", ingressPoint) - .add("egress", egressPoint) - .add("constraints", constraints()) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/SinglePointToMultiPointIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/SinglePointToMultiPointIntent.java deleted file mode 100644 index de555cf0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/SinglePointToMultiPointIntent.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2014-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.net.intent; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import java.util.Collections; -import java.util.Set; -import java.util.List; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of single source, multiple destination connectivity intent. - */ -@Beta -public final class SinglePointToMultiPointIntent extends ConnectivityIntent { - - private final ConnectPoint ingressPoint; - private final Set<ConnectPoint> egressPoints; - - /** - * Creates a new single-to-multi point connectivity intent. - * - * @param appId application identifier - * @param key intent key - * @param selector traffic selector - * @param treatment treatment - * @param ingressPoint port on which traffic will ingress - * @param egressPoints set of ports on which traffic will egress - * @param constraints constraints to apply to the intent - * @param priority priority to use for flows generated by this intent - * @throws NullPointerException if {@code ingressPoint} or - * {@code egressPoints} is null - * @throws IllegalArgumentException if the size of {@code egressPoints} is - * not more than 1 - */ - private SinglePointToMultiPointIntent(ApplicationId appId, - Key key, - TrafficSelector selector, TrafficTreatment treatment, - ConnectPoint ingressPoint, Set<ConnectPoint> egressPoints, - List<Constraint> constraints, - int priority) { - super(appId, key, Collections.emptyList(), selector, treatment, constraints, - priority); - checkNotNull(egressPoints); - checkNotNull(ingressPoint); - checkArgument(!egressPoints.isEmpty(), "Egress point set cannot be empty"); - checkArgument(!egressPoints.contains(ingressPoint), - "Set of egresses should not contain ingress (ingress: %s)", ingressPoint); - - this.ingressPoint = checkNotNull(ingressPoint); - this.egressPoints = egressPoints; - } - - /** - * Returns a new single point to multi point intent builder. The application id, - * ingress point and egress points are required fields. If they are - * not set by calls to the appropriate methods, an exception will - * be thrown. - * - * @return single point to multi point builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of a single point to multi point intent. - */ - public static final class Builder extends ConnectivityIntent.Builder { - ConnectPoint ingressPoint; - Set<ConnectPoint> egressPoints; - - private Builder() { - // Hide constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the ingress point of the single point to multi point intent - * that will be built. - * - * @param ingressPoint ingress connect point - * @return this builder - */ - public Builder ingressPoint(ConnectPoint ingressPoint) { - this.ingressPoint = ingressPoint; - return this; - } - - /** - * Sets the egress points of the single point to multi point intent - * that will be built. - * - * @param egressPoints egress connect points - * @return this builder - */ - public Builder egressPoints(Set<ConnectPoint> egressPoints) { - this.egressPoints = ImmutableSet.copyOf(egressPoints); - return this; - } - - /** - * Builds a single point to multi point intent from the - * accumulated parameters. - * - * @return point to point intent - */ - public SinglePointToMultiPointIntent build() { - - return new SinglePointToMultiPointIntent( - appId, - key, - selector, - treatment, - ingressPoint, - egressPoints, - constraints, - priority - ); - } - } - - /** - * Constructor for serializer. - */ - protected SinglePointToMultiPointIntent() { - super(); - this.ingressPoint = null; - this.egressPoints = null; - } - - /** - * Returns the port on which the ingress traffic should be connected to the - * egress. - * - * @return ingress port - */ - public ConnectPoint ingressPoint() { - return ingressPoint; - } - - /** - * Returns the set of ports on which the traffic should egress. - * - * @return set of egress ports - */ - public Set<ConnectPoint> egressPoints() { - return egressPoints; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("selector", selector()) - .add("treatment", treatment()) - .add("ingress", ingressPoint) - .add("egress", egressPoints) - .add("constraints", constraints()) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java deleted file mode 100644 index b9f126f4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/TwoWayP2PIntent.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * 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.net.intent; - -import java.util.Collections; -import java.util.List; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; - -import com.google.common.base.MoreObjects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of bidirectional connectivity between two points in the network. - */ -@Beta -public final class TwoWayP2PIntent extends ConnectivityIntent { - - private final ConnectPoint one; - private final ConnectPoint two; - - - /** - * Creates a new host-to-host intent with the supplied host pair. - * - * @param appId application identifier - * @param key intent key - * @param one first host - * @param two second host - * @param selector action - * @param treatment ingress port - * @param constraints optional prioritized list of path selection constraints - * @param priority priority to use for flows generated by this intent - * @throws NullPointerException if {@code one} or {@code two} is null. - */ - private TwoWayP2PIntent(ApplicationId appId, Key key, - ConnectPoint one, ConnectPoint two, - TrafficSelector selector, - TrafficTreatment treatment, - List<Constraint> constraints, - int priority) { - super(appId, key, Collections.emptyList(), selector, treatment, constraints, - priority); - - // TODO: consider whether the case one and two are same is allowed - this.one = checkNotNull(one); - this.two = checkNotNull(two); - - } - - /** - * Returns a new two way intent builder. - * - * @return two way intent builder - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Builder of a point to point intent. - */ - public static final class Builder extends ConnectivityIntent.Builder { - ConnectPoint one; - ConnectPoint two; - - private Builder() { - // Hide constructor - } - - @Override - public Builder appId(ApplicationId appId) { - return (Builder) super.appId(appId); - } - - @Override - public Builder key(Key key) { - return (Builder) super.key(key); - } - - @Override - public Builder selector(TrafficSelector selector) { - return (Builder) super.selector(selector); - } - - @Override - public Builder treatment(TrafficTreatment treatment) { - return (Builder) super.treatment(treatment); - } - - @Override - public Builder constraints(List<Constraint> constraints) { - return (Builder) super.constraints(constraints); - } - - @Override - public Builder priority(int priority) { - return (Builder) super.priority(priority); - } - - /** - * Sets the first connection point of the two way intent that will be built. - * - * @param one first connect point - * @return this builder - */ - public Builder one(ConnectPoint one) { - this.one = one; - return this; - } - - /** - * Sets the second connection point of the two way intent that will be built. - * - * @param two second connect point - * @return this builder - */ - public Builder two(ConnectPoint two) { - this.two = two; - return this; - } - - /** - * Builds a point to point intent from the accumulated parameters. - * - * @return point to point intent - */ - public TwoWayP2PIntent build() { - - return new TwoWayP2PIntent( - appId, - key, - one, - two, - selector, - treatment, - constraints, - priority - ); - } - } - - /** - * Returns identifier of the first host. - * - * @return first host identifier - */ - public ConnectPoint one() { - return one; - } - - /** - * Returns identifier of the second host. - * - * @return second host identifier - */ - public ConnectPoint two() { - return two; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()) - .add("key", key()) - .add("appId", appId()) - .add("priority", priority()) - .add("resources", resources()) - .add("selector", selector()) - .add("treatment", treatment()) - .add("constraints", constraints()) - .add("one", one) - .add("two", two) - .toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java deleted file mode 100644 index f5439efd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/AnnotationConstraint.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2014 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.net.intent.constraint; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import org.onosproject.net.Link; -import org.onosproject.net.resource.link.LinkResourceService; - -import java.util.Objects; - -import static org.onosproject.net.AnnotationKeys.getAnnotatedValue; - -/** - * Constraint that evaluates an arbitrary link annotated value is under the specified threshold. - */ -@Beta -public class AnnotationConstraint extends BooleanConstraint { - - private final String key; - private final double threshold; - - /** - * Creates a new constraint to keep the value for the specified key - * of link annotation under the threshold. - * - * @param key key of link annotation - * @param threshold threshold value of the specified link annotation - */ - public AnnotationConstraint(String key, double threshold) { - this.key = key; - this.threshold = threshold; - } - - // Constructor for serialization - private AnnotationConstraint() { - this.key = ""; - this.threshold = 0; - } - - /** - * Returns the key of link annotation this constraint designates. - * @return key of link annotation - */ - public String key() { - return key; - } - - /** - * Returns the threshold this constraint ensures as link annotated value. - * - * @return threshold as link annotated value - */ - public double threshold() { - return threshold; - } - - @Override - public boolean isValid(Link link, LinkResourceService resourceService) { - double value = getAnnotatedValue(link, key); - - return value <= threshold; - } - - @Override - public double cost(Link link, LinkResourceService resourceService) { - if (isValid(link, resourceService)) { - return getAnnotatedValue(link, key); - } else { - return -1; - } - } - - @Override - public int hashCode() { - return Objects.hash(key, threshold); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (!(obj instanceof AnnotationConstraint)) { - return false; - } - - final AnnotationConstraint other = (AnnotationConstraint) obj; - return Objects.equals(this.key, other.key) && Objects.equals(this.threshold, other.threshold); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("key", key) - .add("threshold", threshold) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/AsymmetricPathConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/AsymmetricPathConstraint.java deleted file mode 100644 index e0f8614c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/AsymmetricPathConstraint.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2014 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.net.intent.constraint; - -import com.google.common.annotations.Beta; -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.intent.Constraint; -import org.onosproject.net.resource.link.LinkResourceService; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Constraint that serves as a request for asymmetric bi-directional path. - */ -@Beta -public class AsymmetricPathConstraint implements Constraint { - - @Override - public double cost(Link link, LinkResourceService resourceService) { - return 1; - } - - @Override - public boolean validate(Path path, LinkResourceService resourceService) { - return true; - } - - @Override - public int hashCode() { - return Objects.hashCode(true); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - return true; - } - - @Override - public String toString() { - return toStringHelper(this).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/BandwidthConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/BandwidthConstraint.java deleted file mode 100644 index 1b4a2600..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/BandwidthConstraint.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright 2014 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.net.intent.constraint; - -import com.google.common.annotations.Beta; - -import org.onlab.util.Bandwidth; -import org.onlab.util.DataRateUnit; -import org.onosproject.net.Link; -import org.onosproject.net.resource.link.BandwidthResourceRequest; -import org.onosproject.net.resource.link.LinkResourceService; -import org.onosproject.net.resource.ResourceRequest; -import org.onosproject.net.resource.ResourceType; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Constraint that evaluates links based on available bandwidths. - */ -@Beta -public final class BandwidthConstraint extends BooleanConstraint { - - private final Bandwidth bandwidth; - - /** - * Creates a new bandwidth constraint. - * - * @param bandwidth required bandwidth - */ - public BandwidthConstraint(Bandwidth bandwidth) { - this.bandwidth = checkNotNull(bandwidth, "Bandwidth cannot be null"); - } - - /** - * Creates a new bandwidth constraint. - * - * @param v required amount of bandwidth - * @param unit {@link DataRateUnit} of {@code v} - * @return {@link BandwidthConstraint} instance with given bandwidth requirement - */ - public static BandwidthConstraint of(double v, DataRateUnit unit) { - return new BandwidthConstraint(Bandwidth.of(v, unit)); - } - - // Constructor for serialization - private BandwidthConstraint() { - this.bandwidth = null; - } - - @Override - public boolean isValid(Link link, LinkResourceService resourceService) { - for (ResourceRequest request : resourceService.getAvailableResources(link)) { - if (request.type() == ResourceType.BANDWIDTH) { - BandwidthResourceRequest brr = (BandwidthResourceRequest) request; - if (brr.bandwidth().toDouble() >= bandwidth.bps()) { - return true; - } - } - } - return false; - } - - /** - * Returns the bandwidth required by this constraint. - * - * @return required bandwidth - */ - public Bandwidth bandwidth() { - return bandwidth; - } - - @Override - public int hashCode() { - return bandwidth.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final BandwidthConstraint other = (BandwidthConstraint) obj; - return Objects.equals(this.bandwidth, other.bandwidth); - } - - @Override - public String toString() { - return toStringHelper(this).add("bandwidth", bandwidth).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/BooleanConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/BooleanConstraint.java deleted file mode 100644 index f1d4ad9f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/BooleanConstraint.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2014 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.net.intent.constraint; - -import com.google.common.annotations.Beta; -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.intent.Constraint; -import org.onosproject.net.resource.link.LinkResourceService; - -/** - * Abstract base class for various constraints that evaluate link viability - * in a yes/no fashion. - */ -@Beta -public abstract class BooleanConstraint implements Constraint { - - /** - * Returns true if the specified link satisfies the constraint. - * - * @param link link to be validated - * @param resourceService resource service for checking available link resources - * @return true if link is viable - */ - public abstract boolean isValid(Link link, LinkResourceService resourceService); - - /** - * {@inheritDoc} - * - * Negative return value means the specified link does not satisfy this constraint. - * - * @param link {@inheritDoc} - * @param resourceService {@inheritDoc} - * @return {@inheritDoc} - */ - @Override - public double cost(Link link, LinkResourceService resourceService) { - return isValid(link, resourceService) ? +1 : -1; - } - - @Override - public boolean validate(Path path, LinkResourceService resourceService) { - for (Link link : path.links()) { - if (!isValid(link, resourceService)) { - return false; - } - } - return true; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/EncapsulationConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/EncapsulationConstraint.java deleted file mode 100644 index e8539398..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/EncapsulationConstraint.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2014-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.net.intent.constraint; - - -import org.onosproject.net.EncapsulationType; -import org.onosproject.net.Link; -import org.onosproject.net.resource.link.LinkResourceService; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Encapsulation to manage core transportation. - */ -public class EncapsulationConstraint extends BooleanConstraint { - - private EncapsulationType encapType; - - /** - * Creates a new encapsulation constraint. - * - * @param encapType the encapsulation type {@link EncapsulationType} - */ - public EncapsulationConstraint(EncapsulationType encapType) { - checkNotNull(encapType, "EncapsulationType cannot be null"); - this.encapType = encapType; - } - - - @Override - public boolean isValid(Link link, LinkResourceService resourceService) { - //TODO: validate the availability of the resources for each link in the path. - //e.g., availability of MPLSlabels, VLANID - - return true; - } - - /** - * Returns the encapsulation type required by this constraint. - * - * @return encapType - */ - public EncapsulationType encapType() { - return encapType; - } - - @Override - public int hashCode() { - return encapType.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final EncapsulationConstraint other = (EncapsulationConstraint) obj; - return this.encapType() == other.encapType(); - } - - @Override - public String toString() { - return toStringHelper(this).add("encapType", encapType).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java deleted file mode 100644 index eba28984..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LambdaConstraint.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2014 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.net.intent.constraint; - -import com.google.common.annotations.Beta; -import org.onosproject.net.IndexedLambda; -import org.onosproject.net.Link; -import org.onosproject.net.resource.link.LinkResourceService; -import org.onosproject.net.resource.ResourceRequest; -import org.onosproject.net.resource.ResourceType; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Constraint that evaluates links based on available lambda. - */ -@Beta -public class LambdaConstraint extends BooleanConstraint { - - private final IndexedLambda lambda; - - /** - * Creates a new optical lambda constraint. - * - * @param lambda optional lambda to indicate a specific lambda - */ - public LambdaConstraint(IndexedLambda lambda) { - this.lambda = lambda; - } - - // Constructor for serialization - private LambdaConstraint() { - this.lambda = null; - } - - @Override - public boolean isValid(Link link, LinkResourceService resourceService) { - for (ResourceRequest request : resourceService.getAvailableResources(link)) { - if (request.type() == ResourceType.LAMBDA) { - return true; - } - } - return false; - } - - /** - * Returns the lambda required by this constraint. - * - * @return required lambda - */ - public IndexedLambda lambda() { - return lambda; - } - - @Override - public int hashCode() { - return Objects.hashCode(lambda); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final LambdaConstraint other = (LambdaConstraint) obj; - return Objects.equals(this.lambda, other.lambda); - } - - @Override - public String toString() { - return toStringHelper(this).add("lambda", lambda).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LatencyConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LatencyConstraint.java deleted file mode 100644 index aecef879..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LatencyConstraint.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2014 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.net.intent.constraint; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.intent.Constraint; -import org.onosproject.net.resource.link.LinkResourceService; - -import java.time.Duration; -import java.time.temporal.ChronoUnit; -import java.util.Objects; - -import static org.onosproject.net.AnnotationKeys.LATENCY; -import static org.onosproject.net.AnnotationKeys.getAnnotatedValue; - -/** - * Constraint that evaluates the latency through a path. - */ -@Beta -public class LatencyConstraint implements Constraint { - - private final Duration latency; - - /** - * Creates a new constraint to keep under specified latency through a path. - * @param latency latency to be kept - */ - public LatencyConstraint(Duration latency) { - this.latency = latency; - } - - // Constructor for serialization - private LatencyConstraint() { - this.latency = Duration.ZERO; - } - - public Duration latency() { - return latency; - } - - @Override - public double cost(Link link, LinkResourceService resourceService) { - return getAnnotatedValue(link, LATENCY); - } - - @Override - public boolean validate(Path path, LinkResourceService resourceService) { - double pathLatency = path.links().stream().mapToDouble(link -> cost(link, resourceService)).sum(); - return Duration.of((long) pathLatency, ChronoUnit.MICROS).compareTo(latency) <= 0; - } - - @Override - public int hashCode() { - return latency.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (!(obj instanceof LatencyConstraint)) { - return false; - } - - final LatencyConstraint that = (LatencyConstraint) obj; - return Objects.equals(this.latency, that.latency); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("latency", latency) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LinkTypeConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LinkTypeConstraint.java deleted file mode 100644 index ffa4405b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/LinkTypeConstraint.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2014 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.net.intent.constraint; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableSet; -import org.onosproject.net.Link; -import org.onosproject.net.resource.link.LinkResourceService; - -import java.util.Objects; -import java.util.Set; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Constraint that evaluates links based on their type. - */ -@Beta -public class LinkTypeConstraint extends BooleanConstraint { - - private final Set<Link.Type> types; - private final boolean isInclusive; - - /** - * Creates a new constraint for requesting connectivity using or avoiding - * the specified link types. - * - * @param inclusive indicates whether the given link types are to be - * permitted or avoided - * @param types link types - */ - public LinkTypeConstraint(boolean inclusive, Link.Type... types) { - checkNotNull(types, "Link types cannot be null"); - checkArgument(types.length > 0, "There must be more than one type"); - this.types = ImmutableSet.copyOf(types); - this.isInclusive = inclusive; - } - - // Constructor for serialization - private LinkTypeConstraint() { - this.types = null; - this.isInclusive = false; - } - - @Override - public boolean isValid(Link link, LinkResourceService resourceService) { - boolean contains = types.contains(link.type()); - return isInclusive ? contains : !contains; - } - - /** - * Returns the set of link types. - * - * @return set of link types - */ - public Set<Link.Type> types() { - return types; - } - - /** - * Indicates if the constraint is inclusive or exclusive. - * - * @return true if inclusive - */ - public boolean isInclusive() { - return isInclusive; - } - - @Override - public int hashCode() { - return Objects.hash(types, isInclusive); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final LinkTypeConstraint other = (LinkTypeConstraint) obj; - return Objects.equals(this.types, other.types) && Objects.equals(this.isInclusive, other.isInclusive); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("inclusive", isInclusive) - .add("types", types) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/ObstacleConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/ObstacleConstraint.java deleted file mode 100644 index ca4f3fd3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/ObstacleConstraint.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2014-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.net.intent.constraint; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableSet; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Link; -import org.onosproject.net.resource.link.LinkResourceService; - -import java.util.Collections; -import java.util.Objects; -import java.util.Set; - -/** - * Constraint that evaluates elements not passed through. - */ -@Beta -public class ObstacleConstraint extends BooleanConstraint { - - private final Set<DeviceId> obstacles; - - /** - * Creates a new constraint that the specified device are not passed through. - * @param obstacles devices not to be passed - */ - public ObstacleConstraint(DeviceId... obstacles) { - this.obstacles = ImmutableSet.copyOf(obstacles); - } - - // Constructor for serialization - private ObstacleConstraint() { - this.obstacles = Collections.emptySet(); - } - - /** - * Returns the obstacle device ids. - * - * @return Set of obstacle device ids - */ - public Set<DeviceId> obstacles() { - return obstacles; - } - - @Override - public boolean isValid(Link link, LinkResourceService resourceService) { - DeviceId src = link.src().deviceId(); - DeviceId dst = link.dst().deviceId(); - - return !(obstacles.contains(src) || obstacles.contains(dst)); - } - - @Override - public int hashCode() { - return obstacles.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (!(obj instanceof ObstacleConstraint)) { - return false; - } - - final ObstacleConstraint that = (ObstacleConstraint) obj; - return Objects.equals(this.obstacles, that.obstacles); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("obstacles", obstacles) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/PartialFailureConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/PartialFailureConstraint.java deleted file mode 100644 index 827859b1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/PartialFailureConstraint.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.net.intent.constraint; - -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.intent.ConnectivityIntent; -import org.onosproject.net.intent.Constraint; -import org.onosproject.net.intent.Intent; -import org.onosproject.net.resource.link.LinkResourceService; - -/** - * A constraint that allows intents that can only be partially compiled - * (i.e. MultiPointToSinglePointIntent or SinglePointToMultiPointIntent) - * to be installed when some endpoints or paths are not found. - */ -public class PartialFailureConstraint implements Constraint { - @Override - public double cost(Link link, LinkResourceService resourceService) { - return 1; - } - - @Override - public boolean validate(Path path, LinkResourceService resourceService) { - return true; - } - - public static boolean intentAllowsPartialFailure(Intent intent) { - if (intent instanceof ConnectivityIntent) { - ConnectivityIntent connectivityIntent = (ConnectivityIntent) intent; - return connectivityIntent.constraints().stream() - .anyMatch(c -> c instanceof PartialFailureConstraint); - } - return false; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/WaypointConstraint.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/WaypointConstraint.java deleted file mode 100644 index 4839feec..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/WaypointConstraint.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2014 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.net.intent.constraint; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.intent.Constraint; -import org.onosproject.net.resource.link.LinkResourceService; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Constraint that evaluates elements passed through in order. - */ -@Beta -public class WaypointConstraint implements Constraint { - - private final List<DeviceId> waypoints; - - /** - * Creates a new waypoint constraint. - * - * @param waypoints waypoints - */ - public WaypointConstraint(DeviceId... waypoints) { - checkNotNull(waypoints, "waypoints cannot be null"); - checkArgument(waypoints.length > 0, "length of waypoints should be more than 0"); - this.waypoints = ImmutableList.copyOf(waypoints); - } - - // Constructor for serialization - private WaypointConstraint() { - this.waypoints = Collections.emptyList(); - } - - public List<DeviceId> waypoints() { - return waypoints; - } - - @Override - public double cost(Link link, LinkResourceService resourceService) { - // Always consider the number of hops - return 1; - } - - @Override - public boolean validate(Path path, LinkResourceService resourceService) { - LinkedList<DeviceId> waypoints = new LinkedList<>(this.waypoints); - DeviceId current = waypoints.poll(); - // This is safe because Path class ensures the number of links are more than 0 - Link firstLink = path.links().get(0); - if (firstLink.src().elementId().equals(current)) { - current = waypoints.poll(); - } - - for (Link link : path.links()) { - if (link.dst().elementId().equals(current)) { - current = waypoints.poll(); - // Empty waypoints means passing through all waypoints in the specified order - if (current == null) { - return true; - } - } - } - - return false; - } - - @Override - public int hashCode() { - return waypoints.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (!(obj instanceof WaypointConstraint)) { - return false; - } - - final WaypointConstraint that = (WaypointConstraint) obj; - return Objects.equals(this.waypoints, that.waypoints); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("waypoints", waypoints) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/package-info.java deleted file mode 100644 index 60d8df16..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/constraint/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Definitions of constraints used to refine intent specifications. - */ -package org.onosproject.net.intent.constraint; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/package-info.java deleted file mode 100644 index a86b3118..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/intent/package-info.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2014-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. - */ - -/** - * Set of abstractions for conveying high-level intents for treatment of - * selected network traffic by allowing applications to express the - * <em>what</em> rather than the <em>how</em>. This makes such instructions - * largely independent of topology and device specifics, thus allowing them to - * survive topology mutations. - * <p> - * The controller core provides a suite of built-in intents and their compilers - * and installers. However, the intent framework is extensible in that it allows - * additional intents and their compilers or installers to be added - * dynamically at run-time. This allows others to enhance the initial arsenal of - * connectivity and policy-based intents available in base controller software. - * </p> - * <p> - * The following diagram depicts the state transition diagram for each top-level intent:<br> - * <img src="doc-files/intent-states.png" alt="ONOS intent states"> - * </p> - * <p> - * The controller core accepts the intent specifications and translates them, via a - * process referred to as intent compilation, to installable intents, which are - * essentially actionable operations on the network environment. - * These actions are carried out by intent installation process, which results - * in some changes to the environment, e.g. tunnel links being provisioned, - * flow rules being installed on the data-plane, optical lambdas being reserved. - * </p> - * <p> - * After an intent is submitted by an application, it will be sent immediately - * (but asynchronously) into a compiling phase, then to installing phase and if - * all goes according to plan into installed state. Once an application decides - * it no longer wishes the intent to hold, it can withdraw it. This describes - * the nominal flow. However, it may happen that some issue is encountered. - * For example, an application may ask for an objective that is not currently - * achievable, e.g. connectivity across to unconnected network segments. - * If this is the case, the compiling phase may fail to produce a set of - * installable intents and instead result in a failed compile. If this occurs, - * only a change in the environment can trigger a transition back to the - * compiling state. - * </p> - * <p> - * Similarly, an issue may be encountered during the installation phase in - * which case the framework will attempt to recompile the intent to see if an - * alternate approach is available. If so, the intent will be sent back to - * installing phase. Otherwise, it will be parked in the failed state. Another - * scenario that’s very likely to be encountered is where the intent is - * successfully compiled and installed, but due to some topology event, such - * as a downed or downgraded link, loss of throughput may occur or connectivity - * may be lost altogether, thus impacting the viability of a previously - * satisfied intent. If this occurs, the framework will attempt to recompile - * the intent, and if an alternate approach is available, its installation - * will be attempted. Otherwise, the original top-level intent will be parked - * in the failed state. - * </p> - * <p> - * Please note that all *ing states, depicted in orange, are transitional and - * are expected to last only a brief amount of time. The rest of the states - * are parking states where the intent may spent some time; except for the - * submitted state of course. There, the intent may pause, but only briefly, - * while the system determines where to perform the compilation or while it - * performs global recomputation/optimization across all prior intents. - * </p> - * <p> - * The figure below depicts the general interactions between different - * components of the intent subsystem.<br> - * <img src="doc-files/intent-design.png" alt="ONOS intent subsystem design"> - * </p> - */ -package org.onosproject.net.intent; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/DefaultLinkDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/DefaultLinkDescription.java deleted file mode 100644 index cba17640..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/DefaultLinkDescription.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.AbstractDescription; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.Link; -import org.onosproject.net.SparseAnnotations; -import com.google.common.base.Objects; - -/** - * Default implementation of immutable link description entity. - */ -public class DefaultLinkDescription extends AbstractDescription - implements LinkDescription { - - private final ConnectPoint src; - private final ConnectPoint dst; - private final Link.Type type; - - /** - * Creates a link description using the supplied information. - * - * @param src link source - * @param dst link destination - * @param type link type - * @param annotations optional key/value annotations - */ - public DefaultLinkDescription(ConnectPoint src, ConnectPoint dst, - Link.Type type, SparseAnnotations... annotations) { - super(annotations); - this.src = src; - this.dst = dst; - this.type = type; - } - - @Override - public ConnectPoint src() { - return src; - } - - @Override - public ConnectPoint dst() { - return dst; - } - - @Override - public Link.Type type() { - return type; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("src", src()) - .add("dst", dst()) - .add("type", type()).toString(); - } - - @Override - public int hashCode() { - return Objects.hashCode(super.hashCode(), src, dst, type); - } - - @Override - public boolean equals(Object object) { - if (object != null && getClass() == object.getClass()) { - if (!super.equals(object)) { - return false; - } - DefaultLinkDescription that = (DefaultLinkDescription) object; - return Objects.equal(this.src, that.src) - && Objects.equal(this.dst, that.dst) - && Objects.equal(this.type, that.type); - } - return false; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkAdminService.java deleted file mode 100644 index a0b5e1e2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkAdminService.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2014-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.net.link; - -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; - -/** - * Service for administering the inventory of infrastructure links. - */ -public interface LinkAdminService extends LinkService { - - /** - * Removes all infrastructure links leading to and from the - * specified connection point. - * - * @param connectPoint connection point - */ - void removeLinks(ConnectPoint connectPoint); - - /** - * Removes all infrastructure links leading to and from the - * specified device. - * - * @param deviceId device identifier - */ - void removeLinks(DeviceId deviceId); - - /** - * Removes all links between between the specified src and - * dst connection points. - * - * @param src link source - * @param dst link destination - */ - void removeLink(ConnectPoint src, ConnectPoint dst); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkDescription.java deleted file mode 100644 index f85718b7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkDescription.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.Description; -import org.onosproject.net.Link; - -/** - * Describes an infrastructure link. - */ -public interface LinkDescription extends Description { - - /** - * Returns the link source. - * - * @return links source - */ - ConnectPoint src(); - - /** - * Returns the link destination. - * - * @return links destination - */ - ConnectPoint dst(); - - /** - * Returns the link type. - * - * @return link type - */ - Link.Type type(); - - // Add further link attributes -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkEvent.java deleted file mode 100644 index d87bce06..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkEvent.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import org.onosproject.event.AbstractEvent; -import org.onosproject.net.Link; - -/** - * Describes infrastructure link event. - */ -public class LinkEvent extends AbstractEvent<LinkEvent.Type, Link> { - - /** - * Type of link events. - */ - public enum Type { - /** - * Signifies that a new link has been detected. - */ - LINK_ADDED, - - /** - * Signifies that a link has been updated or changed state. - */ - LINK_UPDATED, - - /** - * Signifies that a link has been removed. - */ - LINK_REMOVED - } - - /** - * Creates an event of a given type and for the specified link and the - * current time. - * - * @param type link event type - * @param link event link subject - */ - public LinkEvent(Type type, Link link) { - super(type, link); - } - - /** - * Creates an event of a given type and for the specified link and time. - * - * @param type link event type - * @param link event link subject - * @param time occurrence time - */ - public LinkEvent(Type type, Link link, long time) { - super(type, link, time); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkListener.java deleted file mode 100644 index 82f6bdb9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving infrastructure link related events. - */ -public interface LinkListener extends EventListener<LinkEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProvider.java deleted file mode 100644 index ed4348c7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProvider.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import org.onosproject.net.provider.Provider; - -/** - * Abstraction of an entity providing information about infrastructure links - * to the core. - */ -public interface LinkProvider extends Provider { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProviderRegistry.java deleted file mode 100644 index 57a05d93..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProviderRegistry.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import org.onosproject.net.provider.ProviderRegistry; - -/** - * Abstraction of an infrastructure link provider registry. - */ -public interface LinkProviderRegistry - extends ProviderRegistry<LinkProvider, LinkProviderService> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProviderService.java deleted file mode 100644 index f5ef52a2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkProviderService.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.provider.ProviderService; - -/** - * Means for injecting link information into the core. - */ -public interface LinkProviderService extends ProviderService<LinkProvider> { - - /** - * Signals that an infrastructure link has been detected. - * - * @param linkDescription link information - */ - void linkDetected(LinkDescription linkDescription); - - /** - * Signals that an infrastructure link has disappeared. - * - * @param linkDescription link information - */ - void linkVanished(LinkDescription linkDescription); - - /** - * Signals that infrastructure links associated with the specified - * connect point have vanished. - * - * @param connectPoint connect point - */ - void linksVanished(ConnectPoint connectPoint); - - /** - * Signals that infrastructure links associated with the specified - * device have vanished. - * - * @param deviceId device identifier - */ - void linksVanished(DeviceId deviceId); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkService.java deleted file mode 100644 index c27e3110..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkService.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import java.util.Set; - -import org.onosproject.event.ListenerService; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Link; - -/** - * Service for interacting with the inventory of infrastructure links. - */ -public interface LinkService - extends ListenerService<LinkEvent, LinkListener> { - - /** - * Returns the count of all known infrastructure links. - * - * @return number of infrastructure links - */ - int getLinkCount(); - - /** - * Returns a collection of all known infrastructure links. - * - * @return all infrastructure links - */ - Iterable<Link> getLinks(); - - /** - * Returns a collection of all active infrastructure links. - * - * @return all infrastructure links - */ - Iterable<Link> getActiveLinks(); - - /** - * Returns set of all infrastructure links leading to and from the - * specified device. - * - * @param deviceId device identifier - * @return set of device links - */ - Set<Link> getDeviceLinks(DeviceId deviceId); - - /** - * Returns set of all infrastructure links leading from the specified device. - * - * @param deviceId device identifier - * @return set of device egress links - */ - Set<Link> getDeviceEgressLinks(DeviceId deviceId); - - /** - * Returns set of all infrastructure links leading to the specified device. - * - * @param deviceId device identifier - * @return set of device ingress links - */ - Set<Link> getDeviceIngressLinks(DeviceId deviceId); - - /** - * Returns set of all infrastructure links leading to and from the - * specified connection point. - * - * @param connectPoint connection point - * @return set of links - */ - Set<Link> getLinks(ConnectPoint connectPoint); - - /** - * Returns set of all infrastructure links leading from the specified - * connection point. - * - * @param connectPoint connection point - * @return set of device egress links - */ - Set<Link> getEgressLinks(ConnectPoint connectPoint); - - /** - * Returns set of all infrastructure links leading to the specified - * connection point. - * - * @param connectPoint connection point - * @return set of device ingress links - */ - Set<Link> getIngressLinks(ConnectPoint connectPoint); - - // FIXME: I don't think this makes sense; discuss and remove or adjust return - // to be a Set<Link> or add Link.Type parameter - /** - * Returns the infrastructure links between the specified source - * and destination connection points. - * - * @param src source connection point - * @param dst destination connection point - * @return link from source to destination; null if none found - */ - Link getLink(ConnectPoint src, ConnectPoint dst); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkStore.java deleted file mode 100644 index 04c8773b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkStore.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Link; -import org.onosproject.net.provider.ProviderId; -import org.onosproject.store.Store; - -import java.util.Set; - -/** - * Manages inventory of infrastructure links; not intended for direct use. - */ -public interface LinkStore extends Store<LinkEvent, LinkStoreDelegate> { - - /** - * Returns the number of links in the store. - * - * @return number of links - */ - int getLinkCount(); - - /** - * Returns an iterable collection of all links in the inventory. - * - * @return collection of all links - */ - Iterable<Link> getLinks(); - - /** - * Returns all links egressing from the specified device. - * - * @param deviceId device identifier - * @return set of device links - */ - Set<Link> getDeviceEgressLinks(DeviceId deviceId); - - /** - * Returns all links ingressing from the specified device. - * - * @param deviceId device identifier - * @return set of device links - */ - Set<Link> getDeviceIngressLinks(DeviceId deviceId); - - /** - * Returns the link between the two end-points. - * - * @param src source connection point - * @param dst destination connection point - * @return link or null if one not found between the end-points - */ - Link getLink(ConnectPoint src, ConnectPoint dst); - - /** - * Returns all links egressing from the specified connection point. - * - * @param src source connection point - * @return set of connection point links - */ - Set<Link> getEgressLinks(ConnectPoint src); - - /** - * Returns all links ingressing to the specified connection point. - * - * @param dst destination connection point - * @return set of connection point links - */ - Set<Link> getIngressLinks(ConnectPoint dst); - - /** - * Creates a new link, or updates an existing one, based on the given - * information. - * - * @param providerId provider identity - * @param linkDescription link description - * @return create or update link event, or null if no change resulted - */ - LinkEvent createOrUpdateLink(ProviderId providerId, - LinkDescription linkDescription); - - /** - * Removes the link, or marks it as inactive if the link is durable, - * based on the specified information. - * - * @param src link source - * @param dst link destination - * @return remove or update link event, or null if no change resulted - */ - LinkEvent removeOrDownLink(ConnectPoint src, ConnectPoint dst); - - /** - * Removes the link based on the specified information. - * - * @param src link source - * @param dst link destination - * @return remove link event, or null if no change resulted - */ - LinkEvent removeLink(ConnectPoint src, ConnectPoint dst); - - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkStoreDelegate.java deleted file mode 100644 index 1f66dd49..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/LinkStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.link; - -import org.onosproject.store.StoreDelegate; - -/** - * Infrastructure link store delegate abstraction. - */ -public interface LinkStoreDelegate extends StoreDelegate<LinkEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/package-info.java deleted file mode 100644 index 57aa5fa2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/link/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Infrastructure link model & related services API definitions. - */ -package org.onosproject.net.link; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java deleted file mode 100644 index 979194c3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * 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.net.mcast; - -import com.google.common.annotations.Beta; -import org.onosproject.event.AbstractEvent; -import org.onosproject.net.ConnectPoint; - -import java.util.Optional; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * An entity representing a multicast event. Event either add or remove - * sinks or sources. - */ -@Beta -public class McastEvent extends AbstractEvent<McastEvent.Type, McastRoute> { - - private final Optional<ConnectPoint> sink; - private final Optional<ConnectPoint> source; - - public enum Type { - /** - * A new mcast route has been added. - */ - ROUTE_ADDED, - - /** - * A mcast route has been removed. - */ - ROUTE_REMOVED, - - /** - * A source for a mcast route (ie. the subject) has been added. - */ - SOURCE_ADDED, - - /** - * A sink for a mcast route (ie. the subject) has been added. - */ - SINK_ADDED, - - /** - * A source for a mcast route (ie. the subject) has been removed. - */ - SINK_REMOVED - } - - private McastEvent(McastEvent.Type type, McastRoute subject) { - super(type, subject); - sink = Optional.empty(); - source = Optional.empty(); - } - - private McastEvent(McastEvent.Type type, McastRoute subject, long time) { - super(type, subject, time); - sink = Optional.empty(); - source = Optional.empty(); - } - - public McastEvent(McastEvent.Type type, McastRoute subject, - ConnectPoint sink, - ConnectPoint source) { - super(type, subject); - this.sink = Optional.ofNullable(sink); - this.source = Optional.ofNullable(source); - } - - public McastEvent(McastEvent.Type type, McastRoute subject, long time, - ConnectPoint sink, - ConnectPoint source) { - super(type, subject, time); - this.sink = Optional.ofNullable(sink); - this.source = Optional.ofNullable(source); - } - - /** - * The sink which has been removed or added. The field may not be set - * if the sink has not been detected yet or has been removed. - * - * @return an optional connect point - */ - public Optional<ConnectPoint> sink() { - return sink; - } - - /** - * The source which has been removed or added. - - * @return an optional connect point - */ - public Optional<ConnectPoint> source() { - return source; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("type", type()) - .add("route", subject()) - .add("source", source) - .add("sinks", sink).toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastListener.java deleted file mode 100644 index 06449b99..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastListener.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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.net.mcast; - -import com.google.common.annotations.Beta; -import org.onosproject.event.EventListener; - -/** - * A listener interface for multicast events. - */ -@Beta -public interface McastListener extends EventListener<McastEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastRoute.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastRoute.java deleted file mode 100644 index ff1292bf..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/McastRoute.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * 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.net.mcast; - -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import org.onlab.packet.IpPrefix; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * An entity representing a multicast route consisting of a source - * and a multicast group address. - */ -@Beta -public class McastRoute { - - public enum Type { - /** - * Route originates from PIM. - */ - PIM, - - /** - * Route originates from IGMP. - */ - IGMP, - - /** - * Route originates from other config (ie. REST, CLI). - */ - STATIC - } - - private final IpPrefix source; - private final IpPrefix group; - private final Type type; - - public McastRoute(IpPrefix source, IpPrefix group, Type type) { - checkNotNull(source, "Multicast route must have a source"); - checkNotNull(group, "Multicast route must specify a group address"); - checkNotNull(type, "Must indicate what type of route"); - this.source = source; - this.group = group; - this.type = type; - } - - /** - * Fetches the source address of this route. - * - * @return an ip address - */ - public IpPrefix source() { - return source; - } - - /** - * Fetches the group address of this route. - * - * @return an ip address - */ - public IpPrefix group() { - return group; - } - - /** - * Obtains how this route was created. - * @return a type of route - - */ - public Type type() { - return type; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("source", source) - .add("group", group) - .add("origin", type) - .toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - McastRoute that = (McastRoute) o; - return Objects.equal(source, that.source) && - Objects.equal(group, that.group) && - Objects.equal(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hashCode(source, group, type); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java deleted file mode 100644 index bf65033a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.net.mcast; - -import com.google.common.annotations.Beta; -import org.onosproject.event.ListenerService; -import org.onosproject.net.ConnectPoint; - -import java.util.List; - -/** - * A service interface for maintaining multicast information. - */ -@Beta -public interface MulticastRouteService - extends ListenerService<McastEvent, McastListener> { - - /** - * Adds a route to the information base. - * - * @param route a multicast route - */ - void add(McastRoute route); - - /** - * Removes a route from the information base. - * - * @param route a multicast route - */ - void remove(McastRoute route); - - /** - * Adds a source connection to the route from where the - * data stream is originating. - * - * @param route the multicast route - * @param connectPoint a source connect point - */ - void addSource(McastRoute route, ConnectPoint connectPoint); - - /** - * Adds a sink to the route to which a data stream should be - * sent to. - * - * @param route a multicast route - * @param connectPoint a sink connect point - */ - void addSink(McastRoute route, ConnectPoint connectPoint); - - /** - * Removes a sink from the route. - * - * @param route the multicast route - * @param connectPoint a sink connect point - */ - void removeSink(McastRoute route, ConnectPoint connectPoint); - - /** - * Find the data source association for this multicast route. - * - * @param route a multicast route - * @return a connect point - */ - ConnectPoint fetchSource(McastRoute route); - - /** - * Find the list of sinks for this route. - * - * @param route a multicast route - * @return a list of connect points - */ - List<ConnectPoint> fetchSinks(McastRoute route); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/package-info.java deleted file mode 100644 index e8dcc7b8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/mcast/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/** - * External model entities of the multicast RIB. - */ -package org.onosproject.net.mcast;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/Band.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/Band.java deleted file mode 100644 index 2bfafad2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/Band.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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.net.meter; - -/** - * Represents a band used within a meter. - */ -public interface Band { - - /** - * Specifies the type of band. - */ - enum Type { - /** - * Simple rate limiter which drops packets - * when the rate is exceeded. - */ - DROP, - - /** - * defines a simple DiffServ policer that remark - * the drop precedence of the DSCP field in the - * IP header of the packets that exceed the band - * rate value. - */ - REMARK - } - - /** - * The rate at which this meter applies. - * - * @return the long value of the rate - */ - long rate(); - - /** - * The burst size at which the meter applies. - * - * @return the long value of the size - */ - long burst(); - - /** - * Only meaningful in the case of a REMARK band type. - * indicates by which amount the drop precedence of - * the packet should be increase if the band is exceeded. - * - * @return a short value - */ - short dropPrecedence(); - - /** - * Signals the type of band to create. - * - * @return a band type - */ - Type type(); - - /** - * Returns the packets seen by this band. - * - * @return a long value - */ - long packets(); - - /** - * Return the bytes seen by this band. - * - * @return a byte counter - */ - long bytes(); - - interface Builder { - - /** - * Assigns a rate to this band. The units for this rate - * are defined in the encapsulating meter. - * - * @param rate a long value - * @return this - */ - Builder withRate(long rate); - - /** - * Assigns a burst size to this band. Only meaningful if - * the encapsulating meter is of burst type. - * - * @param burstSize a long value. - * @return this - */ - Builder burstSize(long burstSize); - - /** - * Assigns the drop precedence for this band. Only meaningful if - * the band is of REMARK type. - * - * @param prec a short value - * @return this - */ - Builder dropPrecedence(short prec); - - /** - * Assigns the @See Type of this band. - * - * @param type a band type - * @return this - */ - Builder ofType(Type type); - - /** - * Builds the band. - * - * @return a band - */ - Band build(); - - } - - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/BandEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/BandEntry.java deleted file mode 100644 index 03145e91..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/BandEntry.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.net.meter; - -/** - * Represents a stored band. - */ -public interface BandEntry extends Band { - - /** - * Sets the number of packets seen by this band. - * - * @param packets a packet count - */ - void setPackets(long packets); - - /** - * Sets the number of bytes seen by this band. - * - * @param bytes a byte counter - */ - void setBytes(long bytes); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java deleted file mode 100644 index 58a24766..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * 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.net.meter; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; - -/** - * A default implementation for a Band. - */ -public final class DefaultBand implements Band, BandEntry { - - private final Type type; - private final long rate; - //TODO: should be made optional - private final Long burstSize; - private final Short prec; - private long packets; - private long bytes; - - public DefaultBand(Type type, long rate, - Long burstSize, Short prec) { - this.type = type; - this.rate = rate; - this.burstSize = burstSize; - this.prec = prec; - } - - @Override - public long rate() { - return rate; - } - - @Override - public long burst() { - return burstSize; - } - - @Override - public short dropPrecedence() { - return prec; - } - - @Override - public Type type() { - return type; - } - - @Override - public long packets() { - return packets; - } - - @Override - public long bytes() { - return bytes; - } - - @Override - public void setPackets(long packets) { - this.packets = packets; - } - - @Override - public void setBytes(long bytes) { - this.bytes = bytes; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("rate", rate) - .add("burst-size", burstSize) - .add("type", type) - .add("drop-precedence", prec).toString(); - } - - public static Builder builder() { - return new Builder(); - } - - public static final class Builder implements Band.Builder { - - private long rate; - private Long burstSize; - private Short prec; - private Type type; - - @Override - public Band.Builder withRate(long rate) { - this.rate = rate; - return this; - } - - @Override - public Band.Builder burstSize(long burstSize) { - this.burstSize = burstSize; - return this; - } - - @Override - public Band.Builder dropPrecedence(short prec) { - this.prec = prec; - return this; - } - - @Override - public Band.Builder ofType(Type type) { - this.type = type; - return this; - } - - @Override - public DefaultBand build() { - checkArgument(type != Type.REMARK && prec == null, - "Only REMARK bands can have a precendence."); - - return new DefaultBand(type, rate, burstSize, prec); - } - - - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java deleted file mode 100644 index f7d6210d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * 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.net.meter; - -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableSet; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; - -import java.util.Collection; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * A default implementation of a meter. - */ -public final class DefaultMeter implements Meter, MeterEntry { - - - private final MeterId id; - private final ApplicationId appId; - private final Unit unit; - private final boolean burst; - private final Collection<Band> bands; - private final DeviceId deviceId; - - private MeterState state; - private long life; - private long refCount; - private long packets; - private long bytes; - - private DefaultMeter(DeviceId deviceId, MeterId id, ApplicationId appId, - Unit unit, boolean burst, - Collection<Band> bands) { - this.deviceId = deviceId; - this.id = id; - this.appId = appId; - this.unit = unit; - this.burst = burst; - this.bands = bands; - } - - @Override - public DeviceId deviceId() { - return deviceId; - } - - @Override - public MeterId id() { - return id; - } - - @Override - public ApplicationId appId() { - return appId; - } - - @Override - public Unit unit() { - return unit; - } - - @Override - public boolean isBurst() { - return burst; - } - - @Override - public Collection<Band> bands() { - return bands; - } - - @Override - public MeterState state() { - return state; - } - - @Override - public long life() { - return life; - } - - @Override - public long referenceCount() { - return refCount; - } - - @Override - public long packetsSeen() { - return packets; - } - - @Override - public long bytesSeen() { - return bytes; - } - - public static Builder builder() { - return new Builder(); - } - - @Override - public void setState(MeterState state) { - this.state = state; - } - - @Override - public void setLife(long life) { - this.life = life; - } - - @Override - public void setReferenceCount(long count) { - this.refCount = count; - } - - @Override - public void setProcessedPackets(long packets) { - this.packets = packets; - } - - @Override - public void setProcessedBytes(long bytes) { - this.bytes = bytes; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("device", deviceId) - .add("id", id) - .add("appId", appId.name()) - .add("unit", unit) - .add("isBurst", burst) - .add("state", state) - .add("bands", bands).toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - DefaultMeter that = (DefaultMeter) o; - return Objects.equal(id, that.id) && - Objects.equal(appId, that.appId) && - Objects.equal(unit, that.unit) && - Objects.equal(deviceId, that.deviceId); - } - - @Override - public int hashCode() { - return Objects.hashCode(id, appId, unit, deviceId); - } - - public static final class Builder implements Meter.Builder { - - private MeterId id; - private ApplicationId appId; - private Unit unit = Unit.KB_PER_SEC; - private boolean burst = false; - private Collection<Band> bands; - private DeviceId deviceId; - - - @Override - public Meter.Builder forDevice(DeviceId deviceId) { - this.deviceId = deviceId; - return this; - } - - @Override - public Meter.Builder withId(MeterId id) { - this.id = id; - return this; - } - - @Override - public Meter.Builder fromApp(ApplicationId appId) { - this.appId = appId; - return this; - } - - @Override - public Meter.Builder withUnit(Unit unit) { - this.unit = unit; - return this; - } - - @Override - public Meter.Builder burst() { - this.burst = true; - return this; - } - - @Override - public Meter.Builder withBands(Collection<Band> bands) { - this.bands = ImmutableSet.copyOf(bands); - return this; - } - - @Override - public DefaultMeter build() { - checkNotNull(deviceId, "Must specify a device"); - checkNotNull(bands, "Must have bands."); - checkArgument(bands.size() > 0, "Must have at least one band."); - checkNotNull(appId, "Must have an application id"); - checkNotNull(id, "Must specify a meter id"); - return new DefaultMeter(deviceId, id, appId, unit, burst, bands); - } - - - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java deleted file mode 100644 index 51394c30..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/DefaultMeterRequest.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * 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.net.meter; - -import com.google.common.collect.ImmutableSet; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; - -import java.util.Collection; -import java.util.Optional; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * A default implementation of a meter. - */ -public final class DefaultMeterRequest implements MeterRequest { - - - - private final ApplicationId appId; - private final Meter.Unit unit; - private final boolean burst; - private final Collection<Band> bands; - private final DeviceId deviceId; - private final Optional<MeterContext> context; - private final Type op; - - private DefaultMeterRequest(DeviceId deviceId, ApplicationId appId, - Meter.Unit unit, boolean burst, - Collection<Band> bands, MeterContext context, - Type op) { - this.deviceId = deviceId; - this.appId = appId; - this.unit = unit; - this.burst = burst; - this.bands = bands; - this.context = Optional.ofNullable(context); - this.op = op; - } - - @Override - public DeviceId deviceId() { - return deviceId; - } - - - @Override - public ApplicationId appId() { - return appId; - } - - @Override - public Meter.Unit unit() { - return unit; - } - - @Override - public boolean isBurst() { - return burst; - } - - @Override - public Collection<Band> bands() { - return bands; - } - - @Override - public Optional<MeterContext> context() { - return context; - } - - - - public static Builder builder() { - return new Builder(); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("device", deviceId) - .add("appId", appId.name()) - .add("unit", unit) - .add("isBurst", burst) - .add("bands", bands).toString(); - } - - public static final class Builder implements MeterRequest.Builder { - - private ApplicationId appId; - private Meter.Unit unit = Meter.Unit.KB_PER_SEC; - private boolean burst = false; - private Collection<Band> bands; - private DeviceId deviceId; - private MeterContext context; - private Optional<MeterId> desiredId = Optional.empty(); - - - @Override - public MeterRequest.Builder forDevice(DeviceId deviceId) { - this.deviceId = deviceId; - return this; - } - - @Override - public MeterRequest.Builder fromApp(ApplicationId appId) { - this.appId = appId; - return this; - } - - @Override - public MeterRequest.Builder withUnit(Meter.Unit unit) { - this.unit = unit; - return this; - } - - @Override - public MeterRequest.Builder burst() { - this.burst = true; - return this; - } - - @Override - public MeterRequest.Builder withBands(Collection<Band> bands) { - this.bands = ImmutableSet.copyOf(bands); - return this; - } - - @Override - public MeterRequest.Builder withContext(MeterContext context) { - this.context = context; - return this; - } - - @Override - public MeterRequest add() { - validate(); - return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, - context, Type.ADD); - } - - @Override - public MeterRequest remove() { - validate(); - return new DefaultMeterRequest(deviceId, appId, unit, burst, bands, - context, Type.REMOVE); - } - - private void validate() { - checkNotNull(deviceId, "Must specify a device"); - checkNotNull(bands, "Must have bands."); - checkArgument(bands.size() > 0, "Must have at least one band."); - checkNotNull(appId, "Must have an application id"); - } - - - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/Meter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/Meter.java deleted file mode 100644 index 98ebc350..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/Meter.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; - -import java.util.Collection; - -/** - * Represents a generalized meter to be deployed on a device. - */ -public interface Meter { - - enum Unit { - /** - * Packets per second. - */ - PKTS_PER_SEC, - - /** - * Kilo bits per second. - */ - KB_PER_SEC - } - - /** - * The target device for this meter. - * - * @return a device id - */ - DeviceId deviceId(); - - /** - * This meters id. - * - * @return a meter id - */ - MeterId id(); - - /** - * The id of the application which created this meter. - * - * @return an application id - */ - ApplicationId appId(); - - /** - * The unit used within this meter. - * - * @return the unit - */ - Unit unit(); - - /** - * Signals whether this meter applies to bursts only. - * - * @return a boolean - */ - boolean isBurst(); - - /** - * The collection of bands to apply on the dataplane. - * - * @return a collection of bands. - */ - Collection<Band> bands(); - - /** - * Fetches the state of this meter. - * - * @return a meter state - */ - MeterState state(); - - /** - * The lifetime in seconds of this meter. - * - * @return number of seconds - */ - long life(); - - /** - * The number of flows pointing to this meter. - * - * @return a reference count - */ - long referenceCount(); - - /** - * Number of packets processed by this meter. - * - * @return a packet count - */ - long packetsSeen(); - - /** - * Number of bytes processed by this meter. - * - * @return a byte count - */ - long bytesSeen(); - - /** - * A meter builder. - */ - interface Builder { - - /** - * Assigns the target device for this meter. - * - * @param deviceId a device id - * @return this - */ - Builder forDevice(DeviceId deviceId); - - /** - * Assigns the id to this meter. - * - * @param id a e - * @return this - */ - Builder withId(MeterId id); - - /** - * Assigns the application that built this meter. - * - * @param appId an application id - * @return this - */ - Builder fromApp(ApplicationId appId); - - /** - * Assigns the @See Unit to use for this meter. - * Defaults to kb/s - * - * @param unit a unit - * @return this - */ - Builder withUnit(Unit unit); - - /** - * Sets this meter as applicable to burst traffic only. - * Defaults to false. - * - * @return this - */ - Builder burst(); - - /** - * Assigns bands to this meter. There must be at least one band. - * - * @param bands a collection of bands - * @return this - */ - Builder withBands(Collection<Band> bands); - - /** - * Builds the meter based on the specified parameters. - * - * @return a meter - */ - Meter build(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterContext.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterContext.java deleted file mode 100644 index 574bdca9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterContext.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.net.meter; - -/** - * A context permitting the application to be notified when the - * meter installation has been successful. - */ -public interface MeterContext { - - /** - * Invoked on successful installation of the meter. - * - * @param op a meter - */ - default void onSuccess(MeterRequest op) {} - - /** - * Invoked when error is encountered while installing a meter. - * - * @param op a meter - * @param reason the reason why it failed - */ - default void onError(MeterRequest op, MeterFailReason reason) {} -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterEntry.java deleted file mode 100644 index 178a564c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterEntry.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.net.meter; - -/** - * Represents a stored meter. - */ -public interface MeterEntry extends Meter { - - /** - * Updates the state of this meter. - * - * @param state a meter state - */ - void setState(MeterState state); - - /** - * Set the amount of time the meter has existed in seconds. - * - * @param life number of seconds - */ - void setLife(long life); - - /** - * Sets the number of flows which are using this meter. - * - * @param count a reference count. - */ - void setReferenceCount(long count); - - /** - * Updates the number of packets seen by this meter. - * - * @param packets a packet count. - */ - void setProcessedPackets(long packets); - - /** - * Updates the number of bytes seen by the meter. - * - * @param bytes a byte counter. - */ - void setProcessedBytes(long bytes); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java deleted file mode 100644 index 72f0a53a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.event.AbstractEvent; - -/** - * Entity that represents Meter events. - */ -public class MeterEvent extends AbstractEvent<MeterEvent.Type, Meter> { - - - public enum Type { - /** - * A meter addition was requested. - */ - METER_ADD_REQ, - - /** - * A meter removal was requested. - */ - METER_REM_REQ - } - - - /** - * Creates an event of a given type and for the specified meter and the - * current time. - * - * @param type meter event type - * @param meter event subject - */ - public MeterEvent(Type type, Meter meter) { - super(type, meter); - } - - /** - * Creates an event of a given type and for the specified meter and time. - * - * @param type meter event type - * @param meter event subject - * @param time occurrence time - */ - public MeterEvent(Type type, Meter meter, long time) { - super(type, meter, time); - } - - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterFailReason.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterFailReason.java deleted file mode 100644 index 8683e2a2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterFailReason.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.net.meter; - -/** - * Enum used to represent a meter failure condition. - */ -public enum MeterFailReason { - /** - * A meter with the same identifier already exists. - * Essentially a duplicate meter exists. - */ - EXISTING_METER, - - /** - * The device does not support any more meters. - */ - OUT_OF_METERS, - - /** - * The device does not support any more bands for this meter. - */ - OUT_OF_BANDS, - - /** - * The meter that was attempted to be modified is unknown. - */ - UNKNOWN, - - /** - * The operation for this meter installation timed out. - */ - TIMEOUT, - - /** - * Invalid meter definition. - */ - INVALID_METER, - - /** - * The target device is unknown. - */ - UNKNOWN_DEVICE, - - /** - * Unknown command. - */ - UNKNOWN_COMMAND, - - /** - * Unknown flags. - */ - UNKNOWN_FLAGS, - - /** - * Bad rate value. - */ - BAD_RATE, - - /** - * Bad burst size value. - */ - BAD_BURST, - - /** - * Bad band. - */ - BAD_BAND, - - /** - * Bad value value. - */ - BAD_BAND_VALUE - - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterId.java deleted file mode 100644 index 872de2d8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterId.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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.net.meter; - -import static com.google.common.base.Preconditions.checkArgument; - -/** - * A representation of a meter id. - * Uniquely identifies a meter system wide. - */ -public final class MeterId { - - static final long MAX = 0xFFFF0000; - - private final long id; - - public static final MeterId SLOWPATH = new MeterId(0xFFFFFFFD); - public static final MeterId CONTROLLER = new MeterId(0xFFFFFFFE); - public static final MeterId ALL = new MeterId(0xFFFFFFFF); - - private MeterId(long id) { - checkArgument(id >= MAX, "id cannot be larger than 0xFFFF0000"); - this.id = id; - } - - /** - * The integer representation of the meter id. - * - * @return a long - */ - public long id() { - return id; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - MeterId meterId = (MeterId) o; - - return id == meterId.id; - - } - - @Override - public int hashCode() { - return Long.hashCode(id); - } - - @Override - public String toString() { - return Long.toHexString(this.id); - } - - public static MeterId meterId(long id) { - return new MeterId(id); - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterKey.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterKey.java deleted file mode 100644 index 5bc01b02..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterKey.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * 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.net.meter; - -import com.google.common.base.Objects; -import org.onosproject.net.DeviceId; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * A meter key represents a meter uniquely. - */ -public final class MeterKey { - - private final DeviceId deviceId; - private final MeterId id; - - private MeterKey(DeviceId deviceId, MeterId id) { - this.deviceId = deviceId; - this.id = id; - } - - public DeviceId deviceId() { - return deviceId; - } - - public MeterId meterId() { - return id; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - MeterKey meterKey = (MeterKey) o; - return Objects.equal(deviceId, meterKey.deviceId) && - Objects.equal(id, meterKey.id); - } - - @Override - public int hashCode() { - return Objects.hashCode(deviceId, id); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("deviceId", deviceId) - .add("meterId", id).toString(); - } - - public static MeterKey key(DeviceId deviceId, MeterId id) { - return new MeterKey(deviceId, id); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterListener.java deleted file mode 100644 index 0a5e203f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving Meter related events. - */ -public interface MeterListener extends EventListener<MeterEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterOperation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterOperation.java deleted file mode 100644 index 437dd269..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterOperation.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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.net.meter; - -import com.google.common.base.MoreObjects; -import com.google.common.base.Objects; - -/** - * Representation of an operation on the meter table. - */ -public class MeterOperation { - - - /** - * Tyoe of meter operation. - */ - public enum Type { - ADD, - REMOVE, - MODIFY - } - - private final Meter meter; - private final Type type; - - - public MeterOperation(Meter meter, Type type) { - this.meter = meter; - this.type = type; - } - - /** - * Returns the type of operation. - * - * @return type - */ - public Type type() { - return type; - } - - /** - * Returns the meter. - * - * @return a meter - */ - public Meter meter() { - return meter; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("meter", meter) - .add("type", type) - .toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - MeterOperation that = (MeterOperation) o; - return Objects.equal(meter, that.meter) && - Objects.equal(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hashCode(meter, type); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterOperations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterOperations.java deleted file mode 100644 index 92b0c3aa..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterOperations.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.net.meter; - -import com.google.common.collect.ImmutableList; - -import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Immutable collection of meter operation to be used between - * core and provider layers of group subsystem. - * - */ -public final class MeterOperations { - private final List<MeterOperation> operations; - - /** - * Creates a immutable list of meter operation. - * - * @param operations list of meter operation - */ - public MeterOperations(List<MeterOperation> operations) { - this.operations = ImmutableList.copyOf(checkNotNull(operations)); - } - - /** - * Returns immutable list of Meter operation. - * - * @return list of Meter operation - */ - public List<MeterOperation> operations() { - return operations; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProvider.java deleted file mode 100644 index 4655e234..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProvider.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.provider.Provider; - -/** - * Abstraction of a Meter provider. - */ -public interface MeterProvider extends Provider { - - /** - * Performs a batch of meter operation on the specified device with the - * specified parameters. - * - * @param deviceId device identifier on which the batch of group - * operations to be executed - * @param meterOps immutable list of meter operation - */ - void performMeterOperation(DeviceId deviceId, - MeterOperations meterOps); - - - /** - * Performs a meter operation on the specified device with the - * specified parameters. - * - * @param deviceId device identifier on which the batch of group - * operations to be executed - * @param meterOp a meter operation - */ - void performMeterOperation(DeviceId deviceId, - MeterOperation meterOp); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProviderRegistry.java deleted file mode 100644 index 019ca19a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProviderRegistry.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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.net.meter; - - -import org.onosproject.net.provider.ProviderRegistry; - -/** - * Abstraction for a meter provider registry. - */ -public interface MeterProviderRegistry - extends ProviderRegistry<MeterProvider, MeterProviderService> { -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProviderService.java deleted file mode 100644 index 85c0c43e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterProviderService.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.provider.ProviderService; - -import java.util.Collection; - -/** - * Service through which meter providers can inject information - * into the core. - */ -public interface MeterProviderService extends ProviderService<MeterProvider> { - - /** - * Notifies the core that a meter operaton failed for a - * specific reason. - * @param operation the failed operation - * @param reason the failure reason - */ - void meterOperationFailed(MeterOperation operation, - MeterFailReason reason); - - /** - * Pushes the collection of meters observed on the data plane as - * well as their associated statistics. - * - * @param deviceId a device id - * @param meterEntries a collection of meter entries - */ - void pushMeterMetrics(DeviceId deviceId, - Collection<Meter> meterEntries); - - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java deleted file mode 100644 index fd11ca41..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterRequest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.DeviceId; - -import java.util.Collection; -import java.util.Optional; - -/** - * Represents a generalized meter request to be deployed on a device. - */ -public interface MeterRequest { - - enum Type { - ADD, - MODIFY, - REMOVE - } - - /** - * The target device for this meter. - * - * @return a device id - */ - DeviceId deviceId(); - - /** - * The id of the application which created this meter. - * - * @return an application id - */ - ApplicationId appId(); - - /** - * The unit used within this meter. - * - * @return the unit - */ - Meter.Unit unit(); - - /** - * Signals whether this meter applies to bursts only. - * - * @return a boolean - */ - boolean isBurst(); - - /** - * The collection of bands to apply on the dataplane. - * - * @return a collection of bands. - */ - Collection<Band> bands(); - - /** - * Returns the callback context for this meter. - * - * @return an optional meter context - */ - Optional<MeterContext> context(); - - /** - * A meter builder. - */ - interface Builder { - - /** - * Assigns the target device for this meter. - * - * @param deviceId a device id - * @return this - */ - Builder forDevice(DeviceId deviceId); - - /** - * Assigns the application that built this meter. - * - * @param appId an application id - * @return this - */ - Builder fromApp(ApplicationId appId); - - /** - * Assigns the @See Unit to use for this meter. - * Defaults to kb/s - * - * @param unit a unit - * @return this - */ - Builder withUnit(Meter.Unit unit); - - /** - * Sets this meter as applicable to burst traffic only. - * Defaults to false. - * - * @return this - */ - Builder burst(); - - /** - * Assigns bands to this meter. There must be at least one band. - * - * @param bands a collection of bands - * @return this - */ - Builder withBands(Collection<Band> bands); - - /** - * Assigns an execution context for this meter request. - * - * @param context a meter context - * @return this - */ - Builder withContext(MeterContext context); - - /** - * Requests the addition of a meter. - * - * @return a meter request - */ - MeterRequest add(); - - /** - * Requests the removal of a meter. - * - * @return a meter request - */ - MeterRequest remove(); - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterService.java deleted file mode 100644 index 2e07cb67..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterService.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.event.ListenerService; -import org.onosproject.net.DeviceId; - -import java.util.Collection; - -/** - * Service for add/updating and removing meters. Meters are - * are assigned to flow to rate limit them and provide a certain - * quality of service. - */ -public interface MeterService - extends ListenerService<MeterEvent, MeterListener> { - - /** - * Adds a meter to the system and performs it installation. - * - * @param meter a meter - * @return a meter (with a meter id) - */ - Meter submit(MeterRequest meter); - - /** - * Remove a meter from the system and the dataplane. - * - * @param meter a meter to remove - * @param meterId the meter id of the meter to remove. - */ - void withdraw(MeterRequest meter, MeterId meterId); - - /** - * Fetch the meter by the meter id. - * - * @param deviceId a device id - * @param id a meter id - * @return a meter - */ - Meter getMeter(DeviceId deviceId, MeterId id); - - /** - * Fetches all the meters. - * - * @return a collection of meters - */ - Collection<Meter> getAllMeters(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterState.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterState.java deleted file mode 100644 index 3b936099..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterState.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.net.meter; - -/** - * Represents the state of the meter as seen by the store. - */ -public enum MeterState { - - /** - * The meter is in the process of being added. - */ - PENDING_ADD, - - /** - * THe meter has been added. - */ - ADDED, - - /** - * The meter is in the process of being removed. - */ - PENDING_REMOVE, - - /** - * The meter has been removed. - */ - REMOVED, - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java deleted file mode 100644 index f429e95a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.store.Store; - -import java.util.Collection; -import java.util.concurrent.CompletableFuture; - -/** - * Entity that stores and distributed meter objects. - */ -public interface MeterStore extends Store<MeterEvent, MeterStoreDelegate> { - - /** - * Adds a meter to the store. - * - * @param meter a meter - * @return a future indicating the result of the store operation - */ - CompletableFuture<MeterStoreResult> storeMeter(Meter meter); - - /** - * Deletes a meter from the store. - * - * @param meter a meter - * @return a future indicating the result of the store operation - */ - CompletableFuture<MeterStoreResult> deleteMeter(Meter meter); - - /** - * Updates a meter whose meter id is the same as the passed meter. - * - * @param meter a new meter - * @return a future indicating the result of the store operation - */ - CompletableFuture<MeterStoreResult> updateMeter(Meter meter); - - /** - * Updates a given meter's state with the provided state. - * - * @param meter a meter - */ - void updateMeterState(Meter meter); - - /** - * Obtains a meter matching the given meter key. - * - * @param key a meter key - * @return a meter - */ - Meter getMeter(MeterKey key); - - /** - * Returns all meters stored in the store. - * - * @return a collection of meters - */ - Collection<Meter> getAllMeters(); - - /** - * Update the store by deleting the failed meter. - * Notifies the delegate that the meter failed to allow it - * to nofity the app. - * - * @param op a failed meter operation - * @param reason a failure reason - */ - void failedMeter(MeterOperation op, MeterFailReason reason); - - /** - * Delete this meter immediately. - * @param m a meter - */ - void deleteMeterNow(Meter m); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStoreDelegate.java deleted file mode 100644 index 9bfeb42f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.net.meter; - -import org.onosproject.store.StoreDelegate; - -/** - * Meter store delegate abstraction. - */ -public interface MeterStoreDelegate extends StoreDelegate<MeterEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStoreResult.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStoreResult.java deleted file mode 100644 index 7a26746f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/MeterStoreResult.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.net.meter; - -import java.util.Optional; - -/** - * An entity used to indicate whether the store operation passed. - */ -public final class MeterStoreResult { - - - private final Type type; - private final Optional<MeterFailReason> reason; - - public enum Type { - SUCCESS, - FAIL - } - - private MeterStoreResult(Type type, MeterFailReason reason) { - this.type = type; - this.reason = Optional.ofNullable(reason); - } - - public Type type() { - return type; - } - - public Optional<MeterFailReason> reason() { - return reason; - } - - /** - * A successful store opertion. - * - * @return a meter store result - */ - public static MeterStoreResult success() { - return new MeterStoreResult(Type.SUCCESS, null); - } - - /** - * A failed store operation. - * - * @param reason a failure reason - * @return a meter store result - */ - public static MeterStoreResult fail(MeterFailReason reason) { - return new MeterStoreResult(Type.FAIL, reason); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/package-info.java deleted file mode 100644 index 258634da..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/meter/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/** - * Flow meter model and related services. - */ -package org.onosproject.net.meter;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceAdminService.java deleted file mode 100644 index 28c429bd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceAdminService.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.net.newresource; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableList; - -import java.util.List; - -/** - * Service for administering resource service behavior. - */ -@Beta -public interface ResourceAdminService { - /** - * Registers the specified resources. - * - * @param resources resources to be registered - * @return true if registration is successfully done, false otherwise. Registration - * succeeds when each resource is not registered or unallocated. - */ - default boolean registerResources(ResourcePath... resources) { - return registerResources(ImmutableList.copyOf(resources)); - } - - /** - * Registers the specified resources. - * - * @param resources resources to be registered - * @return true if registration is successfully done, false otherwise. Registration - * succeeds when each resource is not registered or unallocated. - */ - boolean registerResources(List<ResourcePath> resources); - - /** - * Unregisters the specified resources. - * - * @param resources resources to be unregistered - * @return true if unregistration is successfully done, false otherwise. Unregistration - * succeeds when each resource is not registered or unallocated. - */ - default boolean unregisterResources(ResourcePath... resources) { - return unregisterResources(ImmutableList.copyOf(resources)); - } - - /** - * Unregisters the specified resources. - * - * @param resources resources to be unregistered - * @return true if unregistration is successfully done, false otherwise. Unregistration - * succeeds when each resource is not registered or unallocated. - */ - boolean unregisterResources(List<ResourcePath> resources); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceAllocation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceAllocation.java deleted file mode 100644 index e6980267..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceAllocation.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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.net.newresource; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Represents allocation of resource which is identified by the specifier. - */ -@Beta -public class ResourceAllocation { - - private final ResourcePath resource; - private final ResourceConsumer consumer; - - /** - * Creates an instance with the specified subject, resource and consumer. - * - * @param resource resource of the subject - * @param consumer consumer ot this resource - */ - public ResourceAllocation(ResourcePath resource, ResourceConsumer consumer) { - this.resource = checkNotNull(resource); - this.consumer = consumer; - } - - // for serialization - private ResourceAllocation() { - this.resource = null; - this.consumer = null; - } - - /** - * Returns the specifier of the resource this allocation uses. - * - * @return the specifier of the resource this allocation uses - */ - public ResourcePath resource() { - return resource; - } - - /** - * Returns the consumer of this resource. - * - * @return the consumer of this resource - */ - public ResourceConsumer consumer() { - return consumer; - } - - @Override - public int hashCode() { - return Objects.hash(resource, consumer); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof ResourceAllocation)) { - return false; - } - final ResourceAllocation that = (ResourceAllocation) obj; - return Objects.equals(this.resource, that.resource) - && Objects.equals(this.consumer, that.consumer); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("resource", resource) - .add("consumer", consumer) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceConsumer.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceConsumer.java deleted file mode 100644 index 1f67e204..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceConsumer.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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.net.newresource; - -import com.google.common.annotations.Beta; - -/** - * Marker interface representing an entity using resource. - */ -@Beta -public interface ResourceConsumer { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceEvent.java deleted file mode 100644 index 98abf301..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceEvent.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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.net.newresource; - -import com.google.common.annotations.Beta; -import org.onosproject.event.AbstractEvent; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Describes an event related to a resource. - */ -@Beta -public final class ResourceEvent extends AbstractEvent<ResourceEvent.Type, ResourcePath> { - - /** - * Type of resource events. - */ - @Beta - public enum Type { - /** - * Signifies that a new resource has been detected. - */ - RESOURCE_ADDED, - - /** - * Signifies that a resource has been removed. - */ - RESOURCE_REMOVED - } - - /** - * Create a resource event. - * - * @param type type of resource event - * @param subject subject of resource event - */ - public ResourceEvent(Type type, ResourcePath subject) { - super(checkNotNull(type), checkNotNull(subject)); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceListener.java deleted file mode 100644 index 3f871900..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceListener.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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.net.newresource; - -import com.google.common.annotations.Beta; -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving resource related events. - */ -@Beta -public interface ResourceListener extends EventListener<ResourceEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourcePath.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourcePath.java deleted file mode 100644 index 72f8ac01..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourcePath.java +++ /dev/null @@ -1,309 +0,0 @@ -/* - * 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.net.newresource; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; -import org.onosproject.net.DeviceId; -import org.onosproject.net.PortNumber; - -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -/** - * An object that is used to locate a resource in a network. - * A ResourcePath represents a path that is hierarchical and composed of a sequence - * of elementary resources that are not globally identifiable. A ResourcePath can be a globally - * unique resource identifier. - * - * Two types of resource are considered. One is discrete type and the other is continuous type. - * Discrete type resource is a resource whose amount is measured as a discrete unit. VLAN ID and - * MPLS label are examples of discrete type resource. Continuous type resource is a resource whose - * amount is measured as a continuous value. Bandwidth is an example of continuous type resource. - * A double value is associated with a continuous type value. - * - * Users of this class must keep the semantics of resources regarding the hierarchical structure. - * For example, resource path, Device:1/Port:1/VLAN ID:100, is valid, but resource path, - * VLAN ID:100/Device:1/Port:1 is not valid because a link is not a sub-component of a VLAN ID. - */ -@Beta -public abstract class ResourcePath { - - private final Discrete parent; - private final Object last; - - public static final Discrete ROOT = new Discrete(); - - public static ResourcePath discrete(DeviceId device) { - return new Discrete(ImmutableList.of(device)); - } - - /** - * Creates an resource path which represents a discrete-type resource from the specified components. - * - * @param device device ID which is the first component of the path - * @param components following components of the path. The order represents hierarchical structure of the resource. - * @return resource path instance - */ - public static ResourcePath discrete(DeviceId device, Object... components) { - return new Discrete(ImmutableList.builder() - .add(device) - .add(components) - .build()); - } - - /** - * Creates an resource path which represents a discrete-type resource from the specified components. - * - * @param device device ID which is the first component of the path - * @param port port number which is the second component of the path - * @param components following components of the path. The order represents hierarchical structure of the resource. - * @return resource path instance - */ - public static ResourcePath discrete(DeviceId device, PortNumber port, Object... components) { - return new Discrete(ImmutableList.builder() - .add(device) - .add(port) - .add(components) - .build()); - } - - /** - * Creates an resource path which represents a continuous-type resource from the specified components. - * - * @param value amount of the resource - * @param device device ID which is the first component of the path - * @param components following components of the path. The order represents hierarchical structure of the resource. - * @return resource path instance - */ - public static ResourcePath continuous(double value, DeviceId device, Object... components) { - checkArgument(components.length > 0, - "Length of components must be greater thant 0, but " + components.length); - - return new Continuous(ImmutableList.builder() - .add(device) - .add(components) - .build(), value); - } - - /** - * Creates an resource path which represents a continuous-type resource from the specified components. - * - * @param value amount of the resource - * @param device device ID which is the first component of the path. - * @param port port number which is the second component of the path. - * @param components following components of the path. The order represents hierarchical structure of the resource. - * @return resource path instance - */ - public static ResourcePath continuous(double value, DeviceId device, PortNumber port, Object... components) { - return new Continuous(ImmutableList.builder() - .add(device) - .add(port) - .add(components) - .build(), value); - } - - /** - * Creates an resource path from the specified components. - * - * @param components components of the path. The order represents hierarchical structure of the resource. - */ - protected ResourcePath(List<Object> components) { - checkNotNull(components); - checkArgument(!components.isEmpty()); - - LinkedList<Object> children = new LinkedList<>(components); - this.last = children.pollLast(); - if (children.isEmpty()) { - this.parent = ROOT; - } else { - this.parent = new Discrete(children); - } - } - - /** - * Creates an resource path from the specified parent and child. - * - * @param parent the parent of this resource - * @param last a child of the parent - */ - protected ResourcePath(Discrete parent, Object last) { - checkNotNull(parent); - checkNotNull(last); - - this.parent = parent; - this.last = last; - } - - // for serialization - private ResourcePath() { - this.parent = null; - this.last = null; - } - - /** - * Returns the components of this resource path. - * - * @return the components of this resource path - */ - public List<Object> components() { - LinkedList<Object> components = new LinkedList<>(); - - ResourcePath current = this; - while (current.parent().isPresent()) { - components.addFirst(current.last); - current = current.parent; - } - - return components; - } - - /** - * Returns the parent resource path of this instance. - * E.g. if this path is Link:1/VLAN ID:100, the return value is the resource path for Link:1. - * - * @return the parent resource path of this instance. - * If there is no parent, empty instance will be returned. - */ - public Optional<Discrete> parent() { - return Optional.ofNullable(parent); - } - - /** - * Returns a child resource path of this instance with specifying the child object. - * The child resource path is discrete-type. - * - * @param child child object - * @return a child resource path - */ - public ResourcePath child(Object child) { - checkState(this instanceof Discrete); - - return new Discrete((Discrete) this, child); - } - - /** - * Returns a child resource path of this instance with specifying a child object and - * value. The child resource path is continuous-type. - * - * @param child child object - * @param value value - * @return a child resource path - */ - public ResourcePath child(Object child, double value) { - checkState(this instanceof Discrete); - - return new Continuous((Discrete) this, child, value); - } - - /** - * Returns the last component of this instance. - * - * @return the last component of this instance. - * The return value is equal to the last object of {@code components()}. - */ - public Object last() { - return last; - } - - @Override - public int hashCode() { - return Objects.hash(this.parent, this.last); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof ResourcePath)) { - return false; - } - final ResourcePath that = (ResourcePath) obj; - return Objects.equals(this.parent, that.parent) - && Objects.equals(this.last, that.last); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("parent", parent) - .add("last", last) - .toString(); - } - - /** - * Represents a resource path which specifies a resource which can be measured - * as a discrete unit. A VLAN ID and a MPLS label of a link are examples of the resource. - * <p> - * Note: This class is exposed to the public, but intended to be used in the resource API - * implementation only. It is not for resource API user. - * </p> - */ - @Beta - public static final class Discrete extends ResourcePath { - private Discrete() { - super(); - } - - private Discrete(List<Object> components) { - super(components); - } - - private Discrete(Discrete parent, Object last) { - super(parent, last); - } - } - - /** - * Represents a resource path which specifies a resource which can be measured - * as continuous value. Bandwidth of a link is an example of the resource. - * <p> - * Note: This class is exposed to the public, but intended to be used in the resource API - * implementation only. It is not for resource API user. - */ - @Beta - public static final class Continuous extends ResourcePath { - // Note: value is not taken into account for equality - private final double value; - - private Continuous(List<Object> components, double value) { - super(components); - this.value = value; - } - - public Continuous(Discrete parent, Object last, double value) { - super(parent, last); - this.value = value; - } - - /** - * Returns the value of the resource amount. - * - * @return the value of the resource amount - */ - public double value() { - return value; - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceService.java deleted file mode 100644 index 966de500..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceService.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * 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.net.newresource; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableList; -import org.onosproject.event.ListenerService; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Service for allocating/releasing resource(s) and retrieving allocation(s) and availability. - */ -@Beta -public interface ResourceService extends ListenerService<ResourceEvent, ResourceListener> { - /** - * Allocates the specified resource to the specified user. - * - * @param consumer resource user which the resource is allocated to - * @param resource resource to be allocated - * @return allocation information enclosed by Optional. If the allocation fails, the return value is empty - */ - default Optional<ResourceAllocation> allocate(ResourceConsumer consumer, ResourcePath resource) { - checkNotNull(consumer); - checkNotNull(resource); - - List<ResourceAllocation> allocations = allocate(consumer, ImmutableList.of(resource)); - if (allocations.isEmpty()) { - return Optional.empty(); - } - - assert allocations.size() == 1; - - ResourceAllocation allocation = allocations.get(0); - - assert allocation.resource().equals(resource); - - // cast is ensured by the assertions above - return Optional.of(allocation); - } - - /** - * Transactionally allocates the specified resources to the specified user. - * All allocations are made when this method succeeds, or no allocation is made when this method fails. - * - * @param consumer resource user which the resources are allocated to - * @param resources resources to be allocated - * @return non-empty list of allocation information if succeeded, otherwise empty list - */ - List<ResourceAllocation> allocate(ResourceConsumer consumer, List<ResourcePath> resources); - - /** - * Transactionally allocates the specified resources to the specified user. - * All allocations are made when this method succeeds, or no allocation is made when this method fails. - * - * @param consumer resource user which the resources are allocated to - * @param resources resources to be allocated - * @return non-empty list of allocation information if succeeded, otherwise empty list - */ - default List<ResourceAllocation> allocate(ResourceConsumer consumer, ResourcePath... resources) { - checkNotNull(consumer); - checkNotNull(resources); - - return allocate(consumer, Arrays.asList(resources)); - } - - /** - * Releases the specified resource allocation. - * - * @param allocation resource allocation to be released - * @return true if succeeded, otherwise false - */ - default boolean release(ResourceAllocation allocation) { - checkNotNull(allocation); - - return release(ImmutableList.of(allocation)); - } - - /** - * Transactionally releases the specified resource allocations. - * All allocations are released when this method succeeded, or no allocation is released when this method fails. - * - * @param allocations resource allocations to be released - * @return true if succeeded, otherwise false - */ - boolean release(List<ResourceAllocation> allocations); - - /** - * Transactionally releases the specified resource allocations. - * All allocations are released when this method succeeded, or no allocation is released when this method fails. - * - * @param allocations resource allocations to be released - * @return true if succeeded, otherwise false - */ - default boolean release(ResourceAllocation... allocations) { - checkNotNull(allocations); - - return release(ImmutableList.copyOf(allocations)); - } - - /** - * Transactionally releases the resources allocated to the specified consumer. - * All allocations are released when this method succeeded, or no allocation is released when this method fails. - * - * @param consumer consumer whose allocated resources are to be released - * @return true if succeeded, otherwise false - */ - boolean release(ResourceConsumer consumer); - - /** - * Returns resource allocation of the specified resource. - * - * @param resource resource to check the allocation - * @return allocation information enclosed by Optional. - * If the resource is not allocated, the return value is empty. - */ - Optional<ResourceAllocation> getResourceAllocation(ResourcePath resource); - - /** - * Returns allocated resources being as children of the specified parent and being the specified resource type. - * - * @param parent parent resource path - * @param cls class to specify a type of resource - * @param <T> type of the resource - * @return non-empty collection of resource allocations if resources are allocated with the subject and type, - * empty collection if no resource is allocated with the subject and type - */ - <T> Collection<ResourceAllocation> getResourceAllocations(ResourcePath parent, Class<T> cls); - - /** - * Returns resources allocated to the specified consumer. - * - * @param consumer consumer whose allocated resources are to be returned - * @return resources allocated to the consumer - */ - Collection<ResourceAllocation> getResourceAllocations(ResourceConsumer consumer); - - /** - * Returns resource paths that point available child resources under the specified resource path. - * - * @param parent parent resource path - * @return available resource paths under the specified resource path - */ - Collection<ResourcePath> getAvailableResources(ResourcePath parent); - - /** - * Returns the availability of the specified resource. - * - * @param resource resource to check the availability - * @return true if available, otherwise false - */ - boolean isAvailable(ResourcePath resource); - - // TODO: listener and event mechanism need to be considered -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStore.java deleted file mode 100644 index 7c67430e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStore.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * 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.net.newresource; - -import com.google.common.annotations.Beta; -import org.onosproject.store.Store; - -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -/** - * Service for storing resource and consumer information. - */ -@Beta -public interface ResourceStore extends Store<ResourceEvent, ResourceStoreDelegate> { - - /** - * Registers the resources in transactional way. - * Resource registration must be done before resource allocation. The state after completion - * of this method is all the resources are registered, or none of the given resources is registered. - * The whole registration fails when any one of the resource can't be registered. - * - * @param resources resources to be registered - * @return true if the registration succeeds, false otherwise - */ - boolean register(List<ResourcePath> resources); - - /** - * Unregisters the resources in transactional way. - * The state after completion of this method is all the resources are unregistered, - * or none of the given resources is unregistered. The whole unregistration fails when any one of the - * resource can't be unregistered. - * - * @param resources resources to be unregistered - * @return true if the registration succeeds, false otherwise - */ - boolean unregister(List<ResourcePath> resources); - - /** - * Allocates the specified resources to the specified consumer in transactional way. - * The state after completion of this method is all the resources are allocated to the consumer, - * or no resource is allocated to the consumer. The whole allocation fails when any one of - * the resource can't be allocated. - * - * @param resources resources to be allocated - * @param consumer resource consumer which the resources are allocated to - * @return true if the allocation succeeds, false otherwise. - */ - boolean allocate(List<ResourcePath> resources, ResourceConsumer consumer); - - /** - * Releases the specified resources allocated to the specified corresponding consumers - * in transactional way. The state after completion of this method is all the resources - * are released from the consumer, or no resource is released. The whole release fails - * when any one of the resource can't be released. The size of the list of resources and - * that of consumers must be equal. The resource and consumer with the same position from - * the head of each list correspond to each other. - * - * @param resources resources to be released - * @param consumers resource consumers to whom the resource allocated to - * @return true if succeeds, otherwise false - */ - boolean release(List<ResourcePath> resources, List<ResourceConsumer> consumers); - - /** - * Returns the resource consumer to whom the specified resource is allocated. - * - * @param resource resource whose allocated consumer to be returned - * @return resource consumer who are allocated the resource - */ - Optional<ResourceConsumer> getConsumer(ResourcePath resource); - - /** - * Returns a collection of the resources allocated to the specified consumer. - * - * @param consumer resource consumer whose allocated resource are searched for - * @return a collection of the resources allocated to the specified consumer - */ - Collection<ResourcePath> getResources(ResourceConsumer consumer); - - /** - * Returns a collection of the child resources of the specified parent. - * - * @param parent parent of the resource to be returned - * @return a collection of the child resources of the specified resource - */ - Collection<ResourcePath> getChildResources(ResourcePath parent); - - /** - * Returns a collection of the resources which are children of the specified parent and - * whose type is the specified class. - * - * @param parent parent of the resources to be returned - * @param cls class instance of the children - * @param <T> type of the resource - * @return a collection of the resources which belongs to the specified subject and - * whose type is the specified class. - */ - <T> Collection<ResourcePath> getAllocatedResources(ResourcePath parent, Class<T> cls); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStoreDelegate.java deleted file mode 100644 index a0b9bb25..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/ResourceStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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.net.newresource; - -import org.onosproject.store.StoreDelegate; - -/** - * Resource store delegate abstraction. - */ -public interface ResourceStoreDelegate extends StoreDelegate<ResourceEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/package-info.java deleted file mode 100644 index 52bb8588..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/newresource/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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. - */ - -/** - * Generic network resource model and services for resource allocation and - * resource tracking. - */ -package org.onosproject.net.newresource;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/package-info.java deleted file mode 100644 index 34b4de21..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Network model entities & service API definitions. - */ -package org.onosproject.net; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultInboundPacket.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultInboundPacket.java deleted file mode 100644 index 96f872f5..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultInboundPacket.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.net.ConnectPoint; -import org.onlab.packet.Ethernet; - -import java.nio.ByteBuffer; -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Default implementation of an immutable inbound packet. - */ -public final class DefaultInboundPacket implements InboundPacket { - - private final ConnectPoint receivedFrom; - private final Ethernet parsed; - private final ByteBuffer unparsed; - - /** - * Creates an immutable inbound packet. - * - * @param receivedFrom connection point where received - * @param parsed parsed ethernet frame - * @param unparsed unparsed raw bytes - */ - public DefaultInboundPacket(ConnectPoint receivedFrom, Ethernet parsed, - ByteBuffer unparsed) { - this.receivedFrom = receivedFrom; - this.parsed = parsed; - this.unparsed = unparsed; - } - - @Override - public ConnectPoint receivedFrom() { - return receivedFrom; - } - - @Override - public Ethernet parsed() { - return parsed; - } - - @Override - public ByteBuffer unparsed() { - // FIXME: figure out immutability here - return unparsed; - } - - @Override - public int hashCode() { - return Objects.hash(receivedFrom, parsed, unparsed); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof InboundPacket) { - final DefaultInboundPacket other = (DefaultInboundPacket) obj; - return Objects.equals(this.receivedFrom, other.receivedFrom) && - Objects.equals(this.parsed, other.parsed) && - Objects.equals(this.unparsed, other.unparsed); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("receivedFrom", receivedFrom) - .add("parsed", parsed) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultOutboundPacket.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultOutboundPacket.java deleted file mode 100644 index 5bd4c986..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultOutboundPacket.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import java.nio.ByteBuffer; -import java.util.Objects; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.flow.TrafficTreatment; - -import com.google.common.base.MoreObjects; - -/** - * Default implementation of an immutable outbound packet. - */ -public final class DefaultOutboundPacket implements OutboundPacket { - private final DeviceId sendThrough; - private final TrafficTreatment treatment; - private final ByteBuffer data; - - /** - * Creates an immutable outbound packet. - * - * @param sendThrough identifier through which to send the packet - * @param treatment list of packet treatments - * @param data raw packet data - */ - public DefaultOutboundPacket(DeviceId sendThrough, - TrafficTreatment treatment, ByteBuffer data) { - this.sendThrough = sendThrough; - this.treatment = treatment; - this.data = data; - } - - @Override - public DeviceId sendThrough() { - return sendThrough; - } - - @Override - public TrafficTreatment treatment() { - return treatment; - } - - @Override - public ByteBuffer data() { - // FIXME: figure out immutability here - return data; - } - - @Override - public int hashCode() { - return Objects.hash(sendThrough, treatment, data); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof OutboundPacket) { - final DefaultOutboundPacket other = (DefaultOutboundPacket) obj; - return Objects.equals(this.sendThrough, other.sendThrough) && - Objects.equals(this.treatment, other.treatment) && - Objects.equals(this.data, other.data); - } - return false; - } - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("sendThrough", sendThrough) - .add("treatment", treatment) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketContext.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketContext.java deleted file mode 100644 index 166269f9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketContext.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2014-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.net.packet; - -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.flow.TrafficTreatment.Builder; - -import java.util.concurrent.atomic.AtomicBoolean; - -import static org.onosproject.security.AppGuard.checkPermission; -import static org.onosproject.security.AppPermission.Type.*; - -/** - * Default implementation of a packet context. - */ -public abstract class DefaultPacketContext implements PacketContext { - - private final long time; - private final InboundPacket inPkt; - private final OutboundPacket outPkt; - private final TrafficTreatment.Builder builder; - - private final AtomicBoolean block; - - /** - * Creates a new packet context. - * - * @param time creation time - * @param inPkt inbound packet - * @param outPkt outbound packet - * @param block whether the context is blocked or not - */ - protected DefaultPacketContext(long time, InboundPacket inPkt, - OutboundPacket outPkt, boolean block) { - super(); - this.time = time; - this.inPkt = inPkt; - this.outPkt = outPkt; - this.block = new AtomicBoolean(block); - this.builder = DefaultTrafficTreatment.builder(); - } - - @Override - public long time() { - checkPermission(PACKET_READ); - return time; - } - - @Override - public InboundPacket inPacket() { - checkPermission(PACKET_READ); - return inPkt; - } - - @Override - public OutboundPacket outPacket() { - checkPermission(PACKET_READ); - return outPkt; - } - - @Override - public Builder treatmentBuilder() { - checkPermission(PACKET_READ); - return builder; - } - - @Override - public abstract void send(); - - @Override - public boolean block() { - checkPermission(PACKET_WRITE); - return this.block.getAndSet(true); - } - - @Override - public boolean isHandled() { - checkPermission(PACKET_READ); - return this.block.get(); - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketRequest.java deleted file mode 100644 index ce2eb118..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/DefaultPacketRequest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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.net.packet; - -import com.google.common.base.MoreObjects; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.flow.TrafficSelector; - -import java.util.Objects; - -/** - * Default implementation of a packet request. - */ -public final class DefaultPacketRequest implements PacketRequest { - private final TrafficSelector selector; - private final PacketPriority priority; - private final ApplicationId appId; - - /** - * Creates a new packet request. - * - * @param selector traffic selector - * @param priority intercept priority - * @param appId application id - */ - public DefaultPacketRequest(TrafficSelector selector, PacketPriority priority, - ApplicationId appId) { - this.selector = selector; - this.priority = priority; - this.appId = appId; - } - - public TrafficSelector selector() { - return selector; - } - - public PacketPriority priority() { - return priority; - } - - public ApplicationId appId() { - return appId; - } - - @Override - public int hashCode() { - return Objects.hash(selector, priority, appId); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final DefaultPacketRequest other = (DefaultPacketRequest) obj; - return Objects.equals(this.selector, other.selector) - && Objects.equals(this.priority, other.priority) - && Objects.equals(this.appId, other.appId); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this.getClass()) - .add("selector", selector) - .add("priority", priority) - .add("appId", appId).toString(); - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/InboundPacket.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/InboundPacket.java deleted file mode 100644 index 3fd58149..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/InboundPacket.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.net.ConnectPoint; -import org.onlab.packet.Ethernet; - -import java.nio.ByteBuffer; - -/** - * Represents a data packet intercepted from an infrastructure device. - */ -public interface InboundPacket { - - /** - * Returns the device and port from where the packet was received. - * - * @return connection point where received - */ - ConnectPoint receivedFrom(); - - /** - * Returns the parsed form of the packet. - * - * @return parsed Ethernet frame; null if the packet is not an Ethernet - * frame or one for which there is no parser - */ - Ethernet parsed(); - - /** - * Unparsed packet data. - * - * @return raw packet bytes - */ - ByteBuffer unparsed(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/OutboundPacket.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/OutboundPacket.java deleted file mode 100644 index 9e9329fa..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/OutboundPacket.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.flow.TrafficTreatment; - -import java.nio.ByteBuffer; - -/** - * Represents an outbound data packet that is to be emitted to network via - * an infrastructure device. - */ -public interface OutboundPacket { - - /** - * Returns the identity of a device through which this packet should be - * sent. - * - * @return device identity - */ - DeviceId sendThrough(); - - /** - * Returns how the outbound packet should be treated. - * - * @return output treatment - */ - TrafficTreatment treatment(); - - /** - * Returns immutable view of the raw data to be sent. - * - * @return data to emit - */ - ByteBuffer data(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketContext.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketContext.java deleted file mode 100644 index 004adc87..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketContext.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.net.flow.TrafficTreatment; - -/** - * Represents context for processing an inbound packet, and (optionally) - * emitting a corresponding outbound packet. - */ -public interface PacketContext { - - /** - * Returns the time when the packet was received. - * - * @return the time in millis since start of epoch - */ - long time(); - - /** - * Returns the inbound packet being processed. - * - * @return inbound packet - */ - InboundPacket inPacket(); - - /** - * Returns the view of the outbound packet. - * - * @return outbound packet - */ - OutboundPacket outPacket(); - - /** - * Returns a builder for constructing traffic treatment. - * - * @return traffic treatment builder - */ - TrafficTreatment.Builder treatmentBuilder(); - - /** - * Triggers the outbound packet to be sent. - */ - void send(); - - /** - * Blocks the outbound packet from being sent from this point onward. - * - * @return whether the outbound packet is blocked. - */ - boolean block(); - - /** - * Indicates whether the outbound packet is handled, i.e. sent or blocked. - * - * @return true uf the packed is handled - */ - boolean isHandled(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketEvent.java deleted file mode 100644 index 7b0a5ed7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketEvent.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.event.AbstractEvent; - -/** - * Describes a packet event. - */ -public class PacketEvent extends AbstractEvent<PacketEvent.Type, OutboundPacket> { - - /** - * Type of packet events. - */ - public enum Type { - /** - * Signifies that the packet should be emitted out a local port. - */ - EMIT - } - - /** - * Creates an event of the given type for the specified packet. - * - * @param type the type of the event - * @param packet the packet the event is about - */ - public PacketEvent(Type type, OutboundPacket packet) { - super(type, packet); - } - - /** - * Creates an event of the given type for the specified packet at the given - * time. - * - * @param type the type of the event - * @param packet the packet the event is about - * @param time the time of the event - */ - public PacketEvent(Type type, OutboundPacket packet, long time) { - super(type, packet, time); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketPriority.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketPriority.java deleted file mode 100644 index 3eab9386..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketPriority.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.net.packet; - -/** - * Priorities available to applications for requests for packets from the data - * plane. - */ -public enum PacketPriority { - /** - * High priority for control traffic. This will result in all traffic - * matching the selector being sent to the controller. - */ - CONTROL(40000), - - /** - * Low priority for reactive applications. Packets are only sent to the - * controller if they fail to match any of the rules installed in the switch. - */ - REACTIVE(5); - - private final int priorityValue; - - PacketPriority(int priorityValue) { - this.priorityValue = priorityValue; - } - - /** - * Returns the integer value of the priority level. - * - * @return priority value - */ - public int priorityValue() { - return priorityValue; - } - - public String toString() { - return String.valueOf(priorityValue); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java deleted file mode 100644 index 0eba1b4e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessor.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import static com.google.common.base.Preconditions.checkArgument; - -/** - * Abstraction of an inbound packet processor. - */ -public interface PacketProcessor { - - int ADVISOR_MAX = Integer.MAX_VALUE / 3; - int DIRECTOR_MAX = (Integer.MAX_VALUE / 3) * 2; - int OBSERVER_MAX = Integer.MAX_VALUE; - - /** - * Returns a priority in the ADVISOR range, where processors can take early action and - * influence the packet context. However, they cannot handle the packet (i.e. call send() or block()). - * The valid range is from 1 to ADVISOR_MAX. - * Processors in this range get to see the packet first. - * - * @param priority priority within ADVISOR range - * @return overall priority - */ - static int advisor(int priority) { - int overallPriority = priority + 1; - checkArgument(overallPriority > 0 && overallPriority <= ADVISOR_MAX, - "Priority not within ADVISOR range"); - return overallPriority; - } - - /** - * Returns a priority in the DIRECTOR range, where processors can handle the packet. - * The valid range is from ADVISOR_MAX+1 to DIRECTOR_MAX. - * Processors in this range get to see the packet second, after ADVISORS. - * - * @param priority priority within the DIRECTOR range - * @return overall priority - */ - static int director(int priority) { - int overallPriority = ADVISOR_MAX + priority + 1; - checkArgument(overallPriority > ADVISOR_MAX && overallPriority <= DIRECTOR_MAX, - "Priority not within DIRECTOR range"); - return overallPriority; - } - - /** - * Returns a priority in the OBSERVER range, where processors cannot take any action, - * but can observe what action has been taken until then. - * The valid range is from DIRECTOR_MAX+1 to OBSERVER_MAX. - * Processors in this range get to see the packet last, after ADVISORS and DIRECTORS. - * - * @param priority priority within the OBSERVER range - * @return overall priority - */ - static int observer(int priority) { - int overallPriority = DIRECTOR_MAX + priority + 1; - checkArgument(overallPriority > DIRECTOR_MAX, - "Priority not within OBSERVER range"); - return overallPriority; - } - - /** - * Processes the inbound packet as specified in the given context. - * - * @param context packet processing context - */ - void process(PacketContext context); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessorEntry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessorEntry.java deleted file mode 100644 index 40386fb7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProcessorEntry.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.net.packet; - -/** - * Packet processor entry tracking the processor, its priority and - * time consumption. - */ -public interface PacketProcessorEntry { - - /** - * Returns the packet processor. - * - * @return packet processor - */ - PacketProcessor processor(); - - /** - * Returns the packet processor priority. - * - * @return processor priority - */ - int priority(); - - /** - * Returns the number of invocations. - * - * @return number of invocations - */ - long invocations(); - - /** - * Returns the total time, in nanoseconds, spent processing packets. - * - * @return total time in nanos - */ - long totalNanos(); - - /** - * Returns the average time, in nanoseconds, spent processing packets. - * - * @return average time in nanos - */ - long averageNanos(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProvider.java deleted file mode 100644 index 8d55f0d1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProvider.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.net.provider.Provider; - -/** - * Abstraction of a packet provider capable of emitting packets. - */ -public interface PacketProvider extends Provider { - - /** - * Emits the specified outbound packet onto the network. - * - * @param packet outbound packet - */ - void emit(OutboundPacket packet); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProviderRegistry.java deleted file mode 100644 index 6e73253e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProviderRegistry.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.net.provider.ProviderRegistry; - -/** - * Abstraction of an infrastructure packet provider registry. - */ -public interface PacketProviderRegistry -extends ProviderRegistry<PacketProvider, PacketProviderService> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProviderService.java deleted file mode 100644 index 1aaee65f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketProviderService.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.net.provider.ProviderService; - -/** - * Entity capable of processing inbound packets. - */ -public interface PacketProviderService extends ProviderService<PacketProvider> { - - /** - * Submits inbound packet context for processing. This processing will be - * done synchronously, i.e. run-to-completion. - * - * @param context inbound packet context - */ - void processPacket(PacketContext context); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java deleted file mode 100644 index dc09219a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketRequest.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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.net.packet; - -import org.onosproject.core.ApplicationId; -import org.onosproject.net.flow.TrafficSelector; - -/** - * Represents a packet request made to devices. - */ -public interface PacketRequest { - - /** - * Obtain the traffic selector. - * - * @return a traffic selector - */ - TrafficSelector selector(); - - /** - * Obtain the priority. - * - * @return a PacketPriority - */ - PacketPriority priority(); - - /** - * Obtain the application id. - * - * @return an application id - */ - ApplicationId appId(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketService.java deleted file mode 100644 index 2e7a1b91..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketService.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2014-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.net.packet; - -import com.google.common.annotations.Beta; -import org.onosproject.core.ApplicationId; -import org.onosproject.net.flow.TrafficSelector; - -import java.util.List; - -/** - * Service for intercepting data plane packets and for emitting synthetic - * outbound packets. - */ -public interface PacketService { - - // TODO: ponder better ordering scheme that does not require absolute numbers - - /** - * Adds the specified processor to the list of packet processors. - * It will be added into the list in the order of priority. The higher - * numbers will be processing the packets after the lower numbers. - * - * @param processor processor to be added - * @param priority priority in the reverse natural order - * @throws java.lang.IllegalArgumentException if a processor with the - * given priority already exists - */ - void addProcessor(PacketProcessor processor, int priority); - - // TODO allow processors to register for particular types of packets - - /** - * Removes the specified processor from the processing pipeline. - * - * @param processor packet processor - */ - void removeProcessor(PacketProcessor processor); - - /** - * Returns priority bindings of all registered packet processor entries. - * - * @return list of existing packet processor entries - */ - @Beta - List<PacketProcessorEntry> getProcessors(); - - /** - * Requests that packets matching the given selector are punted from the - * dataplane to the controller. - * - * @param selector the traffic selector used to match packets - * @param priority the priority of the rule - * @param appId the application ID of the requester - */ - void requestPackets(TrafficSelector selector, PacketPriority priority, - ApplicationId appId); - - /** - * Cancels previous packet requests for packets matching the given - * selector to be punted from the dataplane to the controller. - * - * @param selector the traffic selector used to match packets - * @param priority the priority of the rule - * @param appId the application ID of the requester - */ - void cancelPackets(TrafficSelector selector, PacketPriority priority, - ApplicationId appId); - - /** - * Returns list of all existing requests ordered by priority. - * - * @return list of existing packet requests - */ - List<PacketRequest> getRequests(); - - /** - * Emits the specified outbound packet onto the network. - * - * @param packet outbound packet - */ - void emit(OutboundPacket packet); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStore.java deleted file mode 100644 index d83fc9a2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStore.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2014-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.net.packet; - -import org.onosproject.store.Store; - -import java.util.List; - -/** - * Manages routing of outbound packets. - */ -public interface PacketStore extends Store<PacketEvent, PacketStoreDelegate> { - - /** - * Decides which instance should emit the packet and forwards the packet to - * that instance. The relevant PacketManager is notified via the - * PacketStoreDelegate that it should emit the packet. - * - * @param packet the packet to emit - */ - void emit(OutboundPacket packet); - - /** - * Requests intercept of packets that match the given selector. - * - * @param request a packet request - */ - void requestPackets(PacketRequest request); - - /** - * Cancels intercept of packets that match the given selector. - * - * @param request a packet request - */ - void cancelPackets(PacketRequest request); - - /** - * Obtains all existing requests in the system. - * - * @return list of packet requests in order of priority - */ - List<PacketRequest> existingRequests(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStoreDelegate.java deleted file mode 100644 index 2e59b19d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/PacketStoreDelegate.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2014 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.net.packet; - -import org.onosproject.store.StoreDelegate; - -/** - * Packet store delegate abstraction. - */ -public interface PacketStoreDelegate extends StoreDelegate<PacketEvent> { - - /** - * Requests that packets matching to following request be collected - * from all switches. - * - * @param request packet request - */ - void requestPackets(PacketRequest request); - - /** - * Requests that packets matching to following request no longer be - * collected from any switches. - * - * @param request packet request - */ - void cancelPackets(PacketRequest request); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/package-info.java deleted file mode 100644 index 0b9ea377..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/packet/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Mechanism for processing inbound packets intercepted from the data plane and - * for emitting outbound packets onto the data plane. - */ -package org.onosproject.net.packet; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractListenerProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractListenerProviderRegistry.java deleted file mode 100644 index ff67c6da..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractListenerProviderRegistry.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.net.provider; - -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.onosproject.event.Event; -import org.onosproject.event.EventDeliveryService; -import org.onosproject.event.EventListener; -import org.onosproject.event.ListenerRegistry; -import org.onosproject.event.ListenerService; - -/** - * Basis for components which need to export listener mechanism. - */ -@Component(componentAbstract = true) -public abstract class AbstractListenerProviderRegistry<E extends Event, L extends EventListener<E>, - P extends Provider, S extends ProviderService<P>> - extends AbstractProviderRegistry<P, S> implements ListenerService<E, L> { - - // If only Java supported mixins... - - protected final ListenerRegistry<E, L> listenerRegistry = new ListenerRegistry<>(); - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected EventDeliveryService eventDispatcher; - - @Override - public void addListener(L listener) { - listenerRegistry.addListener(listener); - } - - @Override - public void removeListener(L listener) { - listenerRegistry.removeListener(listener); - } - - - /** - * Safely posts the specified event to the local event dispatcher. - * If there is no event dispatcher or if the event is null, this method - * is a noop. - * - * @param event event to be posted; may be null - */ - protected void post(E event) { - if (event != null && eventDispatcher != null) { - eventDispatcher.post(event); - } - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProvider.java deleted file mode 100644 index a4926dd3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2014 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.net.provider; - -/** - * Base provider implementation. - */ -public abstract class AbstractProvider implements Provider { - - private final ProviderId providerId; - - /** - * Creates a provider with the supplier identifier. - * - * @param id provider id - */ - protected AbstractProvider(ProviderId id) { - this.providerId = id; - } - - @Override - public ProviderId id() { - return providerId; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java deleted file mode 100644 index bcf5fae0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderRegistry.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2014 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.net.provider; - -import com.google.common.collect.ImmutableSet; -import org.onosproject.net.DeviceId; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -/** - * Base implementation of provider registry. - * - * @param <P> type of the information provider - * @param <S> type of the provider service - */ -public abstract class AbstractProviderRegistry<P extends Provider, S extends ProviderService<P>> - implements ProviderRegistry<P, S> { - - private final Map<ProviderId, P> providers = new HashMap<>(); - private final Map<ProviderId, S> services = new HashMap<>(); - private final Map<String, P> providersByScheme = new HashMap<>(); - - /** - * Creates a new provider service bound to the specified provider. - * - * @param provider provider - * @return provider service - */ - protected abstract S createProviderService(P provider); - - @Override - public synchronized S register(P provider) { - checkNotNull(provider, "Provider cannot be null"); - checkState(!services.containsKey(provider.id()), "Provider %s already registered", provider.id()); - - // If the provider is a primary one, check for a conflict. - ProviderId pid = provider.id(); - checkState(pid.isAncillary() || !providersByScheme.containsKey(pid.scheme()), - "A primary provider with id %s is already registered", - providersByScheme.get(pid.scheme())); - - S service = createProviderService(provider); - services.put(provider.id(), service); - providers.put(provider.id(), provider); - - // Register the provider by URI scheme only if it is not ancillary. - if (!pid.isAncillary()) { - providersByScheme.put(pid.scheme(), provider); - } - - return service; - } - - @Override - public synchronized void unregister(P provider) { - checkNotNull(provider, "Provider cannot be null"); - S service = services.get(provider.id()); - if (service != null && service instanceof AbstractProviderService) { - ((AbstractProviderService) service).invalidate(); - services.remove(provider.id()); - providers.remove(provider.id()); - if (!provider.id().isAncillary()) { - providersByScheme.remove(provider.id().scheme()); - } - } - } - - @Override - public synchronized Set<ProviderId> getProviders() { - return ImmutableSet.copyOf(services.keySet()); - } - - /** - * Returns the provider registered with the specified provider ID. - * - * @param providerId provider identifier - * @return provider - */ - protected synchronized P getProvider(ProviderId providerId) { - return providers.get(providerId); - } - - /** - * Returns the provider for the specified device ID based on URI scheme. - * - * @param deviceId device identifier - * @return provider bound to the URI scheme - */ - protected synchronized P getProvider(DeviceId deviceId) { - return providersByScheme.get(deviceId.uri().getScheme()); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderService.java deleted file mode 100644 index 6c926d88..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/AbstractProviderService.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2014 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.net.provider; - -import static com.google.common.base.Preconditions.checkState; - -/** - * Base implementation of a provider service, which tracks the provider to - * which it is issued and can be invalidated. - * - * @param <P> type of the information provider - */ -public abstract class AbstractProviderService<P extends Provider> implements ProviderService<P> { - - private boolean isValid = true; - private final P provider; - - /** - * Creates a provider service on behalf of the specified provider. - * - * @param provider provider to which this service is being issued - */ - protected AbstractProviderService(P provider) { - this.provider = provider; - } - - /** - * Invalidates this provider service. - */ - public void invalidate() { - isValid = false; - } - - /** - * Checks the validity of this provider service. - * - * @throws java.lang.IllegalStateException if the service is no longer valid - */ - public void checkValidity() { - checkState(isValid, "Provider service is no longer valid"); - } - - @Override - public P provider() { - return provider; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/Provider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/Provider.java deleted file mode 100644 index 84465ab7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/Provider.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2014 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.net.provider; - -/** - * Abstraction of a provider of information about network environment. - */ -public interface Provider { - - /** - * Returns the provider identifier. - * - * @return provider identification - */ - ProviderId id(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderId.java deleted file mode 100644 index 2c959afd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderId.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2014 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.net.provider; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * External identity of a {@link org.onosproject.net.provider.Provider} family. - * It also carriers two designations of external characteristics, the URI - * scheme and primary/ancillary indicator. - * <p> - * The device URI scheme is used to determine applicability of a provider to - * operations on a specific device. The ancillary indicator serves to designate - * a provider as a primary or ancillary. - * </p> - * <p> - * A {@link org.onosproject.net.provider.ProviderRegistry} uses this designation - * to permit only one primary provider per device URI scheme. Multiple - * ancillary providers can register with the same device URI scheme however. - * </p> - */ -public class ProviderId { - - /** - * Represents no provider ID. - */ - public static final ProviderId NONE = new ProviderId("none", "none"); - - private final String scheme; - private final String id; - private final boolean ancillary; - - // For serialization - private ProviderId() { - scheme = null; - id = null; - ancillary = false; - } - - /** - * Creates a new primary provider identifier from the specified string. - * The providers are expected to follow the reverse DNS convention, e.g. - * {@code org.onosproject.provider.of.device} - * - * @param scheme device URI scheme to which this provider is bound, e.g. "of", "snmp" - * @param id string identifier - */ - public ProviderId(String scheme, String id) { - this(scheme, id, false); - } - - /** - * Creates a new provider identifier from the specified string. - * The providers are expected to follow the reverse DNS convention, e.g. - * {@code org.onosproject.provider.of.device} - * - * @param scheme device URI scheme to which this provider is bound, e.g. "of", "snmp" - * @param id string identifier - * @param ancillary ancillary provider indicator - */ - public ProviderId(String scheme, String id, boolean ancillary) { - this.scheme = checkNotNull(scheme, "Scheme cannot be null"); - this.id = checkNotNull(id, "ID cannot be null"); - this.ancillary = ancillary; - } - - /** - * Returns the device URI scheme to which this provider is bound. - * - * @return device URI scheme - */ - public String scheme() { - return scheme; - } - - /** - * Returns the device URI scheme specific id portion. - * - * @return id - */ - public String id() { - return id; - } - - /** - * Indicates whether this identifier designates an ancillary providers. - * - * @return true if the provider is ancillary; false if primary - */ - public boolean isAncillary() { - return ancillary; - } - - @Override - public int hashCode() { - return Objects.hash(scheme, id); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ProviderId) { - final ProviderId other = (ProviderId) obj; - return Objects.equals(this.scheme, other.scheme) && - Objects.equals(this.id, other.id) && - this.ancillary == other.ancillary; - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this).add("scheme", scheme).add("id", id) - .add("ancillary", ancillary).toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderRegistry.java deleted file mode 100644 index 3c2009ad..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderRegistry.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2014 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.net.provider; - -import java.util.Set; - -/** - * Registry for tracking information providers with the core. - * - * @param <P> type of the information provider - * @param <S> type of the provider service - */ -public interface ProviderRegistry<P extends Provider, S extends ProviderService<P>> { - - /** - * Registers the supplied provider with the core. - * - * @param provider provider to be registered - * @return provider service for injecting information into core - * @throws java.lang.IllegalArgumentException if the provider is registered already - */ - S register(P provider); - - /** - * Unregisters the supplied provider. As a result the previously issued - * provider service will be invalidated and any subsequent invocations - * of its methods may throw {@link java.lang.IllegalStateException}. - * <p> - * Unregistering a provider that has not been previously registered results - * in a no-op. - * </p> - * - * @param provider provider to be unregistered - */ - void unregister(P provider); - - /** - * Returns a set of currently registered provider identities. - * - * @return set of provider identifiers - */ - Set<ProviderId> getProviders(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderService.java deleted file mode 100644 index 5c469276..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/ProviderService.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2014 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.net.provider; - -/** - * Abstraction of a service through which providers can inject information - * about the network environment into the core. - * - * @param <P> type of the information provider - */ -public interface ProviderService<P extends Provider> { - - /** - * Returns the provider to which this service has been issued. - * - * @return provider to which this service has been assigned - */ - P provider(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/package-info.java deleted file mode 100644 index d279f56a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/provider/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Base abstractions related to network entity providers and their brokers. - */ -package org.onosproject.net.provider; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpService.java deleted file mode 100644 index 9b27f4f8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpService.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2014-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.net.proxyarp; - -import org.onlab.packet.Ethernet; -import org.onlab.packet.IpAddress; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.packet.PacketContext; - -/** - * Service for processing ARP or NDP requests on behalf of applications. - */ -// TODO: move to the peer host package -public interface ProxyArpService { - - /** - * Returns whether this particular IP address is known to the system. - * - * @param addr an IP address - * @return true if know, false otherwise - */ - boolean isKnown(IpAddress addr); - - /** - * Sends a reply for a given request. If the host is not known then the - * arp or neighbor solicitation will be flooded at all edge ports. - * - * @param eth an arp or neighbor solicitation request - * @param inPort the port the request was received on - */ - void reply(Ethernet eth, ConnectPoint inPort); - - /** - * Forwards an ARP or neighbor solicitation request to its destination. - * Floods at the edg the request if the destination is not known. - * - * @param eth an ethernet frame containing an ARP or neighbor solicitation - * request. - * @param inPort the port the request was received on - */ - void forward(Ethernet eth, ConnectPoint inPort); - - /** - * Handles a arp or neighbor solicitation packet. - * Replies to arp or neighbor solicitation requests and forwards request - * to the right place. - * @param context the packet context to handle - * @return true if handled, false otherwise. - */ - boolean handlePacket(PacketContext context); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpStore.java deleted file mode 100644 index b6564212..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpStore.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.net.proxyarp; - -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.Host; - -import java.nio.ByteBuffer; - -/** - * State distribution mechanism for the proxy ARP service. - */ -public interface ProxyArpStore { - - /** - * Forwards an ARP or neighbor solicitation request to its destination. - * Floods at the edg the request if the destination is not known. - * - * @param outPort the port the request was received on - * @param subject subject host - * @param packet an ethernet frame containing an ARP or neighbor - * solicitation request - */ - void forward(ConnectPoint outPort, Host subject, ByteBuffer packet); - - /** - * Associates the specified delegate with the store. - * - * @param delegate store delegate - */ - void setDelegate(ProxyArpStoreDelegate delegate); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpStoreDelegate.java deleted file mode 100644 index d0e273c8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/ProxyArpStoreDelegate.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.net.proxyarp; - -import org.onosproject.net.ConnectPoint; - -import java.nio.ByteBuffer; - -/** - * Proxy ARP store delegate. - */ -public interface ProxyArpStoreDelegate { - - /** - * Emits ARP or neighbour discovery response packet. - * - * @param outPort output connection point - * @param packet packet to emit - */ - void emitResponse(ConnectPoint outPort, ByteBuffer packet); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/package-info.java deleted file mode 100644 index 6ddd4926..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/proxyarp/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Base abstractions related to the proxy arp service. - */ -package org.onosproject.net.proxyarp; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocation.java deleted file mode 100644 index 01b69b2a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocation.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2014 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.net.resource; - -import com.google.common.annotations.Beta; - -/** - * Abstraction of allocated resource. - */ -@Beta -public interface ResourceAllocation { - /** - * Returns the resource type. - * - * @return the resource type - */ - ResourceType type(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocationException.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocationException.java deleted file mode 100644 index c3d1fcc7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceAllocationException.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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.net.resource; - -import com.google.common.annotations.Beta; - -/** - * Exception thrown for resource allocation errors. - */ -@Beta -public class ResourceAllocationException extends ResourceException { - public ResourceAllocationException() { - super(); - } - - public ResourceAllocationException(String message) { - super(message); - } - - public ResourceAllocationException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceException.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceException.java deleted file mode 100644 index 31e82d5d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceException.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.net.resource; - -import com.google.common.annotations.Beta; - -/** - * Represents a resource related error. - */ -@Beta -public class ResourceException extends RuntimeException { - - /** - * Constructs an exception with no message and no underlying cause. - */ - public ResourceException() { - } - - /** - * Constructs an exception with the specified message. - * - * @param message the message describing the specific nature of the error - */ - public ResourceException(String message) { - super(message); - } - - /** - * Constructs an exception with the specified message and the underlying cause. - * - * @param message the message describing the specific nature of the error - * @param cause the underlying cause of this error - */ - public ResourceException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceId.java deleted file mode 100644 index 722ec4d7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceId.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.resource; - -import com.google.common.annotations.Beta; - -/** - * Resource identifier. - */ -@Beta -public interface ResourceId { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceRequest.java deleted file mode 100644 index fb53f120..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceRequest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2014 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.net.resource; - -import com.google.common.annotations.Beta; - -/** - * Abstraction of resource request. - */ -@Beta -public interface ResourceRequest { - /** - * Returns the resource type. - * - * @return the resource type - */ - ResourceType type(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceType.java deleted file mode 100644 index 75832134..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/ResourceType.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2014-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.net.resource; - -import com.google.common.annotations.Beta; - -/** - * Represents types for link resources. - */ -@Beta -public enum ResourceType { - /** - * Lambda resource type. - */ - LAMBDA, - - /** - * Bandwidth resource type. - */ - BANDWIDTH, - - /** - * MPLS label resource type. - */ - MPLS_LABEL, -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/device/IntentSetMultimap.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/device/IntentSetMultimap.java deleted file mode 100644 index f17bfb8e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/device/IntentSetMultimap.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.net.resource.device; - -import com.google.common.annotations.Beta; -import org.onosproject.net.intent.IntentId; - -import java.util.Set; - -@Beta -public interface IntentSetMultimap { - - /** - * Allocates the mapping between the given intents. - * - * @param keyIntentId key intent ID - * @param valIntentId value intent ID - * @return true if mapping was successful, false otherwise - */ - boolean allocateMapping(IntentId keyIntentId, IntentId valIntentId); - - /** - * Returns the set of intents mapped to a lower intent. - * - * @param intentId intent ID - * @return set of intent IDs - */ - Set<IntentId> getMapping(IntentId intentId); - - /** - * Releases the mapping of the given intent. - * - * @param intentId intent ID - */ - void releaseMapping(IntentId intentId); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/device/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/device/package-info.java deleted file mode 100644 index 3ced37dc..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/device/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ - -/** - * Services for reserving devices as network resources. - */ -package org.onosproject.net.resource.device; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResource.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResource.java deleted file mode 100644 index d3bd2d7b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResource.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2014-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.net.resource.link; - -import org.onlab.util.Bandwidth; -import org.onlab.util.DataRateUnit; -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Representation of bandwidth resource in bps. - * - * @deprecated in Emu Release - */ -@Deprecated -public final class BandwidthResource implements LinkResource { - - private final Bandwidth bandwidth; - - /** - * Creates a new instance with given bandwidth. - * - * @param bandwidth bandwidth value to be assigned - */ - public BandwidthResource(Bandwidth bandwidth) { - this.bandwidth = checkNotNull(bandwidth); - } - - // Constructor for serialization - private BandwidthResource() { - this.bandwidth = null; - } - - /** - * Creates a new bandwidth resource. - * - * @param v amount of bandwidth to request - * @param unit {@link DataRateUnit} of {@code v} - * @return {@link BandwidthResource} instance with given bandwidth - */ - public static BandwidthResource of(double v, DataRateUnit unit) { - return new BandwidthResource(Bandwidth.of(v, unit)); - } - - /** - * Returns bandwidth as a double value. - * - * @return bandwidth as a double value - */ - public double toDouble() { - return bandwidth.bps(); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof BandwidthResource) { - BandwidthResource that = (BandwidthResource) obj; - return Objects.equals(this.bandwidth, that.bandwidth); - } - return false; - } - - @Override - public int hashCode() { - return Objects.hashCode(this.bandwidth); - } - - @Override - public String toString() { - return String.valueOf(this.bandwidth); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java deleted file mode 100644 index 5f36d5f8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceAllocation.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.resource.ResourceAllocation; -import org.onosproject.net.resource.ResourceType; - -import java.util.Objects; - -/** - * Representation of allocated bandwidth resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public class BandwidthResourceAllocation implements ResourceAllocation { - private final BandwidthResource bandwidth; - - /** - * Creates a new {@link BandwidthResourceRequest} with {@link BandwidthResource} - * object. - * - * @param bandwidth {@link BandwidthResource} object to be requested - */ - public BandwidthResourceAllocation(BandwidthResource bandwidth) { - this.bandwidth = bandwidth; - } - - /** - * Returns the bandwidth resource. - * - * @return the bandwidth resource - */ - public BandwidthResource bandwidth() { - return bandwidth; - } - - @Override - public ResourceType type() { - return ResourceType.BANDWIDTH; - } - - @Override - public int hashCode() { - return bandwidth.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final BandwidthResourceAllocation other = (BandwidthResourceAllocation) obj; - return Objects.equals(this.bandwidth, other.bandwidth()); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("bandwidth", bandwidth) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceRequest.java deleted file mode 100644 index ff26e81e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/BandwidthResourceRequest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2014-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.net.resource.link; - -import java.util.Objects; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.resource.ResourceRequest; -import org.onosproject.net.resource.ResourceType; - -/** - * Representation of a request for bandwidth resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public class BandwidthResourceRequest implements ResourceRequest { - private final BandwidthResource bandwidth; - - /** - * Creates a new {@link BandwidthResourceRequest} with {@link BandwidthResource} - * object. - * - * @param bandwidth {@link BandwidthResource} object to be requested - */ - public BandwidthResourceRequest(BandwidthResource bandwidth) { - this.bandwidth = bandwidth; - } - - /** - * Returns the bandwidth resource. - * - * @return the bandwidth resource - */ - public BandwidthResource bandwidth() { - return bandwidth; - } - - @Override - public ResourceType type() { - return ResourceType.BANDWIDTH; - } - - @Override - public int hashCode() { - return bandwidth.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final BandwidthResourceRequest other = (BandwidthResourceRequest) obj; - return Objects.equals(this.bandwidth, other.bandwidth()); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("bandwidth", bandwidth) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java deleted file mode 100644 index 2fa4fa6b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceAllocations.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; - -import org.onosproject.net.Link; -import org.onosproject.net.intent.IntentId; -import org.onosproject.net.resource.ResourceAllocation; -import org.onosproject.net.resource.ResourceRequest; -import org.onosproject.net.resource.ResourceType; - -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.Objects; -import java.util.Map.Entry; -import java.util.Set; - -/** - * Implementation of {@link LinkResourceAllocations}. - * - * @deprecated in Emu Release - */ -@Deprecated -public class DefaultLinkResourceAllocations implements LinkResourceAllocations { - private final LinkResourceRequest request; - // TODO: probably should be using LinkKey instead - private final Map<Link, Set<ResourceAllocation>> allocations; - - /** - * Creates a new link resource allocations. - * - * @param request requested resources - * @param allocations allocated resources - */ - public DefaultLinkResourceAllocations(LinkResourceRequest request, - Map<Link, Set<ResourceAllocation>> allocations) { - this.request = checkNotNull(request); - ImmutableMap.Builder<Link, Set<ResourceAllocation>> builder - = ImmutableMap.builder(); - for (Entry<Link, Set<ResourceAllocation>> e : allocations.entrySet()) { - builder.put(e.getKey(), ImmutableSet.copyOf(e.getValue())); - } - this.allocations = builder.build(); - } - - public IntentId intentId() { - return request.intentId(); - } - - public Collection<Link> links() { - return request.links(); - } - - public Set<ResourceRequest> resources() { - return request.resources(); - } - - @Override - public ResourceType type() { - return null; - } - - @Override - public Set<ResourceAllocation> getResourceAllocation(Link link) { - Set<ResourceAllocation> result = allocations.get(link); - if (result == null) { - result = Collections.emptySet(); - } - return result; - } - - @Override - public int hashCode() { - return Objects.hash(request, allocations); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final DefaultLinkResourceAllocations other = (DefaultLinkResourceAllocations) obj; - return Objects.equals(this.request, other.request) - && Objects.equals(this.allocations, other.allocations); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("allocations", allocations) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceRequest.java deleted file mode 100644 index 583570f5..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/DefaultLinkResourceRequest.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright 2014-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.net.resource.link; - -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.Objects; -import java.util.stream.Collectors; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableMap; -import org.onlab.util.Bandwidth; -import org.onosproject.net.Link; -import org.onosproject.net.intent.Constraint; -import org.onosproject.net.intent.IntentId; - -import org.onosproject.net.intent.constraint.BandwidthConstraint; -import org.onosproject.net.intent.constraint.LambdaConstraint; -import org.onosproject.net.resource.ResourceRequest; -import org.onosproject.net.resource.ResourceType; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Implementation of {@link LinkResourceRequest}. - * - * @deprecated in Emu Release - */ -@Deprecated -public final class DefaultLinkResourceRequest implements LinkResourceRequest { - - private final IntentId intentId; - protected final Map<Link, Set<ResourceRequest>> requests; - - /** - * Creates a new link resource request with the specified Intent ID, - * and resource requests over links. - * - * @param intentId intent ID associated with this request - * @param requests resource requests over links - */ - private DefaultLinkResourceRequest(IntentId intentId, Map<Link, Set<ResourceRequest>> requests) { - this.intentId = checkNotNull(intentId); - this.requests = checkNotNull(ImmutableMap.copyOf(requests)); - } - - @Override - public ResourceType type() { - return null; - } - - @Override - public IntentId intentId() { - return intentId; - } - - @Override - public Collection<Link> links() { - return requests.keySet(); - } - - @Override - public Set<ResourceRequest> resources() { - return requests.values().stream() - .flatMap(Collection::stream) - .collect(Collectors.toSet()); - } - - @Override - public Set<ResourceRequest> resources(Link link) { - return requests.get(link); - } - - /** - * Returns builder of link resource request. - * - * @param intentId intent ID related to this request - * @param links a set of links for the request - * @return builder of link resource request - */ - public static LinkResourceRequest.Builder builder( - IntentId intentId, Collection<Link> links) { - return new Builder(intentId, links); - } - - /** - * Builder of link resource request. - */ - public static final class Builder implements LinkResourceRequest.Builder { - private IntentId intentId; - private Map<Link, Set<ResourceRequest>> requests; - - /** - * Creates a new link resource request. - * - * @param intentId intent ID related to this request - * @param links a set of links for the request - */ - private Builder(IntentId intentId, Collection<Link> links) { - this.intentId = intentId; - this.requests = new HashMap<>(); - for (Link link : links) { - requests.put(link, new HashSet<>()); - } - } - - /** - * Adds lambda request. - * - * @return self - * @deprecated in Emu Release - */ - @Deprecated - @Override - public Builder addLambdaRequest() { - for (Link link : requests.keySet()) { - requests.get(link).add(new LambdaResourceRequest()); - } - return this; - } - - @Beta - @Override - public LinkResourceRequest.Builder addLambdaRequest(LambdaResource lambda) { - for (Link link : requests.keySet()) { - requests.get(link).add(new LambdaResourceRequest(lambda)); - } - return this; - } - - /** - * Adds Mpls request. - * - * @return self - * @deprecated in Emu Release - */ - @Deprecated - @Override - public Builder addMplsRequest() { - for (Link link : requests.keySet()) { - requests.get(link).add(new MplsLabelResourceRequest()); - } - return this; - } - - @Beta - @Override - public Builder addMplsRequest(MplsLabel label) { - for (Link link : requests.keySet()) { - requests.get(link).add(new MplsLabelResourceRequest(label)); - } - return this; - } - - @Beta - @Override - public LinkResourceRequest.Builder addMplsRequest(Map<Link, MplsLabel> labels) { - for (Link link : labels.keySet()) { - if (!requests.containsKey(link)) { - requests.put(link, new HashSet<>()); - } - requests.get(link).add(new MplsLabelResourceRequest(labels.get(link))); - } - - return this; - } - - /** - * Adds bandwidth request with bandwidth value. - * - * @param bandwidth bandwidth value in bits per second to be requested - * @return self - */ - @Override - public Builder addBandwidthRequest(double bandwidth) { - for (Link link : requests.keySet()) { - requests.get(link).add(new BandwidthResourceRequest(new BandwidthResource(Bandwidth.bps(bandwidth)))); - } - return this; - } - - @Override - public LinkResourceRequest.Builder addConstraint(Constraint constraint) { - if (constraint instanceof LambdaConstraint) { - return addLambdaRequest(); - } else if (constraint instanceof BandwidthConstraint) { - BandwidthConstraint bw = (BandwidthConstraint) constraint; - return addBandwidthRequest(bw.bandwidth().bps()); - } - return this; - } - - /** - * Returns link resource request. - * - * @return link resource request - */ - @Override - public LinkResourceRequest build() { - return new DefaultLinkResourceRequest(intentId, requests); - } - } - - @Override - public int hashCode() { - return Objects.hash(intentId, links()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final DefaultLinkResourceRequest other = (DefaultLinkResourceRequest) obj; - return Objects.equals(this.intentId, other.intentId) - && Objects.equals(this.links(), other.links()); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResource.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResource.java deleted file mode 100644 index 06582497..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResource.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import org.onosproject.net.IndexedLambda; - -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Representation of lambda resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public final class LambdaResource implements LinkResource { - - private final IndexedLambda lambda; - - /** - * Creates a new instance with given lambda. - * - * @param lambda lambda to be assigned - */ - private LambdaResource(IndexedLambda lambda) { - this.lambda = checkNotNull(lambda); - } - - // Constructor for serialization - private LambdaResource() { - this.lambda = null; - } - - /** - * Creates a new instance with the given index of lambda. - * - * @param lambda index value of lambda to be assigned - * @return {@link LambdaResource} instance with the given lambda - */ - public static LambdaResource valueOf(int lambda) { - return valueOf(new IndexedLambda(lambda)); - } - - /** - * Creates a new instance with the given lambda. - * - * @param lambda lambda to be assigned - * @return {@link LambdaResource} instance with the given lambda - */ - public static LambdaResource valueOf(IndexedLambda lambda) { - return new LambdaResource(lambda); - } - - /** - * Returns lambda as an int value. - * - * @return lambda as an int value - */ - public int toInt() { - return (int) lambda.index(); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof LambdaResource) { - LambdaResource that = (LambdaResource) obj; - return Objects.equals(this.lambda, that.lambda); - } - return false; - } - - @Override - public int hashCode() { - return lambda.hashCode(); - } - - @Override - public String toString() { - return String.valueOf(this.lambda); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java deleted file mode 100644 index 930a6b27..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceAllocation.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.resource.ResourceAllocation; -import org.onosproject.net.resource.ResourceType; - -import java.util.Objects; - -/** - * Representation of allocated lambda resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public class LambdaResourceAllocation implements ResourceAllocation { - private final LambdaResource lambda; - - @Override - public ResourceType type() { - return ResourceType.LAMBDA; - } - - /** - * Creates a new {@link LambdaResourceAllocation} with {@link LambdaResource} - * object. - * - * @param lambda allocated lambda - */ - public LambdaResourceAllocation(LambdaResource lambda) { - this.lambda = lambda; - } - - /** - * Returns the lambda resource. - * - * @return the lambda resource - */ - public LambdaResource lambda() { - return lambda; - } - - @Override - public int hashCode() { - return Objects.hashCode(lambda); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final LambdaResourceAllocation other = (LambdaResourceAllocation) obj; - return Objects.equals(this.lambda, other.lambda); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("lambda", lambda) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceRequest.java deleted file mode 100644 index 24d3d78d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LambdaResourceRequest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import org.onosproject.net.resource.ResourceRequest; -import org.onosproject.net.resource.ResourceType; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Representation of a request for lambda resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public class LambdaResourceRequest implements ResourceRequest { - - private final LambdaResource lambda; - - /** - * Constructs a request specifying the given lambda. - * - * @param lambda lambda to be requested - */ - @Beta - public LambdaResourceRequest(LambdaResource lambda) { - this.lambda = checkNotNull(lambda); - } - - /** - * Constructs a request asking an arbitrary available lambda. - * - * @deprecated in Emu Release - */ - @Deprecated - public LambdaResourceRequest() { - this.lambda = null; - } - - /** - * Returns the lambda this request expects. - * - * @return the lambda this request expects - */ - @Beta - public LambdaResource lambda() { - return lambda; - } - - @Override - public ResourceType type() { - return ResourceType.LAMBDA; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("lambda", lambda) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResource.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResource.java deleted file mode 100644 index b06f16bf..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResource.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -/** - * Abstraction of link resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public interface LinkResource { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java deleted file mode 100644 index d0211e26..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import java.util.Collection; -import java.util.Set; - -import org.onosproject.net.Link; -import org.onosproject.net.intent.IntentId; -import org.onosproject.net.resource.ResourceAllocation; -import org.onosproject.net.resource.ResourceRequest; - -/** - * Representation of allocated link resources. - * - * @deprecated - */ -@Deprecated -public interface LinkResourceAllocations extends ResourceAllocation { - - /** - * Returns the {@link IntentId} associated with the request. - * - * @return the {@link IntentId} associated with the request - */ - IntentId intentId(); - - /** - * Returns the set of target links. - * - * @return the set of target links - */ - Collection<Link> links(); - - /** - * Returns the set of resource requests. - * - * @return the set of resource requests - */ - Set<ResourceRequest> resources(); - - /** - * Returns allocated resource for the given link. - * - * @param link the target link - * @return allocated resource for the link - */ - Set<ResourceAllocation> getResourceAllocation(Link link); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceEvent.java deleted file mode 100644 index a3702923..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import java.util.Collection; - -import org.onosproject.event.AbstractEvent; - -import com.google.common.collect.ImmutableList; - -/** - * Describes an event related to a Link Resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public final class LinkResourceEvent - extends AbstractEvent<LinkResourceEvent.Type, Collection<LinkResourceAllocations>> { - - /** - * Type of resource this event is for. - */ - public enum Type { - /** Additional resources are now available. */ - ADDITIONAL_RESOURCES_AVAILABLE - } - - /** - * Constructs a link resource event. - * - * @param type type of resource event to create - * @param linkResourceAllocations allocations that are now available - */ - public LinkResourceEvent(Type type, - Collection<LinkResourceAllocations> linkResourceAllocations) { - super(type, ImmutableList.copyOf(linkResourceAllocations)); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceListener.java deleted file mode 100644 index bbb02e2f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceListener.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import org.onosproject.event.EventListener; - -/** - * Entity for receiving link resource events. - * - * @deprecated in Emu Release - */ -@Deprecated -public interface LinkResourceListener extends EventListener<LinkResourceEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceRequest.java deleted file mode 100644 index 9774e8e7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceRequest.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright 2014-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.net.resource.link; - -import java.util.Collection; -import java.util.Map; -import java.util.Set; - -import com.google.common.annotations.Beta; -import org.onosproject.net.Link; -import org.onosproject.net.intent.Constraint; -import org.onosproject.net.intent.IntentId; -import org.onosproject.net.resource.ResourceRequest; - -/** - * Representation of a request for link resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public interface LinkResourceRequest extends ResourceRequest { - - /** - * Returns the {@link IntentId} associated with the request. - * - * @return the {@link IntentId} associated with the request - */ - IntentId intentId(); - - /** - * Returns the set of target links. - * - * @return the set of target links - */ - Collection<Link> links(); - - /** - * Returns the set of resource requests. - * - * @return the set of resource requests - */ - Set<ResourceRequest> resources(); - - /** - * Returns the set of resource request against the specified link. - * - * @param link link whose associated resource request is to be returned - * @return set of resource request against the specified link - */ - @Beta - Set<ResourceRequest> resources(Link link); - - /** - * Builder of link resource request. - */ - interface Builder { - /** - * Adds lambda request. - * - * @return self - * @deprecated in Emu Release - */ - @Deprecated - Builder addLambdaRequest(); - - /** - * Adds lambda request. - * - * @param lambda lambda to be requested - * @return self - */ - @Beta - Builder addLambdaRequest(LambdaResource lambda); - - /** - * Adds MPLS request. - * - * @return self - * @deprecated in Emu Release - */ - @Deprecated - Builder addMplsRequest(); - - /** - * Adds MPLS request. - * - * @param label MPLS label to be requested - * @return self - */ - @Beta - Builder addMplsRequest(MplsLabel label); - - /** - * Adds MPLS request against the specified links. - * - * @param labels MPLS labels to be requested against links - * @return self - */ - @Beta - Builder addMplsRequest(Map<Link, MplsLabel> labels); - - /** - * Adds bandwidth request with bandwidth value. - * - * @param bandwidth bandwidth value to be requested - * @return self - */ - Builder addBandwidthRequest(double bandwidth); - - /** - * Adds the resources required for a constraint. - * - * @param constraint the constraint - * @return self - */ - Builder addConstraint(Constraint constraint); - - /** - * Returns link resource request. - * - * @return link resource request - */ - LinkResourceRequest build(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceService.java deleted file mode 100644 index 71ea7e1a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceService.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import org.onosproject.event.ListenerService; -import org.onosproject.net.Link; -import org.onosproject.net.intent.IntentId; -import org.onosproject.net.resource.ResourceRequest; - -/** - * Service for providing link resource allocation. - * - * @deprecated in Emu Release - */ -@Deprecated -public interface LinkResourceService - extends ListenerService<LinkResourceEvent, LinkResourceListener> { - - /** - * Requests resources. - * - * @param req resources to be allocated - * @return allocated resources - * @deprecated in Emu Release - */ - @Deprecated - LinkResourceAllocations requestResources(LinkResourceRequest req); - - /** - * Releases resources. - * - * @param allocations resources to be released - * @deprecated in Emu Release - */ - @Deprecated - void releaseResources(LinkResourceAllocations allocations); - - /** - * Updates previously made allocations with a new resource request. - * - * @param req updated resource request - * @param oldAllocations old resource allocations - * @return new resource allocations - * @deprecated in Emu Release - */ - @Deprecated - LinkResourceAllocations updateResources(LinkResourceRequest req, - LinkResourceAllocations oldAllocations); - - /** - * Returns all allocated resources. - * - * @return allocated resources - * @deprecated in Emu Release - */ - @Deprecated - Iterable<LinkResourceAllocations> getAllocations(); - - /** - * Returns all allocated resources to given link. - * - * @param link a target link - * @return allocated resources - * @deprecated in Emu Release - */ - @Deprecated - Iterable<LinkResourceAllocations> getAllocations(Link link); - - /** - * Returns the resources allocated for an Intent. - * - * @param intentId the target Intent's id - * @return allocated resources for Intent - * @deprecated in Emu Release - */ - @Deprecated - LinkResourceAllocations getAllocations(IntentId intentId); - - /** - * Returns available resources for given link. - * - * @param link a target link - * @return available resources for the target link - * @deprecated in Emu Release - */ - @Deprecated - Iterable<ResourceRequest> getAvailableResources(Link link); - - /** - * Returns available resources for given link. - * - * @param link a target link - * @param allocations allocations to be included as available - * @return available resources for the target link - * @deprecated in Emu Release - */ - @Deprecated - Iterable<ResourceRequest> getAvailableResources(Link link, - LinkResourceAllocations allocations); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStore.java deleted file mode 100644 index e8a295c2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStore.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import java.util.Set; - -import org.onosproject.net.Link; -import org.onosproject.net.intent.IntentId; -import org.onosproject.net.resource.ResourceAllocation; - -/** - * Manages link resources. - * - * @deprecated in Emu Release. - */ -@Deprecated -public interface LinkResourceStore { - /** - * Returns free resources for given link. - * - * @param link a target link - * @return free resources for given link - */ - Set<ResourceAllocation> getFreeResources(Link link); - - /** - * Allocates resources. - * - * @param allocations resources to be allocated - */ - void allocateResources(LinkResourceAllocations allocations); - - /** - * Releases resources. - * - * @param allocations resources to be released - * @return the link resource event - */ - LinkResourceEvent releaseResources(LinkResourceAllocations allocations); - - /** - * Returns resources allocated for an Intent. - * - * @param intentId the target Intent's ID - * @return allocated resources or null if no resource is allocated - */ - LinkResourceAllocations getAllocations(IntentId intentId); - - /** - * Returns resources allocated for a link. - * - * @param link the target link - * @return allocated resources - */ - Iterable<LinkResourceAllocations> getAllocations(Link link); - - /** - * Returns all allocated resources. - * - * @return allocated resources - */ - Iterable<LinkResourceAllocations> getAllocations(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStoreDelegate.java deleted file mode 100644 index dbfb3b04..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceStoreDelegate.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import org.onosproject.store.StoreDelegate; - -/** - * Link resource store delegate abstraction. - * - * @deprecated in Emu Release - */ -@Deprecated -public interface LinkResourceStoreDelegate extends StoreDelegate<LinkResourceEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResources.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResources.java deleted file mode 100644 index 46450427..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/LinkResources.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2014 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.net.resource.link; - -import java.util.Set; - -/** - * Abstraction of a resources of a link. - * - * @deprecated in Emu Release - */ -@Deprecated -public interface LinkResources { - - /** - * Returns resources as a set of {@link LinkResource}s. - * - * @return a set of {@link LinkResource}s - */ - Set<LinkResource> resources(); - - /** - * Builder of {@link LinkResources}. - * - * @deprecated in Emu Release - */ - @Deprecated - interface Builder { - - /** - * Adds bandwidth resource. - * <p> - * This operation adds given bandwidth to previous bandwidth and - * generates single bandwidth resource. - * - * @param bandwidth bandwidth value to be added - * @return self - */ - Builder addBandwidth(double bandwidth); - - /** - * Adds lambda resource. - * - * @param lambda lambda value to be added - * @return self - */ - Builder addLambda(int lambda); - - /** - * Builds an immutable link resources. - * - * @return link resources - */ - LinkResources build(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabel.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabel.java deleted file mode 100644 index 5138d02c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabel.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2014-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.net.resource.link; - -import java.util.Objects; - -/** - * Representation of MPLS label resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public final class MplsLabel implements LinkResource { - - private final org.onlab.packet.MplsLabel mplsLabel; - - - /** - * Creates a new instance with given MPLS label. - * - * @param mplsLabel MPLS Label value to be assigned - */ - public MplsLabel(int mplsLabel) { - this.mplsLabel = org.onlab.packet.MplsLabel.mplsLabel(mplsLabel); - } - - /** - * Creates a new instance with given MPLS label. - * - * @param mplsLabel mplsLabel value to be assigned - * @return {@link MplsLabel} instance with given bandwidth - */ - public static MplsLabel valueOf(int mplsLabel) { - return new MplsLabel(mplsLabel); - } - - /** - * Returns MPLS Label as an MPLS Label Object. - * - * @return MPLS label as an MPLS Label Object. - */ - public org.onlab.packet.MplsLabel label() { - return mplsLabel; - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof MplsLabel) { - MplsLabel that = (MplsLabel) obj; - return Objects.equals(this.mplsLabel, that.mplsLabel); - } - return false; - } - - @Override - public int hashCode() { - return Objects.hashCode(this.mplsLabel); - } - - @Override - public String toString() { - return String.valueOf(this.mplsLabel); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java deleted file mode 100644 index 7441bee9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceAllocation.java +++ /dev/null @@ -1,81 +0,0 @@ - /* - * Copyright 2014-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.net.resource.link; - -import com.google.common.base.MoreObjects; -import org.onosproject.net.resource.ResourceAllocation; -import org.onosproject.net.resource.ResourceType; - -import java.util.Objects; - -/** - * Representation of allocated MPLS label resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public class MplsLabelResourceAllocation implements ResourceAllocation { - private final MplsLabel mplsLabel; - - @Override - public ResourceType type() { - return ResourceType.MPLS_LABEL; - } - - /** - * Creates a new {@link MplsLabelResourceAllocation} with {@link MplsLabel} - * object. - * - * @param mplsLabel allocated MPLS Label - */ - public MplsLabelResourceAllocation(MplsLabel mplsLabel) { - this.mplsLabel = mplsLabel; - } - - /** - * Returns the MPLS label resource. - * - * @return the MPLS label resource - */ - public MplsLabel mplsLabel() { - return mplsLabel; - } - - @Override - public int hashCode() { - return Objects.hashCode(mplsLabel); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final MplsLabelResourceAllocation other = (MplsLabelResourceAllocation) obj; - return Objects.equals(this.mplsLabel, other.mplsLabel); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("mplsLabel", mplsLabel) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceRequest.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceRequest.java deleted file mode 100644 index 5b9c4a0a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/MplsLabelResourceRequest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2014-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.net.resource.link; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import org.onosproject.net.resource.ResourceRequest; -import org.onosproject.net.resource.ResourceType; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Representation of a request for lambda resource. - * - * @deprecated in Emu Release - */ -@Deprecated -public class MplsLabelResourceRequest implements ResourceRequest { - - private final MplsLabel mplsLabel; - - /** - * Constructs a request specifying the given MPLS label. - * - * @param mplsLabel MPLS label to be requested - */ - @Beta - public MplsLabelResourceRequest(MplsLabel mplsLabel) { - this.mplsLabel = checkNotNull(mplsLabel); - } - - /** - * Constructs a request asking an arbitrary available MPLS label. - * - * @deprecated in Emu Release - */ - @Deprecated - public MplsLabelResourceRequest() { - this.mplsLabel = null; - } - - /** - * Returns the MPLS label this request expects. - * - * @return the MPLS label this request expects - */ - @Beta - public MplsLabel mplsLabel() { - return mplsLabel; - } - - @Override - public ResourceType type() { - return ResourceType.MPLS_LABEL; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("mplsLabel", mplsLabel) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/package-info.java deleted file mode 100644 index f374d778..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/link/package-info.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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. - */ - -/** - * Services for reserving links and their capacity as network resources, - * e.g. bandwidth, lambdas. - * <p> - * Note: Classes under the package will be remove. - * Developers should not use the classes. - * This package is marked as deprecated in Emu Release. - * </p> - */ -@Deprecated -package org.onosproject.net.resource.link; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/package-info.java deleted file mode 100644 index a05dfda1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/resource/package-info.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Abstractions for reserving network resources. - * <p> - * Note: Classes under the package will be removed. - * Developers should not use the classes. - * </p> - */ -package org.onosproject.net.resource; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/DefaultLoad.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/DefaultLoad.java deleted file mode 100644 index 45e85372..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/DefaultLoad.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2014 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.net.statistic; - -import com.google.common.base.MoreObjects; - -import static com.google.common.base.Preconditions.checkArgument; - -/** - * Implementation of a load. - */ -public class DefaultLoad implements Load { - - private final boolean isValid; - private final long current; - private final long previous; - private final long time; - private final long interval; - - /** - * Indicates the flow statistics poll interval in seconds. - */ - private static long pollInterval = 10; - - /** - * Creates an invalid load. - */ - public DefaultLoad() { - this.isValid = false; - this.time = System.currentTimeMillis(); - this.current = -1; - this.previous = -1; - this.interval = pollInterval; - } - - /** - * Creates a load value from the parameters. - * - * @param current the current value - * @param previous the previous value - */ - public DefaultLoad(long current, long previous) { - this(current, previous, pollInterval); - } - - /** - * Creates a load value from the parameters. - * - * @param current the current value - * @param previous the previous value - * @param interval poll interval for this load - */ - public DefaultLoad(long current, long previous, long interval) { - checkArgument(interval > 0, "Interval must be greater than 0"); - this.current = current; - this.previous = previous; - this.time = System.currentTimeMillis(); - this.isValid = true; - this.interval = interval; - } - - /** - * Sets the poll interval in seconds. Used solely for the purpose of - * computing the load. - * - * @param newPollInterval poll interval duration in seconds - */ - public static void setPollInterval(long newPollInterval) { - pollInterval = newPollInterval; - } - - @Override - public long rate() { - return (current - previous) / interval; - } - - @Override - public long latest() { - return current; - } - - @Override - public boolean isValid() { - return isValid; - } - - @Override - public long time() { - return time; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper("Load").add("rate", rate()) - .add("latest", latest()).toString(); - - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/FlowStatisticService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/FlowStatisticService.java deleted file mode 100644 index 5216839e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/FlowStatisticService.java +++ /dev/null @@ -1,106 +0,0 @@ -/*
- * 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.net.statistic;
-
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.TypedStoredFlowEntry;
-import org.onosproject.net.flow.instructions.Instruction;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Service for obtaining individual flow statistic information about device and link in the system.
- * Basic statistics are obtained from the StatisticService
- */
-public interface FlowStatisticService {
-
- /**
- * Obtain the summary load list for the device with the given link.
- *
- * @param device the Device to query.
- * @return map of summary flow entry load
- */
- Map<ConnectPoint, SummaryFlowEntryWithLoad> loadSummary(Device device);
-
- /**
- * Obtain the summary load for the device with the given link or port.
- *
- * @param device the Device to query.
- * @param pNumber the port number to query.
- * @return summary flow entry load
- */
- SummaryFlowEntryWithLoad loadSummary(Device device, PortNumber pNumber);
-
- /**
- * Obtain the set of the flow type and load list for the device with the given link.
- *
- * @param device the Device to query.
- * @param liveType the FlowLiveType to filter, null means no filtering .
- * @param instType the InstructionType to filter, null means no filtering.
- * @return map of flow entry load
- */
- Map<ConnectPoint, List<TypedFlowEntryWithLoad>> loadAllByType(Device device,
- TypedStoredFlowEntry.FlowLiveType liveType,
- Instruction.Type instType);
-
- /**
- * Obtain the flow type and load list for the device with the given link or port.
- *
- * @param device the Device to query.
- * @param pNumber the port number of the Device to query
- * @param liveType the FlowLiveType to filter, null means no filtering .
- * @param instType the InstructionType to filter, null means no filtering.
- * @return list of flow entry load
- */
- List<TypedFlowEntryWithLoad> loadAllByType(Device device, PortNumber pNumber,
- TypedStoredFlowEntry.FlowLiveType liveType,
- Instruction.Type instType);
-
- /**
- * Obtain the set of the flow type and load topn list for the device with the given link.
- *
- * @param device the Device to query.
- * @param liveType the FlowLiveType to filter, null means no filtering .
- * @param instType the InstructionType to filter, null means no filtering.
- * @param topn the top number to filter, null means no filtering.
- * @return map of flow entry load
- */
- Map<ConnectPoint, List<TypedFlowEntryWithLoad>> loadTopnByType(Device device,
- TypedStoredFlowEntry.FlowLiveType liveType,
- Instruction.Type instType,
- int topn);
-
- /**
- * Obtain the flow type and load topn list for the device with the given link or port.
- *
- * @param device the Device to query.
- * @param pNumber the port number of the Device to query
- * @param liveType the FlowLiveType to filter, null means no filtering .
- * @param instType the InstructionType to filter, null means no filtering.
- * @param topn topn //FIXME what?
- * @return list of flow entry load
- */
- List<TypedFlowEntryWithLoad> loadTopnByType(Device device, PortNumber pNumber,
- TypedStoredFlowEntry.FlowLiveType liveType,
- Instruction.Type instType,
- int topn);
-}
-
-
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/FlowStatisticStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/FlowStatisticStore.java deleted file mode 100644 index 3c2aa89b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/FlowStatisticStore.java +++ /dev/null @@ -1,65 +0,0 @@ -/*
- * 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.net.statistic;
-
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRule;
-
-import java.util.Set;
-
-/**
- * Flow Store to house the computed statistics.
- */
-public interface FlowStatisticStore {
- /**
- * Remove entries associated with this rule.
- *
- * @param rule {@link org.onosproject.net.flow.FlowRule}
- */
- void removeFlowStatistic(FlowRule rule);
-
- /**
- * Adds a flow stats observation for a flow rule. The previous flow will be removed.
- *
- * @param rule a {@link org.onosproject.net.flow.FlowEntry}
- */
- void addFlowStatistic(FlowEntry rule);
-
- /**
- * Updates a stats observation for a flow rule. The old flow stats will be moved to previous stats.
- *
- * @param rule a {@link org.onosproject.net.flow.FlowEntry}
- */
- void updateFlowStatistic(FlowEntry rule);
-
- /**
- * Fetches the current observed flow stats values.
- *
- * @param connectPoint the port to fetch information for
- * @return set of current flow rules
- */
- Set<FlowEntry> getCurrentFlowStatistic(ConnectPoint connectPoint);
-
- /**
- * Fetches the current observed flow stats values.
- *
- * @param connectPoint the port to fetch information for
- * @return set of current values
- */
- Set<FlowEntry> getPreviousFlowStatistic(ConnectPoint connectPoint);
-}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/Load.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/Load.java deleted file mode 100644 index 38fed04e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/Load.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2014 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.net.statistic; - -/** - * Simple data repository for link load information. - */ -public interface Load { - - /** - * Obtain the current observed rate (in bytes/s) on a link. - * - * @return long value - */ - long rate(); - - /** - * Obtain the latest bytes counter viewed on that link. - * - * @return long value - */ - long latest(); - - /** - * Indicates whether this load was built on valid values. - * - * @return boolean - */ - boolean isValid(); - - /** - * Returns when this value was seen. - * - * @return epoch time - */ - long time(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/StatisticService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/StatisticService.java deleted file mode 100644 index b9f7cc91..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/StatisticService.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2014 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.net.statistic; - -import org.onosproject.core.ApplicationId; -import org.onosproject.core.GroupId; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.flow.FlowRule; - -import java.util.Optional; - -/** - * Service for obtaining statistic information about link in the system. - * Statistics are obtained from the FlowRuleService in order to minimize the - * amount of hammering occuring at the dataplane. - */ -public interface StatisticService { - - /** - * Obtain the load for a the ingress to the given link. - * - * @param link the link to query. - * @return a {@link org.onosproject.net.statistic.Load Load} - */ - Load load(Link link); - - /** - * Obtain the load for the given port. - * - * @param connectPoint the port to query - * @return a {@link org.onosproject.net.statistic.Load} - */ - Load load(ConnectPoint connectPoint); - - /** - * Find the most loaded link along a path. - * - * @param path the path to search in - * @return the most loaded {@link org.onosproject.net.Link}. - */ - Link max(Path path); - - /** - * Find the least loaded link along a path. - * - * @param path the path to search in - * @return the least loaded {@link org.onosproject.net.Link}. - */ - Link min(Path path); - - /** - * Returns the highest hitter (a flow rule) for a given port, ie. the - * flow rule which is generating the most load. - * - * @param connectPoint the port - * @return the flow rule - */ - FlowRule highestHitter(ConnectPoint connectPoint); - - /** - * Obtain the load for a the ingress to the given link used by - * the specified application ID and group ID. - * - * @param link link to query - * @param appId application ID to filter with - * @param groupId group ID to filter with - * @return {@link Load Load} - */ - Load load(Link link, ApplicationId appId, Optional<GroupId> groupId); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/StatisticStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/StatisticStore.java deleted file mode 100644 index 8566ef5b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/StatisticStore.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2014 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.net.statistic; - -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.flow.FlowEntry; -import org.onosproject.net.flow.FlowRule; - -import java.util.Set; - -/** - * Store to house the computed statistics. - */ -public interface StatisticStore { - - /** - * Lay the foundation for receiving flow stats for this rule. - * - * @param rule a {@link org.onosproject.net.flow.FlowRule} - */ - void prepareForStatistics(FlowRule rule); - - /** - * Remove entries associated with this rule. - * - * @param rule {@link org.onosproject.net.flow.FlowRule} - */ - void removeFromStatistics(FlowRule rule); - - /** - * Adds a stats observation for a flow rule. - * - * @param rule a {@link org.onosproject.net.flow.FlowEntry} - */ - void addOrUpdateStatistic(FlowEntry rule); - - /** - * Fetches the current observed stats values. - * - * @param connectPoint the port to fetch information for - * @return set of current flow rules - */ - Set<FlowEntry> getCurrentStatistic(ConnectPoint connectPoint); - - /** - * Fetches the current observed stats values. - * - * @param connectPoint the port to fetch information for - * @return set of current values - */ - Set<FlowEntry> getPreviousStatistic(ConnectPoint connectPoint); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/SummaryFlowEntryWithLoad.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/SummaryFlowEntryWithLoad.java deleted file mode 100644 index 1ec427c0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/SummaryFlowEntryWithLoad.java +++ /dev/null @@ -1,157 +0,0 @@ -/*
- * 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.net.statistic;
-
-import org.onosproject.net.ConnectPoint;
-
-/**
- * Summary Load classified by flow live type.
- */
-public class SummaryFlowEntryWithLoad {
- private ConnectPoint cp;
- private Load totalLoad;
- private Load immediateLoad;
- private Load shortLoad;
- private Load midLoad;
- private Load longLoad;
- private Load unknownLoad;
-
- /**
- * Creates a new summary flow entry having load for the given connect point and total load.
- *
- * @param cp connect point
- * @param totalLoad total load
- */
- public SummaryFlowEntryWithLoad(ConnectPoint cp, Load totalLoad) {
- this.cp = cp;
- this.totalLoad = totalLoad;
- this.immediateLoad = new DefaultLoad();
- this.shortLoad = new DefaultLoad();
- this.midLoad = new DefaultLoad();
- this.longLoad = new DefaultLoad();
- this.unknownLoad = new DefaultLoad();
- }
-
- /**
- * Creates a new summary flow entry having load for the given connect point
- * and total, immediate, short, mid, and long load.
- *
- * @param cp connect point
- * @param totalLoad total load
- * @param immediateLoad immediate load
- * @param shortLoad short load
- * @param midLoad mid load
- * @param longLoad long load
- */
- public SummaryFlowEntryWithLoad(ConnectPoint cp,
- Load totalLoad, Load immediateLoad, Load shortLoad, Load midLoad, Load longLoad) {
- this.cp = cp;
- this.totalLoad = totalLoad;
- this.immediateLoad = immediateLoad;
- this.shortLoad = shortLoad;
- this.midLoad = midLoad;
- this.longLoad = longLoad;
- this.unknownLoad = new DefaultLoad();
- }
-
- /**
- * Creates a new summary flow entry having load for the given connect point
- * and total, immediate, short, mid, long, and unknown load.
- *
- * @param cp connect point
- * @param totalLoad total load
- * @param immediateLoad immediate load
- * @param shortLoad short load
- * @param midLoad mid load
- * @param longLoad long load
- * @param unknownLoad long load
- */
- public SummaryFlowEntryWithLoad(ConnectPoint cp,
- Load totalLoad, Load immediateLoad,
- Load shortLoad, Load midLoad, Load longLoad, Load unknownLoad) {
- this.cp = cp;
- this.totalLoad = totalLoad;
- this.immediateLoad = immediateLoad;
- this.shortLoad = shortLoad;
- this.midLoad = midLoad;
- this.longLoad = longLoad;
- this.unknownLoad = unknownLoad;
- }
-
- /**
- * Returns connect point.
- *
- * @return connect point
- */
- public ConnectPoint connectPoint() {
- return cp;
- }
-
- /**
- * Returns total load of connect point.
- *
- * @return total load
- */
- public Load totalLoad() {
- return totalLoad;
- }
-
- /**
- * Returns immediate load of connect point.
- *
- * @return immediate load
- */
- public Load immediateLoad() {
- return immediateLoad;
- }
-
- /**
- * Returns short load of connect point.
- *
- * @return short load
- */
- public Load shortLoad() {
- return shortLoad;
- }
-
- /**
- * Returns mid load of connect point.
- *
- * @return mid load
- */
- public Load midLoad() {
- return midLoad;
- }
-
- /**
- * Returns long load of connect point.
- *
- * @return long load
- */
- public Load longLoad() {
- return longLoad;
- }
-
- /**
- * Returns unknown load of connect point.
- *
- * @return unknown load
- */
- public Load unknownLoad() {
- return unknownLoad;
- }
-}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/TypedFlowEntryWithLoad.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/TypedFlowEntryWithLoad.java deleted file mode 100644 index a4cbd7d0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/TypedFlowEntryWithLoad.java +++ /dev/null @@ -1,171 +0,0 @@ -/*
- * 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.net.statistic;
-
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.TypedStoredFlowEntry;
-import org.onosproject.net.flow.DefaultTypedFlowEntry;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Load of flow entry of flow live type.
- */
-public class TypedFlowEntryWithLoad {
- private ConnectPoint cp;
- private TypedStoredFlowEntry tfe;
- private Load load;
-
- //TODO: make this variables class, and share with NewAdaptivceFlowStatsCollector class
- private static final int CAL_AND_POLL_INTERVAL = 5; // means SHORT_POLL_INTERVAL
- private static final int MID_POLL_INTERVAL = 10;
- private static final int LONG_POLL_INTERVAL = 15;
-
- /**
- * Creates a new typed flow entry with load.
- *
- * @param cp connect point
- * @param tfe typed flow entry
- * @param load load
- */
- public TypedFlowEntryWithLoad(ConnectPoint cp, TypedStoredFlowEntry tfe, Load load) {
- this.cp = cp;
- this.tfe = tfe;
- this.load = load;
- }
-
- /**
- * Creates a new typed flow entry with load.
- *
- * @param cp connect point
- * @param tfe typed flow entry
- */
- public TypedFlowEntryWithLoad(ConnectPoint cp, TypedStoredFlowEntry tfe) {
- this.cp = cp;
- this.tfe = tfe;
- this.load = new DefaultLoad(tfe.bytes(), 0, typedPollInterval(tfe));
- }
-
- /**
- * Creates a new typed flow entry with load.
- *
- * @param cp connect point
- * @param fe flow entry
- */
- public TypedFlowEntryWithLoad(ConnectPoint cp, FlowEntry fe) {
- this.cp = cp;
- this.tfe = newTypedStoredFlowEntry(fe);
- this.load = new DefaultLoad(fe.bytes(), 0, typedPollInterval(this.tfe));
- }
-
- public ConnectPoint connectPoint() {
- return cp;
- }
- public TypedStoredFlowEntry typedStoredFlowEntry() {
- return tfe;
- }
- public Load load() {
- return load;
- }
- public void setLoad(Load load) {
- this.load = load;
- }
-
- /**
- * Returns short polling interval.
- *
- * @return short poll interval
- */
- public static int shortPollInterval() {
- return CAL_AND_POLL_INTERVAL;
- }
-
- /**
- * Returns mid polling interval.
- *
- * @return mid poll interval
- */
- public static int midPollInterval() {
- return MID_POLL_INTERVAL;
- }
-
- /**
- * Returns long polling interval.
- *
- * @return long poll interval
- */
- public static int longPollInterval() {
- return LONG_POLL_INTERVAL;
- }
-
- /**
- * Returns average polling interval.
- *
- * @return average poll interval
- */
- public static int avgPollInterval() {
- return (CAL_AND_POLL_INTERVAL + MID_POLL_INTERVAL + LONG_POLL_INTERVAL) / 3;
- }
-
- /**
- * Returns current typed flow entry's polling interval.
- *
- * @param tfe typed flow entry
- * @return typed poll interval
- */
- public static long typedPollInterval(TypedStoredFlowEntry tfe) {
- checkNotNull(tfe, "TypedStoredFlowEntry cannot be null");
-
- switch (tfe.flowLiveType()) {
- case LONG_FLOW:
- return LONG_POLL_INTERVAL;
- case MID_FLOW:
- return MID_POLL_INTERVAL;
- case SHORT_FLOW:
- case IMMEDIATE_FLOW:
- default:
- return CAL_AND_POLL_INTERVAL;
- }
- }
-
- /**
- * Creates a new typed flow entry with the given flow entry fe.
- *
- * @param fe flow entry
- * @return new typed flow entry
- */
- public static TypedStoredFlowEntry newTypedStoredFlowEntry(FlowEntry fe) {
- if (fe == null) {
- return null;
- }
-
- long life = fe.life();
-
- if (life >= LONG_POLL_INTERVAL) {
- return new DefaultTypedFlowEntry(fe, TypedStoredFlowEntry.FlowLiveType.LONG_FLOW);
- } else if (life >= MID_POLL_INTERVAL) {
- return new DefaultTypedFlowEntry(fe, TypedStoredFlowEntry.FlowLiveType.MID_FLOW);
- } else if (life >= CAL_AND_POLL_INTERVAL) {
- return new DefaultTypedFlowEntry(fe, TypedStoredFlowEntry.FlowLiveType.SHORT_FLOW);
- } else if (life >= 0) {
- return new DefaultTypedFlowEntry(fe, TypedStoredFlowEntry.FlowLiveType.IMMEDIATE_FLOW);
- } else { // life < 0
- return new DefaultTypedFlowEntry(fe, TypedStoredFlowEntry.FlowLiveType.UNKNOWN_FLOW);
- }
- }
-}
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/package-info.java deleted file mode 100644 index 37889f3d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/statistic/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Service for looking up statistics on links. - */ -package org.onosproject.net.statistic; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/ClusterId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/ClusterId.java deleted file mode 100644 index 1e6780fa..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/ClusterId.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Representation of the topology cluster identity. - */ -public final class ClusterId { - - private final int id; - - // Public construction is prohibit - private ClusterId(int id) { - this.id = id; - } - - /** - * Returns the cluster identifier, represented by the specified integer - * serial number. - * - * @param id integer serial number - * @return cluster identifier - */ - public static ClusterId clusterId(int id) { - return new ClusterId(id); - } - - /** - * Returns the backing integer index. - * - * @return backing integer index - */ - public int index() { - return id; - } - - @Override - public int hashCode() { - return id; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof ClusterId) { - final ClusterId other = (ClusterId) obj; - return Objects.equals(this.id, other.id); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this).add("id", id).toString(); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultGraphDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultGraphDescription.java deleted file mode 100644 index 965c05d4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultGraphDescription.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2014-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.net.topology; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; -import org.onosproject.net.AbstractDescription; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.Device; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Link; -import org.onosproject.net.SparseAnnotations; -import org.slf4j.Logger; - -import java.util.Map; - -import static com.google.common.base.Preconditions.checkArgument; -import static org.slf4j.LoggerFactory.getLogger; - -/** - * Default implementation of an immutable topology graph data carrier. - */ -public class DefaultGraphDescription extends AbstractDescription - implements GraphDescription { - - private static final Logger log = getLogger(DefaultGraphDescription.class); - - private final long nanos; - private final long creationTime; - private final ImmutableSet<TopologyVertex> vertexes; - private final ImmutableSet<TopologyEdge> edges; - - private final Map<DeviceId, TopologyVertex> vertexesById = Maps.newHashMap(); - - /** - * Creates a minimal topology graph description to allow core to construct - * and process the topology graph. - * - * @param nanos time in nanos of when the topology description was created - * @param millis time in millis of when the topology description was created - * @param devices collection of infrastructure devices - * @param links collection of infrastructure links - * @param annotations optional key/value annotations map - */ - public DefaultGraphDescription(long nanos, long millis, - Iterable<Device> devices, - Iterable<Link> links, - SparseAnnotations... annotations) { - super(annotations); - this.nanos = nanos; - this.creationTime = millis; - this.vertexes = buildVertexes(devices); - this.edges = buildEdges(links); - vertexesById.clear(); - } - - @Override - public long timestamp() { - return nanos; - } - - @Override - public long creationTime() { - return creationTime; - } - - @Override - public ImmutableSet<TopologyVertex> vertexes() { - return vertexes; - } - - @Override - public ImmutableSet<TopologyEdge> edges() { - return edges; - } - - // Builds a set of topology vertexes from the specified list of devices - private ImmutableSet<TopologyVertex> buildVertexes(Iterable<Device> devices) { - ImmutableSet.Builder<TopologyVertex> vertexes = ImmutableSet.builder(); - for (Device device : devices) { - TopologyVertex vertex = new DefaultTopologyVertex(device.id()); - vertexes.add(vertex); - vertexesById.put(vertex.deviceId(), vertex); - } - return vertexes.build(); - } - - // Builds a set of topology vertexes from the specified list of links - private ImmutableSet<TopologyEdge> buildEdges(Iterable<Link> links) { - ImmutableSet.Builder<TopologyEdge> edges = ImmutableSet.builder(); - for (Link link : links) { - try { - edges.add(new DefaultTopologyEdge(vertexOf(link.src()), - vertexOf(link.dst()), - link)); - } catch (IllegalArgumentException e) { - log.debug("Ignoring {}, missing vertex", link); - } - } - return edges.build(); - } - - // Fetches a vertex corresponding to the given connection point device. - private TopologyVertex vertexOf(ConnectPoint connectPoint) { - DeviceId id = connectPoint.deviceId(); - TopologyVertex vertex = vertexesById.get(id); - checkArgument(vertex != null, "Vertex missing for %s", id); - return vertex; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyCluster.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyCluster.java deleted file mode 100644 index ac32316c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyCluster.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2014-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.net.topology; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; - -/** - * Default implementation of a network topology cluster. - */ -public class DefaultTopologyCluster implements TopologyCluster { - - private final ClusterId id; - private final int deviceCount; - private final int linkCount; - private final TopologyVertex root; - - /** - * Creates a new topology cluster descriptor with the specified attributes. - * - * @param id cluster id - * @param deviceCount number of devices in the cluster - * @param linkCount number of links in the cluster - * @param root cluster root node - */ - public DefaultTopologyCluster(ClusterId id, int deviceCount, int linkCount, - TopologyVertex root) { - this.id = id; - this.deviceCount = deviceCount; - this.linkCount = linkCount; - this.root = root; - } - - @Override - public ClusterId id() { - return id; - } - - @Override - public int deviceCount() { - return deviceCount; - } - - @Override - public int linkCount() { - return linkCount; - } - - @Override - public TopologyVertex root() { - return root; - } - - @Override - public int hashCode() { - return Objects.hash(id, deviceCount, linkCount, root); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultTopologyCluster) { - final DefaultTopologyCluster other = (DefaultTopologyCluster) obj; - return Objects.equals(this.id, other.id) && - Objects.equals(this.deviceCount, other.deviceCount) && - Objects.equals(this.linkCount, other.linkCount) && - Objects.equals(this.root, other.root); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("id", id) - .add("deviceCount", deviceCount) - .add("linkCount", linkCount) - .add("root", root) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyEdge.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyEdge.java deleted file mode 100644 index 99d700e1..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyEdge.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.net.Link; - -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Implementation of the topology edge backed by a link. - */ -public class DefaultTopologyEdge implements TopologyEdge { - - private final Link link; - private final TopologyVertex src; - private final TopologyVertex dst; - - /** - * Creates a new topology edge. - * - * @param src source vertex - * @param dst destination vertex - * @param link infrastructure link - */ - public DefaultTopologyEdge(TopologyVertex src, TopologyVertex dst, Link link) { - this.src = src; - this.dst = dst; - this.link = checkNotNull(link); - } - - @Override - public Link link() { - return link; - } - - @Override - public TopologyVertex src() { - return src; - } - - @Override - public TopologyVertex dst() { - return dst; - } - - @Override - public int hashCode() { - return link.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultTopologyEdge) { - final DefaultTopologyEdge other = (DefaultTopologyEdge) obj; - return Objects.equals(this.link, other.link); - } - return false; - } - - @Override - public String toString() { - return toStringHelper(this).add("src", src).add("dst", dst).toString(); - } - -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyVertex.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyVertex.java deleted file mode 100644 index 4782bc95..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/DefaultTopologyVertex.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.net.DeviceId; - -import java.util.Objects; - -/** - * Implementation of the topology vertex backed by a device id. - */ -public class DefaultTopologyVertex implements TopologyVertex { - - private final DeviceId deviceId; - - /** - * Creates a new topology vertex. - * - * @param deviceId backing infrastructure device identifier - */ - public DefaultTopologyVertex(DeviceId deviceId) { - this.deviceId = deviceId; - } - - @Override - public DeviceId deviceId() { - return deviceId; - } - - @Override - public int hashCode() { - return deviceId.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj instanceof DefaultTopologyVertex) { - final DefaultTopologyVertex other = (DefaultTopologyVertex) obj; - return Objects.equals(this.deviceId, other.deviceId); - } - return false; - } - - @Override - public String toString() { - return deviceId.toString(); - } - -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/GeoDistanceLinkWeight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/GeoDistanceLinkWeight.java deleted file mode 100644 index c966902e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/GeoDistanceLinkWeight.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2014-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.net.topology; - -import org.onlab.util.GeoLocation; -import org.onosproject.net.AnnotationKeys; -import org.onosproject.net.Annotations; -import org.onosproject.net.Device; -import org.onosproject.net.DeviceId; -import org.onosproject.net.device.DeviceService; - -import static java.lang.Double.MAX_VALUE; - -/** - * Link weight for measuring link cost using the geo distance between link - * vertices as determined by the element longitude/latitude annotation. - */ -public class GeoDistanceLinkWeight implements LinkWeight { - - private static final double MAX_KM = 40_075 / 2.0; - - private final DeviceService deviceService; - - /** - * Creates a new link-weight with access to the specified device service. - * - * @param deviceService device service reference - */ - public GeoDistanceLinkWeight(DeviceService deviceService) { - this.deviceService = deviceService; - } - - @Override - public double weight(TopologyEdge edge) { - GeoLocation src = getLocation(edge.link().src().deviceId()); - GeoLocation dst = getLocation(edge.link().dst().deviceId()); - return src != null && dst != null ? src.kilometersTo(dst) : MAX_KM; - } - - private GeoLocation getLocation(DeviceId deviceId) { - Device d = deviceService.getDevice(deviceId); - Annotations a = d != null ? d.annotations() : null; - double latitude = getDouble(a, AnnotationKeys.LATITUDE); - double longitude = getDouble(a, AnnotationKeys.LONGITUDE); - return latitude == MAX_VALUE || longitude == MAX_VALUE ? null : - new GeoLocation(latitude, longitude); - } - - private double getDouble(Annotations a, String key) { - String value = a != null ? a.value(key) : null; - try { - return value != null ? Double.parseDouble(value) : MAX_VALUE; - } catch (NumberFormatException e) { - return MAX_VALUE; - } - } -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/GraphDescription.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/GraphDescription.java deleted file mode 100644 index 806a5a45..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/GraphDescription.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2014-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.net.topology; - -import org.onosproject.net.Description; - -import com.google.common.collect.ImmutableSet; - -/** - * Describes attribute(s) of a network graph. - */ -public interface GraphDescription extends Description { - - /** - * Returns the creation timestamp of the graph description. This is - * expressed in system nanos to allow proper sequencing. - * - * @return graph description creation timestamp - */ - long timestamp(); - - /** - * Returns the creation timestamp of the graph description. This is - * expressed in system millis to allow proper date and time formatting. - * - * @return graph description creation timestamp in millis - */ - long creationTime(); - - /** - * Returns the set of topology graph vertexes. - * - * @return set of graph vertexes - */ - ImmutableSet<TopologyVertex> vertexes(); - - /** - * Returns the set of topology graph edges. - * - * @return set of graph edges - */ - ImmutableSet<TopologyEdge> edges(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/HopCountLinkWeight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/HopCountLinkWeight.java deleted file mode 100644 index c557016b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/HopCountLinkWeight.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.onosproject.net.topology; - -import static org.onosproject.net.Link.State.ACTIVE; -import static org.onosproject.net.Link.Type.INDIRECT; - -/** - * Link weight for measuring link cost as hop count with indirect links - * being as expensive as traversing the entire graph to assume the worst. - */ -public class HopCountLinkWeight implements LinkWeight { - private final int indirectLinkCost; - - /** - * Creates a new hop-count weight. - */ - public HopCountLinkWeight() { - this.indirectLinkCost = Short.MAX_VALUE; - } - - /** - * Creates a new hop-count weight with the specified cost of indirect links. - */ - public HopCountLinkWeight(int indirectLinkCost) { - this.indirectLinkCost = indirectLinkCost; - } - - @Override - public double weight(TopologyEdge edge) { - // To force preference to use direct paths first, make indirect - // links as expensive as the linear vertex traversal. - return edge.link().state() == - ACTIVE ? (edge.link().type() == - INDIRECT ? indirectLinkCost : 1) : -1; - } -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/LinkWeight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/LinkWeight.java deleted file mode 100644 index a19abd40..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/LinkWeight.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onlab.graph.EdgeWeight; - -/** - * Entity capable of determining cost or weight of a specified topology - * graph edge. - */ -public interface LinkWeight extends EdgeWeight<TopologyVertex, TopologyEdge> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/MetricLinkWeight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/MetricLinkWeight.java deleted file mode 100644 index 8463e087..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/MetricLinkWeight.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2014-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.net.topology; - -import org.onosproject.net.AnnotationKeys; - -/** - * Link weight for measuring link cost using the link metric annotation. - */ -public class MetricLinkWeight implements LinkWeight { - - @Override - public double weight(TopologyEdge edge) { - String v = edge.link().annotations().value(AnnotationKeys.METRIC); - try { - return v != null ? Double.parseDouble(v) : 1; - } catch (NumberFormatException e) { - return 1; - } - } -} - diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/PathAdminService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/PathAdminService.java deleted file mode 100644 index 9d077e1e..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/PathAdminService.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2014-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.net.topology; - -import org.onlab.graph.GraphPathSearch; - -/** - * Provides administrative abilities to tailor the path service behaviours. - */ -public interface PathAdminService { - - /** - * Sets the specified link-weight function to be used as a default. - * If null is specified, the builtin default hop-count link-weight will be - * used. - * - * @param linkWeight default link-weight function - */ - void setDefaultLinkWeight(LinkWeight linkWeight); - - /** - * Sets the specified graph path search algorightm to be used as a default. - * If null is specified, the builtin default all-shortest-paths Dijkstra - * algorithm will be used. - * - * @param graphPathSearch default graph path search algorithm - */ - void setDefaultGraphPathSearch(GraphPathSearch<TopologyVertex, TopologyEdge> graphPathSearch); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/PathService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/PathService.java deleted file mode 100644 index 38954079..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/PathService.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.net.DisjointPath; -import org.onosproject.net.ElementId; -import org.onosproject.net.Link; -import org.onosproject.net.Path; - -import java.util.Map; -import java.util.Set; - -/** - * Service for obtaining pre-computed paths or for requesting computation of - * paths using the current topology snapshot. - */ -public interface PathService { - - /** - * Returns the set of all shortest paths between the specified source and - * destination elements. The path is computed using the default edge-weight - * function, which by default is hop-count. - * - * @param src source element - * @param dst destination element - * @return set of all shortest paths between the two elements - */ - Set<Path> getPaths(ElementId src, ElementId dst); - - /** - * Returns the set of all shortest paths between the specified source and - * destination network elements. The path is computed using the supplied - * edge-weight function. - * - * @param src source element - * @param dst destination element - * @param weight edge-weight entity - * @return set of all shortest paths between the two element - */ - Set<Path> getPaths(ElementId src, ElementId dst, LinkWeight weight); - - /** - * Returns the set of all disjoint shortest path pairs between the - * specified source and destination elements. The path is computed using - * the default edge-weight function, which by default is hop-count. - * - * @param src source device - * @param dst destination device - * @return set of all shortest paths between the two devices - */ - Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst); - - /** - * Returns the set of all disjoint shortest path pairs between the - * specified source and destination elements. The path is computed using - * the supplied edge-weight function. - * - * @param src source device - * @param dst destination device - * @param weight edge-weight entity - * @return set of all shortest paths between the two devices - */ - Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, - LinkWeight weight); - - /** - * Returns the set of all disjoint shortest path pairs between the - * specified source and destination elements and taking into consideration - * the provided risk profile. The path is computed using the default - * edge-weight function, which by default is hop-count. - * - * @param src source device - * @param dst destination device - * @param riskProfile map of edges to risk profiles - * @return set of all shortest paths between the two devices - */ - Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, - Map<Link, Object> riskProfile); - - /** - * Returns the set of all disjoint shortest path pairs between the - * specified source and destination elements and taking into consideration - * the provided risk profile. The path is computed using the supplied - * edge-weight function. - * - * @param src source device - * @param dst destination device - * @param weight edge-weight entity - * @param riskProfile map of edges to risk profiles - * @return set of all shortest paths between the two devices - */ - Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, - LinkWeight weight, - Map<Link, Object> riskProfile); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/Topology.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/Topology.java deleted file mode 100644 index 6337807c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/Topology.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2014-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.net.topology; - -import org.onosproject.net.Provided; - -/** - * Represents a network topology computation snapshot. - */ -public interface Topology extends Provided { - - /** - * Returns the time, specified in system nanos of when the topology became - * available. - * - * @return time in system nanos - */ - long time(); - - /** - * Returns the time, specified in system millis of when the topology became - * available. - * - * @return time in system nanos - */ - long creationTime(); - - /** - * Returns the time, specified in system nanos of how long the topology took - * to compute. - * - * @return elapsed time in system nanos - */ - long computeCost(); - - /** - * Returns the number of SCCs (strongly connected components) in the - * topology. - * - * @return number of clusters - */ - int clusterCount(); - - /** - * Returns the number of infrastructure devices in the topology. - * - * @return number of devices - */ - int deviceCount(); - - /** - * Returns the number of infrastructure links in the topology. - * - * @return number of links - */ - int linkCount(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyCluster.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyCluster.java deleted file mode 100644 index 8e685534..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyCluster.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2014-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.net.topology; - -/** - * Representation of an SCC (strongly-connected component) in a network topology. - */ -public interface TopologyCluster { - - /** - * Returns the cluster id. - * - * @return cluster identifier - */ - ClusterId id(); - - /** - * Returns the number of devices in the cluster. - * - * @return number of cluster devices - */ - int deviceCount(); - - /** - * Returns the number of infrastructure links in the cluster. - * - * @return number of cluster links - */ - int linkCount(); - - /** - * Returns the cluster root vertex. - * - * @return cluster root vertex - */ - TopologyVertex root(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyEdge.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyEdge.java deleted file mode 100644 index 008c8c44..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyEdge.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onlab.graph.Edge; -import org.onosproject.net.Link; - -/** - * Represents an edge in the topology graph. - */ -public interface TopologyEdge extends Edge<TopologyVertex> { - - /** - * Returns the associated infrastructure link. - * - * @return backing infrastructure link - */ - Link link(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyEvent.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyEvent.java deleted file mode 100644 index 10c8dfc3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyEvent.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.event.AbstractEvent; -import org.onosproject.event.Event; - -import java.util.List; - -/** - * Describes network topology event. - */ -public class TopologyEvent extends AbstractEvent<TopologyEvent.Type, Topology> { - - private final List<Event> reasons; - - /** - * Type of topology events. - */ - public enum Type { - /** - * Signifies that topology has changed. - */ - TOPOLOGY_CHANGED - } - - /** - * Creates an event of a given type and for the specified topology and the - * current time. - * - * @param type topology event type - * @param topology event topology subject - * @param reasons list of events that triggered topology change - */ - public TopologyEvent(Type type, Topology topology, List<Event> reasons) { - super(type, topology); - this.reasons = reasons; - } - - /** - * Creates an event of a given type and for the specified topology and time. - * - * @param type link event type - * @param topology event topology subject - * @param reasons list of events that triggered topology change - * @param time occurrence time - */ - public TopologyEvent(Type type, Topology topology, List<Event> reasons, - long time) { - super(type, topology, time); - this.reasons = reasons; - } - - - /** - * Returns the list of events that triggered the topology change. - * - * @return list of events responsible for change in topology; null if - * initial topology computation - */ - public List<Event> reasons() { - return reasons; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyGraph.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyGraph.java deleted file mode 100644 index f3565fa4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyGraph.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onlab.graph.Graph; - -/** - * Represents an immutable topology graph. - */ -public interface TopologyGraph extends Graph<TopologyVertex, TopologyEdge> { - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyListener.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyListener.java deleted file mode 100644 index 625587b0..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.event.EventListener; - -/** - * Entity capable of receiving network topology related events. - */ -public interface TopologyListener extends EventListener<TopologyEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProvider.java deleted file mode 100644 index f52b798b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.net.provider.Provider; - -/** - * Means for injecting topology information into the core. - */ -public interface TopologyProvider extends Provider { - - /** - * Triggers topology recomputation. - */ - void triggerRecompute(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProviderRegistry.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProviderRegistry.java deleted file mode 100644 index 15eeed45..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProviderRegistry.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.net.provider.ProviderRegistry; - -/** - * Abstraction of a network topology provider registry. - */ -public interface TopologyProviderRegistry extends - ProviderRegistry<TopologyProvider, TopologyProviderService> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProviderService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProviderService.java deleted file mode 100644 index 742110a2..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyProviderService.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.event.Event; -import org.onosproject.net.provider.ProviderService; - -import java.util.List; - -/** - * Means for injecting topology information into the core. - */ -public interface TopologyProviderService extends ProviderService<TopologyProvider> { - - /** - * Signals the core that some aspect of the topology has changed. - * - * @param graphDescription information about the network graph - * @param reasons events that triggered topology change - */ - void topologyChanged(GraphDescription graphDescription, - List<Event> reasons); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyService.java deleted file mode 100644 index 466e4f9b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyService.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.event.ListenerService; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.DisjointPath; -import org.onosproject.net.Link; -import org.onosproject.net.Path; - -import java.util.Map; -import java.util.Set; - -/** - * Service for providing network topology information. - */ -public interface TopologyService - extends ListenerService<TopologyEvent, TopologyListener> { - - /** - * Returns the current topology descriptor. - * - * @return current topology - */ - Topology currentTopology(); - - /** - * Indicates whether the specified topology is the latest or not. - * - * @param topology topology descriptor - * @return true if the topology is the most recent; false otherwise - */ - boolean isLatest(Topology topology); - - /** - * Returns the graph view of the specified topology. - * - * @param topology topology descriptor - * @return topology graph view - */ - TopologyGraph getGraph(Topology topology); - - /** - * Returns the set of clusters in the specified topology. - * - * @param topology topology descriptor - * @return set of topology clusters - */ - Set<TopologyCluster> getClusters(Topology topology); - - /** - * Returns the cluster with the specified ID. - * - * @param topology topology descriptor - * @param clusterId cluster identifier - * @return topology cluster - */ - TopologyCluster getCluster(Topology topology, ClusterId clusterId); - - /** - * Returns the set of devices that belong to the specified cluster. - * - * @param topology topology descriptor - * @param cluster topology cluster - * @return set of cluster devices - */ - Set<DeviceId> getClusterDevices(Topology topology, TopologyCluster cluster); - - /** - * Returns the set of links that form the specified cluster. - * - * @param topology topology descriptor - * @param cluster topology cluster - * @return set of cluster links - */ - Set<Link> getClusterLinks(Topology topology, TopologyCluster cluster); - - /** - * Returns the set of all shortest paths, precomputed in terms of hop-count, - * between the specified source and destination devices. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @return set of all shortest paths between the two devices - */ - Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst); - - /** - * Returns the set of all shortest paths, computed using the supplied - * edge-weight entity, between the specified source and destination devices. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @param weight edge-weight entity - * @return set of all shortest paths between the two devices - */ - Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, - LinkWeight weight); - - /** - * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count, - * between the specified source and destination devices. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @return set of all shortest paths between the two devices - */ - Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst); - - /** - * Returns the set of all disjoint shortest path pairs, computed using the supplied - * edge-weight entity, between the specified source and destination devices. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @param weight edge-weight entity - * @return set of all shortest paths between the two devices - */ - Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst, - LinkWeight weight); - - /** - * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count, - * between the specified source and destination devices. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @param riskProfile map of edges to risk profiles - * @return set of all shortest paths between the two devices - */ - Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst, - Map<Link, Object> riskProfile); - - /** - * Returns the set of all disjoint shortest path pairs, precomputed in terms of hop-count, - * between the specified source and destination devices. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @param weight edge-weight entity - * @param riskProfile map of edges to risk profiles - * @return set of all shortest paths between the two devices - */ - Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst, - LinkWeight weight, Map<Link, Object> riskProfile); - - /** - * Indicates whether the specified connection point is part of the network - * infrastructure or part of network edge. - * - * @param topology topology descriptor - * @param connectPoint connection point - * @return true of connection point is in infrastructure; false if edge - */ - boolean isInfrastructure(Topology topology, ConnectPoint connectPoint); - - - /** - * Indicates whether broadcast is allowed for traffic received on the - * specified connection point. - * - * @param topology topology descriptor - * @param connectPoint connection point - * @return true if broadcast is permissible - */ - boolean isBroadcastPoint(Topology topology, ConnectPoint connectPoint); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyStore.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyStore.java deleted file mode 100644 index 039a205c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyStore.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.event.Event; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.DeviceId; -import org.onosproject.net.Link; -import org.onosproject.net.Path; -import org.onosproject.net.DisjointPath; -import org.onosproject.net.provider.ProviderId; -import org.onosproject.store.Store; - -import java.util.List; -import java.util.Set; -import java.util.Map; - -/** - * Manages inventory of topology snapshots; not intended for direct use. - */ -public interface TopologyStore extends Store<TopologyEvent, TopologyStoreDelegate> { - - /** - * Returns the current topology snapshot. - * - * @return current topology descriptor - */ - Topology currentTopology(); - - /** - * Indicates whether the topology is the latest. - * - * @param topology topology descriptor - * @return true if topology is the most recent one - */ - boolean isLatest(Topology topology); - - /** - * Returns the immutable graph view of the current topology. - * - * @param topology topology descriptor - * @return graph view - */ - TopologyGraph getGraph(Topology topology); - - /** - * Returns the set of topology SCC clusters. - * - * @param topology topology descriptor - * @return set of clusters - */ - Set<TopologyCluster> getClusters(Topology topology); - - /** - * Returns the cluster of the specified topology. - * - * @param topology topology descriptor - * @param clusterId cluster identity - * @return topology cluster - */ - TopologyCluster getCluster(Topology topology, ClusterId clusterId); - - /** - * Returns the cluster of the specified topology. - * - * @param topology topology descriptor - * @param cluster topology cluster - * @return set of cluster links - */ - Set<DeviceId> getClusterDevices(Topology topology, TopologyCluster cluster); - - /** - * Returns the cluster of the specified topology. - * - * @param topology topology descriptor - * @param cluster topology cluster - * @return set of cluster links - */ - Set<Link> getClusterLinks(Topology topology, TopologyCluster cluster); - - /** - * Returns the set of pre-computed shortest paths between src and dest. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @return set of shortest paths - */ - Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst); - - /** - * Computes and returns the set of shortest paths between src and dest. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @param weight link weight function - * @return set of shortest paths - */ - Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, - LinkWeight weight); - - /** - * Computes and returns the set of disjoint shortest path pairs - * between src and dst. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @param weight link weight function - * @return set of shortest paths - */ - Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst, - LinkWeight weight); - - /** - * Computes and returns the set of disjoint shortest path pairs - * between src and dst. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @return set of shortest paths - */ - Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst); - - /** - * Computes and returns the set of SRLG disjoint shortest path pairs between source - * and dst, given a mapping of edges to SRLG risk groups. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @param weight link weight function - * @param riskProfile map of edges to objects. Edges that map to the same object will - * be treated as if they were in the same risk group. - * @return set of shortest paths - */ - Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst, - LinkWeight weight, Map<Link, Object> riskProfile); - - /** - * Returns the set of pre-computed SRLG shortest paths between src and dest. - * - * @param topology topology descriptor - * @param src source device - * @param dst destination device - * @param riskProfile map of edges to objects. Edges that map to the same object will - * be treated as if they were in the same risk group. - * @return set of shortest paths - */ - Set<DisjointPath> getDisjointPaths(Topology topology, DeviceId src, DeviceId dst, - Map<Link, Object> riskProfile); - - - /** - * Indicates whether the given connect point is part of the network fabric. - * - * @param topology topology descriptor - * @param connectPoint connection point - * @return true if infrastructure; false otherwise - */ - boolean isInfrastructure(Topology topology, ConnectPoint connectPoint); - - /** - * Indicates whether broadcast is allowed for traffic received on the - * given connection point. - * - * @param topology topology descriptor - * @param connectPoint connection point - * @return true if broadcast allowed; false otherwise - */ - boolean isBroadcastPoint(Topology topology, ConnectPoint connectPoint); - - /** - * Generates a new topology snapshot from the specified description. - * - * @param providerId provider identification - * @param graphDescription topology graph description - * @param reasons list of events that triggered the update - * @return topology update event or null if the description is old - */ - TopologyEvent updateTopology(ProviderId providerId, - GraphDescription graphDescription, - List<Event> reasons); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyStoreDelegate.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyStoreDelegate.java deleted file mode 100644 index c425970b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyStoreDelegate.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onosproject.store.StoreDelegate; - -/** - * Topology store delegate abstraction. - */ -public interface TopologyStoreDelegate extends StoreDelegate<TopologyEvent> { -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyVertex.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyVertex.java deleted file mode 100644 index 9f37dcb4..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/TopologyVertex.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2014 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.net.topology; - -import org.onlab.graph.Vertex; -import org.onosproject.net.DeviceId; - -/** - * Represents a vertex in the topology graph. - */ -public interface TopologyVertex extends Vertex { - - /** - * Returns the associated infrastructure device identification. - * - * @return device identifier - */ - DeviceId deviceId(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/package-info.java deleted file mode 100644 index 3cd6ceb8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/topology/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014 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. - */ - -/** - * Network topology model & related services API definitions. - */ -package org.onosproject.net.topology; |