/* * Copyright 2015-present Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.iptopology.api.device; import org.onlab.packet.Ip4Address; import org.onlab.packet.Ip6Address; import org.onosproject.iptopology.api.DevicePrefix; import org.onosproject.iptopology.api.InterfaceIdentifier; import org.onosproject.iptopology.api.IpDevice; import org.onosproject.iptopology.api.DeviceIntf; import org.onosproject.net.DeviceId; import org.onosproject.net.provider.ProviderId; import org.onosproject.store.Store; import java.util.List; /** * Manages inventory of ip devices; not intended for direct use. */ public interface IpDeviceStore extends Store<IpDeviceEvent, IpDeviceStoreDelegate> { /** * Returns the number of ip devices known to the system. * * @return number of ip devices */ int getIpDeviceCount(); /** * Returns an iterable collection of all ip devices known to the system. * * @return ip device collection */ Iterable<IpDevice> getIpDevices(); /** * Returns an ip device with the specified identifier. * * @param deviceId device identifier * @return ip device */ IpDevice getIpDevice(DeviceId deviceId); /** * Creates a new infrastructure ip 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 */ IpDeviceEvent createOrUpdateIpDevice(ProviderId providerId, DeviceId deviceId, IpDeviceDescription deviceDescription); /** * Administratively removes the specified ip device from the store. * * @param deviceId device to be removed * @return null if no such ip device */ IpDeviceEvent removeIpDevice(DeviceId deviceId); /** * Updates the interface of the specified ip device using the given * list of interface descriptions. The list is assumed to be comprehensive. * * @param providerId provider identifier * @param deviceId ip device identifier * @param interfaceDescriptions list of interface descriptions * @return ready to send events describing what occurred; empty list if no change */ List<IpDeviceEvent> updateInterfaces(ProviderId providerId, DeviceId deviceId, List<InterfaceDescription> interfaceDescriptions); /** * Administratively removes the specified interface from the store. * * @param deviceId device of the interfaces to be removed * @param interfaceDescriptions list of interface descriptions * @return ready to send events describing what occurred. */ List<IpDeviceEvent> removeInterfaces(DeviceId deviceId, List<InterfaceDescription> interfaceDescriptions); /** * Returns the list of interfaces that belong to the specified device. * * @param deviceId device identifier * @return list of device interfaces */ List<DeviceIntf> getInterfaces(DeviceId deviceId); /** * Returns the specified device interface. * * @param deviceId device identifier * @param ipv4Address ipv4 address of the interface * @return device interface */ DeviceIntf getInterface(DeviceId deviceId, Ip4Address ipv4Address); /** * Returns the specified device interface. * * @param deviceId device identifier * @param ipv6Address ipv6 address of the interface * @return device interface */ DeviceIntf getInterface(DeviceId deviceId, Ip6Address ipv6Address); /** * Returns the specified device interface. * * @param deviceId device identifier * @param intfId interface identifier of the interface * @return device interface */ DeviceIntf getInterface(DeviceId deviceId, InterfaceIdentifier intfId); /** * Updates the prefix information of the specified ip device using the given * list of prefix descriptions. The list is assumed to be comprehensive. * * @param providerId provider identifier * @param deviceId ip device identifier * @param prefixDescriptions list of prefix descriptions * @return ready to send events describing what occurred; empty list if no change */ List<IpDeviceEvent> updatePrefixes(ProviderId providerId, DeviceId deviceId, List<PrefixDescription> prefixDescriptions); /** * Administratively removes the specified prefix from the store. * * @param deviceId device of the prefix to be removed * @param prefixDescriptions list of prefix descriptions * @return ready to send events describing what occurred. */ List<IpDeviceEvent> removePrefixes(DeviceId deviceId, List<PrefixDescription> prefixDescriptions); /** * Returns the list of prefixes that belong to the specified device. * * @param deviceId device identifier * @return list of device prefixes */ List<DevicePrefix> getPrefixes(DeviceId deviceId); }