aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/apps/iptopology-api/src/main/java/org/onosproject/iptopology/api/device/IpDeviceStore.java
blob: db1dd4294e43d35a12557208ac880342aafca515 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
 * 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.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);

}