Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next
Showing
141 changed files
with
360 additions
and
80 deletions
... | @@ -6,7 +6,7 @@ | ... | @@ -6,7 +6,7 @@ |
6 | 6 | ||
7 | <parent> | 7 | <parent> |
8 | <groupId>org.onlab.onos</groupId> | 8 | <groupId>org.onlab.onos</groupId> |
9 | - <artifactId>onos-net</artifactId> | 9 | + <artifactId>onos-core</artifactId> |
10 | <version>1.0.0-SNAPSHOT</version> | 10 | <version>1.0.0-SNAPSHOT</version> |
11 | <relativePath>../pom.xml</relativePath> | 11 | <relativePath>../pom.xml</relativePath> |
12 | </parent> | 12 | </parent> | ... | ... |
1 | package org.onlab.onos.net; | 1 | package org.onlab.onos.net; |
2 | 2 | ||
3 | +import org.onlab.packet.IPv4; | ||
4 | +import org.onlab.packet.MACAddress; | ||
5 | + | ||
6 | +import java.util.Set; | ||
7 | + | ||
3 | /** | 8 | /** |
4 | * Abstraction of an end-station host on the network, essentially a NIC. | 9 | * Abstraction of an end-station host on the network, essentially a NIC. |
5 | */ | 10 | */ |
6 | public interface Host extends Element { | 11 | public interface Host extends Element { |
7 | 12 | ||
8 | - // MAC, IP(s), optional VLAN ID | 13 | + /** |
14 | + * Host identification. | ||
15 | + * | ||
16 | + * @return host id | ||
17 | + */ | ||
18 | + HostId id(); | ||
19 | + | ||
20 | + /** | ||
21 | + * Returns the host MAC address. | ||
22 | + * | ||
23 | + * @return mac address | ||
24 | + */ | ||
25 | + MACAddress mac(); | ||
9 | 26 | ||
27 | + /** | ||
28 | + * Returns set of IP addresses currently bound to the host MAC address. | ||
29 | + * | ||
30 | + * @return set of IP addresses; empty if no IP address is bound | ||
31 | + */ | ||
32 | + Set<IPv4> ipAddresses(); | ||
10 | 33 | ||
11 | /** | 34 | /** |
12 | * Returns the most recent host location where the host attaches to the | 35 | * Returns the most recent host location where the host attaches to the |
... | @@ -16,6 +39,6 @@ public interface Host extends Element { | ... | @@ -16,6 +39,6 @@ public interface Host extends Element { |
16 | */ | 39 | */ |
17 | HostLocation location(); | 40 | HostLocation location(); |
18 | 41 | ||
19 | - // list of recent locations? | 42 | + // TODO: explore capturing list of recent locations to aid in mobility |
20 | 43 | ||
21 | } | 44 | } | ... | ... |
1 | package org.onlab.onos.net; | 1 | package org.onlab.onos.net; |
2 | 2 | ||
3 | +import org.onlab.packet.MACAddress; | ||
4 | + | ||
3 | import java.net.URI; | 5 | import java.net.URI; |
4 | 6 | ||
5 | /** | 7 | /** |
... | @@ -16,6 +18,7 @@ public final class HostId extends ElementId { | ... | @@ -16,6 +18,7 @@ public final class HostId extends ElementId { |
16 | * Creates a device id using the supplied URI. | 18 | * Creates a device id using the supplied URI. |
17 | * | 19 | * |
18 | * @param uri device URI | 20 | * @param uri device URI |
21 | + * @return host identifier | ||
19 | */ | 22 | */ |
20 | public static HostId hostId(URI uri) { | 23 | public static HostId hostId(URI uri) { |
21 | return new HostId(uri); | 24 | return new HostId(uri); |
... | @@ -25,9 +28,23 @@ public final class HostId extends ElementId { | ... | @@ -25,9 +28,23 @@ public final class HostId extends ElementId { |
25 | * Creates a device id using the supplied URI string. | 28 | * Creates a device id using the supplied URI string. |
26 | * | 29 | * |
27 | * @param string device URI string | 30 | * @param string device URI string |
31 | + * @return host identifier | ||
28 | */ | 32 | */ |
29 | public static HostId hostId(String string) { | 33 | public static HostId hostId(String string) { |
30 | return hostId(URI.create(string)); | 34 | return hostId(URI.create(string)); |
31 | } | 35 | } |
32 | 36 | ||
37 | + /** | ||
38 | + * Creates a device id using the supplied MAC & VLAN ID. | ||
39 | + * | ||
40 | + * @param mac mac address | ||
41 | + * @param vlanId vlan identifier | ||
42 | + * @return host identifier | ||
43 | + */ | ||
44 | + // FIXME: replace vlanId long with a rich data-type, e.g. VLanId or something like that | ||
45 | + public static HostId hostId(MACAddress mac, long vlanId) { | ||
46 | + // FIXME: use more efficient means of encoding | ||
47 | + return hostId("nic" + ":" + mac + "/" + vlanId); | ||
48 | + } | ||
49 | + | ||
33 | } | 50 | } | ... | ... |
... | @@ -105,7 +105,7 @@ public class DeviceEvent extends AbstractEvent<DeviceEvent.Type, Device> { | ... | @@ -105,7 +105,7 @@ public class DeviceEvent extends AbstractEvent<DeviceEvent.Type, Device> { |
105 | * | 105 | * |
106 | * @return port subject or null if the event is not port specific. | 106 | * @return port subject or null if the event is not port specific. |
107 | */ | 107 | */ |
108 | - Port port() { | 108 | + public Port port() { |
109 | return port; | 109 | return port; |
110 | } | 110 | } |
111 | 111 | ... | ... |
... | @@ -23,6 +23,11 @@ public class HostEvent extends AbstractEvent<HostEvent.Type, Host> { | ... | @@ -23,6 +23,11 @@ public class HostEvent extends AbstractEvent<HostEvent.Type, Host> { |
23 | HOST_REMOVED, | 23 | HOST_REMOVED, |
24 | 24 | ||
25 | /** | 25 | /** |
26 | + * Signifies that host data changed, e.g. IP address | ||
27 | + */ | ||
28 | + HOST_UPDATED, | ||
29 | + | ||
30 | + /** | ||
26 | * Signifies that a host location has changed. | 31 | * Signifies that a host location has changed. |
27 | */ | 32 | */ |
28 | HOST_MOVED | 33 | HOST_MOVED | ... | ... |
1 | package org.onlab.onos.net.host; | 1 | package org.onlab.onos.net.host; |
2 | 2 | ||
3 | +import org.onlab.onos.net.HostId; | ||
3 | import org.onlab.onos.net.provider.ProviderService; | 4 | import org.onlab.onos.net.provider.ProviderService; |
4 | 5 | ||
5 | /** | 6 | /** |
... | @@ -11,15 +12,16 @@ public interface HostProviderService extends ProviderService<HostProvider> { | ... | @@ -11,15 +12,16 @@ public interface HostProviderService extends ProviderService<HostProvider> { |
11 | * Notifies the core when a host has been detected on a network along with | 12 | * Notifies the core when a host has been detected on a network along with |
12 | * information that identifies the hoot location. | 13 | * information that identifies the hoot location. |
13 | * | 14 | * |
15 | + * @param hostId id of the host that been detected | ||
14 | * @param hostDescription description of host and its location | 16 | * @param hostDescription description of host and its location |
15 | */ | 17 | */ |
16 | - void hostDetected(HostDescription hostDescription); | 18 | + void hostDetected(HostId hostId, HostDescription hostDescription); |
17 | 19 | ||
18 | /** | 20 | /** |
19 | * Notifies the core when a host is no longer detected on a network. | 21 | * Notifies the core when a host is no longer detected on a network. |
20 | * | 22 | * |
21 | - * @param hostDescription description of host | 23 | + * @param hostId id of the host that vanished |
22 | */ | 24 | */ |
23 | - void hostVanished(HostDescription hostDescription); | 25 | + void hostVanished(HostId hostId); |
24 | 26 | ||
25 | } | 27 | } | ... | ... |
... | @@ -2,8 +2,10 @@ package org.onlab.onos.net.host; | ... | @@ -2,8 +2,10 @@ package org.onlab.onos.net.host; |
2 | 2 | ||
3 | import org.onlab.onos.net.ConnectPoint; | 3 | import org.onlab.onos.net.ConnectPoint; |
4 | import org.onlab.onos.net.DeviceId; | 4 | import org.onlab.onos.net.DeviceId; |
5 | -import org.onlab.onos.net.ElementId; | ||
6 | import org.onlab.onos.net.Host; | 5 | import org.onlab.onos.net.Host; |
6 | +import org.onlab.onos.net.HostId; | ||
7 | +import org.onlab.packet.IPv4; | ||
8 | +import org.onlab.packet.MACAddress; | ||
7 | 9 | ||
8 | import java.util.Set; | 10 | import java.util.Set; |
9 | 11 | ||
... | @@ -13,6 +15,13 @@ import java.util.Set; | ... | @@ -13,6 +15,13 @@ import java.util.Set; |
13 | public interface HostService { | 15 | public interface HostService { |
14 | 16 | ||
15 | /** | 17 | /** |
18 | + * Returns the number of end-station hosts known to the system. | ||
19 | + * | ||
20 | + * @return number of end-station hosts | ||
21 | + */ | ||
22 | + public int getHostCount(); | ||
23 | + | ||
24 | + /** | ||
16 | * Returns a collection of all end-station hosts. | 25 | * Returns a collection of all end-station hosts. |
17 | * | 26 | * |
18 | * @return collection of hosts | 27 | * @return collection of hosts |
... | @@ -25,12 +34,32 @@ public interface HostService { | ... | @@ -25,12 +34,32 @@ public interface HostService { |
25 | * @param hostId host identifier | 34 | * @param hostId host identifier |
26 | * @return host or null if one with the given identifier is not known | 35 | * @return host or null if one with the given identifier is not known |
27 | */ | 36 | */ |
28 | - Host getHost(ElementId hostId); // TODO: change to HostId | 37 | + Host getHost(HostId hostId); |
38 | + | ||
39 | + /** | ||
40 | + * Returns the set of hosts that belong to the specified VLAN. | ||
41 | + * | ||
42 | + * @param vlanId vlan identifier | ||
43 | + * @return set of hosts in the given vlan id | ||
44 | + */ | ||
45 | + // FIXME: change long to VLanId | ||
46 | + Set<Host> getHostsByVlan(long vlanId); | ||
29 | 47 | ||
30 | - // TODO: determine which ones make sense or which we care to support | 48 | + /** |
31 | - // Set<Host> getHostsByVlan(VlanId vlan); | 49 | + * Returns the set of hosts that have the specified MAC address. |
32 | - // Set<Host> getHostsByMac(MacAddress mac); | 50 | + * |
33 | - // Set<Host> getHostsByIp(IpAddress ip); | 51 | + * @param mac mac address |
52 | + * @return set of hosts with the given mac | ||
53 | + */ | ||
54 | + Set<Host> getHostsByMac(MACAddress mac); | ||
55 | + | ||
56 | + /** | ||
57 | + * Returns the set of hosts that have the specified IP address. | ||
58 | + * | ||
59 | + * @param ip ip address | ||
60 | + * @return set of hosts with the given IP | ||
61 | + */ | ||
62 | + Set<Host> getHostsByIp(IPv4 ip); | ||
34 | 63 | ||
35 | /** | 64 | /** |
36 | * Returns the set of hosts whose most recent location is the specified | 65 | * Returns the set of hosts whose most recent location is the specified | ... | ... |
... | @@ -11,14 +11,14 @@ | ... | @@ -11,14 +11,14 @@ |
11 | <relativePath>../pom.xml</relativePath> | 11 | <relativePath>../pom.xml</relativePath> |
12 | </parent> | 12 | </parent> |
13 | 13 | ||
14 | - <artifactId>onos-net</artifactId> | 14 | + <artifactId>onos-core</artifactId> |
15 | <packaging>pom</packaging> | 15 | <packaging>pom</packaging> |
16 | 16 | ||
17 | <description>ONOS Core root project</description> | 17 | <description>ONOS Core root project</description> |
18 | 18 | ||
19 | <modules> | 19 | <modules> |
20 | <module>api</module> | 20 | <module>api</module> |
21 | - <module>core</module> | 21 | + <module>trivial</module> |
22 | </modules> | 22 | </modules> |
23 | 23 | ||
24 | <dependencies> | 24 | <dependencies> | ... | ... |
... | @@ -6,19 +6,15 @@ | ... | @@ -6,19 +6,15 @@ |
6 | 6 | ||
7 | <parent> | 7 | <parent> |
8 | <groupId>org.onlab.onos</groupId> | 8 | <groupId>org.onlab.onos</groupId> |
9 | - <artifactId>onos-net</artifactId> | 9 | + <artifactId>onos-core</artifactId> |
10 | <version>1.0.0-SNAPSHOT</version> | 10 | <version>1.0.0-SNAPSHOT</version> |
11 | <relativePath>../pom.xml</relativePath> | 11 | <relativePath>../pom.xml</relativePath> |
12 | </parent> | 12 | </parent> |
13 | 13 | ||
14 | - <artifactId>onos-core</artifactId> | 14 | + <artifactId>onos-core-trivial</artifactId> |
15 | - <packaging>pom</packaging> | 15 | + <packaging>bundle</packaging> |
16 | - | ||
17 | - <description>ONOS network control core subsystems</description> | ||
18 | 16 | ||
19 | - <modules> | 17 | + <description>ONOS network control trivial implementations of core subsystems</description> |
20 | - <module>trivial</module> | ||
21 | - </modules> | ||
22 | 18 | ||
23 | <dependencies> | 19 | <dependencies> |
24 | <dependency> | 20 | <dependency> |
... | @@ -26,10 +22,6 @@ | ... | @@ -26,10 +22,6 @@ |
26 | <artifactId>onos-api</artifactId> | 22 | <artifactId>onos-api</artifactId> |
27 | </dependency> | 23 | </dependency> |
28 | <dependency> | 24 | <dependency> |
29 | - <groupId>org.slf4j</groupId> | ||
30 | - <artifactId>slf4j-api</artifactId> | ||
31 | - </dependency> | ||
32 | - <dependency> | ||
33 | <groupId>org.apache.felix</groupId> | 25 | <groupId>org.apache.felix</groupId> |
34 | <artifactId>org.apache.felix.scr.annotations</artifactId> | 26 | <artifactId>org.apache.felix.scr.annotations</artifactId> |
35 | </dependency> | 27 | </dependency> | ... | ... |
... | @@ -110,21 +110,6 @@ public class SimpleDeviceManager | ... | @@ -110,21 +110,6 @@ public class SimpleDeviceManager |
110 | } | 110 | } |
111 | 111 | ||
112 | @Override | 112 | @Override |
113 | - public void addListener(DeviceListener listener) { | ||
114 | - listenerRegistry.addListener(listener); | ||
115 | - } | ||
116 | - | ||
117 | - @Override | ||
118 | - public void removeListener(DeviceListener listener) { | ||
119 | - listenerRegistry.removeListener(listener); | ||
120 | - } | ||
121 | - | ||
122 | - @Override | ||
123 | - protected DeviceProviderService createProviderService(DeviceProvider provider) { | ||
124 | - return new InternalDeviceProviderService(provider); | ||
125 | - } | ||
126 | - | ||
127 | - @Override | ||
128 | public void setRole(DeviceId deviceId, MastershipRole newRole) { | 113 | public void setRole(DeviceId deviceId, MastershipRole newRole) { |
129 | checkNotNull(deviceId, DEVICE_ID_NULL); | 114 | checkNotNull(deviceId, DEVICE_ID_NULL); |
130 | checkNotNull(newRole, ROLE_NULL); | 115 | checkNotNull(newRole, ROLE_NULL); |
... | @@ -143,8 +128,26 @@ public class SimpleDeviceManager | ... | @@ -143,8 +128,26 @@ public class SimpleDeviceManager |
143 | public void removeDevice(DeviceId deviceId) { | 128 | public void removeDevice(DeviceId deviceId) { |
144 | checkNotNull(deviceId, DEVICE_ID_NULL); | 129 | checkNotNull(deviceId, DEVICE_ID_NULL); |
145 | DeviceEvent event = store.removeDevice(deviceId); | 130 | DeviceEvent event = store.removeDevice(deviceId); |
131 | + if (event != null) { | ||
132 | + log.info("Device {} administratively removed", deviceId); | ||
146 | post(event); | 133 | post(event); |
147 | } | 134 | } |
135 | + } | ||
136 | + | ||
137 | + @Override | ||
138 | + public void addListener(DeviceListener listener) { | ||
139 | + listenerRegistry.addListener(listener); | ||
140 | + } | ||
141 | + | ||
142 | + @Override | ||
143 | + public void removeListener(DeviceListener listener) { | ||
144 | + listenerRegistry.removeListener(listener); | ||
145 | + } | ||
146 | + | ||
147 | + @Override | ||
148 | + protected DeviceProviderService createProviderService(DeviceProvider provider) { | ||
149 | + return new InternalDeviceProviderService(provider); | ||
150 | + } | ||
148 | 151 | ||
149 | // Personalized device provider service issued to the supplied provider. | 152 | // Personalized device provider service issued to the supplied provider. |
150 | private class InternalDeviceProviderService extends AbstractProviderService<DeviceProvider> | 153 | private class InternalDeviceProviderService extends AbstractProviderService<DeviceProvider> |
... | @@ -159,12 +162,12 @@ public class SimpleDeviceManager | ... | @@ -159,12 +162,12 @@ public class SimpleDeviceManager |
159 | checkNotNull(deviceId, DEVICE_ID_NULL); | 162 | checkNotNull(deviceId, DEVICE_ID_NULL); |
160 | checkNotNull(deviceDescription, DEVICE_DESCRIPTION_NULL); | 163 | checkNotNull(deviceDescription, DEVICE_DESCRIPTION_NULL); |
161 | checkValidity(); | 164 | checkValidity(); |
162 | - log.info("Device {} connected", deviceId); | ||
163 | DeviceEvent event = store.createOrUpdateDevice(provider().id(), | 165 | DeviceEvent event = store.createOrUpdateDevice(provider().id(), |
164 | deviceId, deviceDescription); | 166 | deviceId, deviceDescription); |
165 | 167 | ||
166 | // If there was a change of any kind, trigger role selection process. | 168 | // If there was a change of any kind, trigger role selection process. |
167 | if (event != null) { | 169 | if (event != null) { |
170 | + log.info("Device {} connected", deviceId); | ||
168 | Device device = event.subject(); | 171 | Device device = event.subject(); |
169 | provider().roleChanged(device, store.getRole(device.id())); | 172 | provider().roleChanged(device, store.getRole(device.id())); |
170 | post(event); | 173 | post(event); |
... | @@ -175,17 +178,18 @@ public class SimpleDeviceManager | ... | @@ -175,17 +178,18 @@ public class SimpleDeviceManager |
175 | public void deviceDisconnected(DeviceId deviceId) { | 178 | public void deviceDisconnected(DeviceId deviceId) { |
176 | checkNotNull(deviceId, DEVICE_ID_NULL); | 179 | checkNotNull(deviceId, DEVICE_ID_NULL); |
177 | checkValidity(); | 180 | checkValidity(); |
178 | - log.info("Device {} disconnected", deviceId); | ||
179 | DeviceEvent event = store.markOffline(deviceId); | 181 | DeviceEvent event = store.markOffline(deviceId); |
182 | + if (event != null) { | ||
183 | + log.info("Device {} disconnected", deviceId); | ||
180 | post(event); | 184 | post(event); |
181 | } | 185 | } |
186 | + } | ||
182 | 187 | ||
183 | @Override | 188 | @Override |
184 | public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) { | 189 | public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) { |
185 | checkNotNull(deviceId, DEVICE_ID_NULL); | 190 | checkNotNull(deviceId, DEVICE_ID_NULL); |
186 | checkNotNull(portDescriptions, "Port descriptions list cannot be null"); | 191 | checkNotNull(portDescriptions, "Port descriptions list cannot be null"); |
187 | checkValidity(); | 192 | checkValidity(); |
188 | - log.info("Device {} ports updated", deviceId); | ||
189 | List<DeviceEvent> events = store.updatePorts(deviceId, portDescriptions); | 193 | List<DeviceEvent> events = store.updatePorts(deviceId, portDescriptions); |
190 | for (DeviceEvent event : events) { | 194 | for (DeviceEvent event : events) { |
191 | post(event); | 195 | post(event); |
... | @@ -199,11 +203,12 @@ public class SimpleDeviceManager | ... | @@ -199,11 +203,12 @@ public class SimpleDeviceManager |
199 | checkValidity(); | 203 | checkValidity(); |
200 | DeviceEvent event = store.updatePortStatus(deviceId, portDescription); | 204 | DeviceEvent event = store.updatePortStatus(deviceId, portDescription); |
201 | if (event != null) { | 205 | if (event != null) { |
202 | - log.info("Device {} port status changed", deviceId); | 206 | + log.info("Device {} port {} status changed", deviceId, |
203 | - } | 207 | + event.port().number()); |
204 | post(event); | 208 | post(event); |
205 | } | 209 | } |
206 | } | 210 | } |
211 | + } | ||
207 | 212 | ||
208 | // Posts the specified event to the local event dispatcher. | 213 | // Posts the specified event to the local event dispatcher. |
209 | private void post(DeviceEvent event) { | 214 | private void post(DeviceEvent event) { | ... | ... |
... | @@ -28,8 +28,7 @@ import static com.google.common.base.Preconditions.checkArgument; | ... | @@ -28,8 +28,7 @@ import static com.google.common.base.Preconditions.checkArgument; |
28 | import static org.onlab.onos.net.device.DeviceEvent.Type.*; | 28 | import static org.onlab.onos.net.device.DeviceEvent.Type.*; |
29 | 29 | ||
30 | /** | 30 | /** |
31 | - * Manages inventory of infrastructure devices using trivial in-memory | 31 | + |
32 | - * implementation. | ||
33 | */ | 32 | */ |
34 | class SimpleDeviceStore { | 33 | class SimpleDeviceStore { |
35 | 34 | ... | ... |
... | @@ -8,16 +8,26 @@ import org.apache.felix.scr.annotations.ReferenceCardinality; | ... | @@ -8,16 +8,26 @@ import org.apache.felix.scr.annotations.ReferenceCardinality; |
8 | import org.apache.felix.scr.annotations.Service; | 8 | import org.apache.felix.scr.annotations.Service; |
9 | import org.onlab.onos.event.AbstractListenerRegistry; | 9 | import org.onlab.onos.event.AbstractListenerRegistry; |
10 | import org.onlab.onos.event.EventDeliveryService; | 10 | import org.onlab.onos.event.EventDeliveryService; |
11 | +import org.onlab.onos.net.ConnectPoint; | ||
12 | +import org.onlab.onos.net.DeviceId; | ||
13 | +import org.onlab.onos.net.Host; | ||
14 | +import org.onlab.onos.net.HostId; | ||
11 | import org.onlab.onos.net.host.HostDescription; | 15 | import org.onlab.onos.net.host.HostDescription; |
12 | import org.onlab.onos.net.host.HostEvent; | 16 | import org.onlab.onos.net.host.HostEvent; |
13 | import org.onlab.onos.net.host.HostListener; | 17 | import org.onlab.onos.net.host.HostListener; |
14 | import org.onlab.onos.net.host.HostProvider; | 18 | import org.onlab.onos.net.host.HostProvider; |
15 | import org.onlab.onos.net.host.HostProviderRegistry; | 19 | import org.onlab.onos.net.host.HostProviderRegistry; |
16 | import org.onlab.onos.net.host.HostProviderService; | 20 | import org.onlab.onos.net.host.HostProviderService; |
21 | +import org.onlab.onos.net.host.HostService; | ||
17 | import org.onlab.onos.net.provider.AbstractProviderRegistry; | 22 | import org.onlab.onos.net.provider.AbstractProviderRegistry; |
18 | import org.onlab.onos.net.provider.AbstractProviderService; | 23 | import org.onlab.onos.net.provider.AbstractProviderService; |
24 | +import org.onlab.packet.IPv4; | ||
25 | +import org.onlab.packet.MACAddress; | ||
19 | import org.slf4j.Logger; | 26 | import org.slf4j.Logger; |
20 | 27 | ||
28 | +import java.util.Set; | ||
29 | + | ||
30 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
21 | import static org.slf4j.LoggerFactory.getLogger; | 31 | import static org.slf4j.LoggerFactory.getLogger; |
22 | 32 | ||
23 | /** | 33 | /** |
... | @@ -27,13 +37,16 @@ import static org.slf4j.LoggerFactory.getLogger; | ... | @@ -27,13 +37,16 @@ import static org.slf4j.LoggerFactory.getLogger; |
27 | @Service | 37 | @Service |
28 | public class SimpleHostManager | 38 | public class SimpleHostManager |
29 | extends AbstractProviderRegistry<HostProvider, HostProviderService> | 39 | extends AbstractProviderRegistry<HostProvider, HostProviderService> |
30 | - implements HostProviderRegistry { | 40 | + implements HostService, HostProviderRegistry { |
31 | 41 | ||
42 | + public static final String HOST_ID_NULL = "Host ID cannot be null"; | ||
32 | private final Logger log = getLogger(getClass()); | 43 | private final Logger log = getLogger(getClass()); |
33 | 44 | ||
34 | private final AbstractListenerRegistry<HostEvent, HostListener> | 45 | private final AbstractListenerRegistry<HostEvent, HostListener> |
35 | listenerRegistry = new AbstractListenerRegistry<>(); | 46 | listenerRegistry = new AbstractListenerRegistry<>(); |
36 | 47 | ||
48 | + private final SimpleHostStore store = new SimpleHostStore(); | ||
49 | + | ||
37 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 50 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
38 | private EventDeliveryService eventDispatcher; | 51 | private EventDeliveryService eventDispatcher; |
39 | 52 | ||
... | @@ -55,8 +68,64 @@ public class SimpleHostManager | ... | @@ -55,8 +68,64 @@ public class SimpleHostManager |
55 | return new InternalHostProviderService(provider); | 68 | return new InternalHostProviderService(provider); |
56 | } | 69 | } |
57 | 70 | ||
71 | + @Override | ||
72 | + public int getHostCount() { | ||
73 | + return store.getHostCount(); | ||
74 | + } | ||
75 | + | ||
76 | + @Override | ||
77 | + public Iterable<Host> getHosts() { | ||
78 | + return store.getHosts(); | ||
79 | + } | ||
80 | + | ||
81 | + @Override | ||
82 | + public Host getHost(HostId hostId) { | ||
83 | + checkNotNull(hostId, HOST_ID_NULL); | ||
84 | + return store.getHost(hostId); | ||
85 | + } | ||
86 | + | ||
87 | + @Override | ||
88 | + public Set<Host> getHostsByVlan(long vlanId) { | ||
89 | + return store.getHosts(vlanId); | ||
90 | + } | ||
91 | + | ||
92 | + @Override | ||
93 | + public Set<Host> getHostsByMac(MACAddress mac) { | ||
94 | + checkNotNull(mac, "MAC address cannot be null"); | ||
95 | + return store.getHosts(mac); | ||
96 | + } | ||
97 | + | ||
98 | + @Override | ||
99 | + public Set<Host> getHostsByIp(IPv4 ip) { | ||
100 | + checkNotNull(ip, "IP address cannot be null"); | ||
101 | + return store.getHosts(ip); | ||
102 | + } | ||
103 | + | ||
104 | + @Override | ||
105 | + public Set<Host> getConnectedHosts(ConnectPoint connectPoint) { | ||
106 | + checkNotNull(connectPoint, "Connection point cannot be null"); | ||
107 | + return store.getConnectedHosts(connectPoint); | ||
108 | + } | ||
109 | + | ||
110 | + @Override | ||
111 | + public Set<Host> getConnectedHosts(DeviceId deviceId) { | ||
112 | + checkNotNull(deviceId, "Device ID cannot be null"); | ||
113 | + return store.getConnectedHosts(deviceId); | ||
114 | + } | ||
115 | + | ||
116 | + @Override | ||
117 | + public void addListener(HostListener listener) { | ||
118 | + listenerRegistry.addListener(listener); | ||
119 | + } | ||
120 | + | ||
121 | + @Override | ||
122 | + public void removeListener(HostListener listener) { | ||
123 | + listenerRegistry.removeListener(listener); | ||
124 | + } | ||
125 | + | ||
58 | // Personalized host provider service issued to the supplied provider. | 126 | // Personalized host provider service issued to the supplied provider. |
59 | - private class InternalHostProviderService extends AbstractProviderService<HostProvider> | 127 | + private class InternalHostProviderService |
128 | + extends AbstractProviderService<HostProvider> | ||
60 | implements HostProviderService { | 129 | implements HostProviderService { |
61 | 130 | ||
62 | InternalHostProviderService(HostProvider provider) { | 131 | InternalHostProviderService(HostProvider provider) { |
... | @@ -64,13 +133,34 @@ public class SimpleHostManager | ... | @@ -64,13 +133,34 @@ public class SimpleHostManager |
64 | } | 133 | } |
65 | 134 | ||
66 | @Override | 135 | @Override |
67 | - public void hostDetected(HostDescription hostDescription) { | 136 | + public void hostDetected(HostId hostId, HostDescription hostDescription) { |
68 | - log.info("Host {} detected", hostDescription); | 137 | + checkNotNull(hostId, HOST_ID_NULL); |
138 | + checkValidity(); | ||
139 | + HostEvent event = store.createOrUpdateHost(provider().id(), hostId, | ||
140 | + hostDescription); | ||
141 | + if (event != null) { | ||
142 | + log.info("Host {} detected", hostId); | ||
143 | + post(event); | ||
144 | + } | ||
69 | } | 145 | } |
70 | 146 | ||
71 | @Override | 147 | @Override |
72 | - public void hostVanished(HostDescription hostDescription) { | 148 | + public void hostVanished(HostId hostId) { |
73 | - log.info("Host {} vanished", hostDescription); | 149 | + checkNotNull(hostId, HOST_ID_NULL); |
150 | + checkValidity(); | ||
151 | + HostEvent event = store.removeHost(hostId); | ||
152 | + if (event != null) { | ||
153 | + log.info("Host {} vanished", hostId); | ||
154 | + post(event); | ||
155 | + } | ||
74 | } | 156 | } |
75 | } | 157 | } |
158 | + | ||
159 | + // Posts the specified event to the local event dispatcher. | ||
160 | + private void post(HostEvent event) { | ||
161 | + if (event != null && eventDispatcher != null) { | ||
162 | + eventDispatcher.post(event); | ||
163 | + } | ||
164 | + } | ||
165 | + | ||
76 | } | 166 | } | ... | ... |
1 | +package org.onlab.onos.net.trivial.impl; | ||
2 | + | ||
3 | +import org.onlab.onos.net.ConnectPoint; | ||
4 | +import org.onlab.onos.net.DeviceId; | ||
5 | +import org.onlab.onos.net.Host; | ||
6 | +import org.onlab.onos.net.HostId; | ||
7 | +import org.onlab.onos.net.host.HostDescription; | ||
8 | +import org.onlab.onos.net.host.HostEvent; | ||
9 | +import org.onlab.onos.net.provider.ProviderId; | ||
10 | +import org.onlab.packet.IPv4; | ||
11 | +import org.onlab.packet.MACAddress; | ||
12 | + | ||
13 | +import java.util.Map; | ||
14 | +import java.util.Set; | ||
15 | +import java.util.concurrent.ConcurrentHashMap; | ||
16 | + | ||
17 | +/** | ||
18 | + * Manages inventory of end-station hosts using trivial in-memory | ||
19 | + * implementation. | ||
20 | + */ | ||
21 | +public class SimpleHostStore { | ||
22 | + | ||
23 | + private final Map<HostId, Host> hosts = new ConcurrentHashMap<>(); | ||
24 | + | ||
25 | + /** | ||
26 | + * Creates a new host or updates the existing one based on the specified | ||
27 | + * description. | ||
28 | + * | ||
29 | + * @param providerId provider identification | ||
30 | + * @param hostId host identification | ||
31 | + * @param hostDescription host description data | ||
32 | + * @return appropriate event or null if no change resulted | ||
33 | + */ | ||
34 | + HostEvent createOrUpdateHost(ProviderId providerId, HostId hostId, | ||
35 | + HostDescription hostDescription) { | ||
36 | + return null; | ||
37 | + } | ||
38 | + | ||
39 | + /** | ||
40 | + * Removes the specified host from the inventory. | ||
41 | + * | ||
42 | + * @param hostId host identification | ||
43 | + * @return remove even or null if host was not found | ||
44 | + */ | ||
45 | + HostEvent removeHost(HostId hostId) { | ||
46 | + return null; | ||
47 | + } | ||
48 | + | ||
49 | + /** | ||
50 | + * Returns the number of hosts in the store. | ||
51 | + * | ||
52 | + * @return host count | ||
53 | + */ | ||
54 | + int getHostCount() { | ||
55 | + return hosts.size(); | ||
56 | + } | ||
57 | + | ||
58 | + /** | ||
59 | + * Returns a collection of all hosts in the store. | ||
60 | + * | ||
61 | + * @return iterable collection of all hosts | ||
62 | + */ | ||
63 | + Iterable<Host> getHosts() { | ||
64 | + return null; | ||
65 | + } | ||
66 | + | ||
67 | + /** | ||
68 | + * Returns the host with the specified identifer. | ||
69 | + * | ||
70 | + * @param hostId host identification | ||
71 | + * @return host or null if not found | ||
72 | + */ | ||
73 | + Host getHost(HostId hostId) { | ||
74 | + return null; | ||
75 | + } | ||
76 | + | ||
77 | + /** | ||
78 | + * Returns the set of all hosts within the specified VLAN. | ||
79 | + * | ||
80 | + * @param vlanId vlan id | ||
81 | + * @return set of hosts in the vlan | ||
82 | + */ | ||
83 | + Set<Host> getHosts(long vlanId) { | ||
84 | + return null; | ||
85 | + } | ||
86 | + | ||
87 | + /** | ||
88 | + * Returns the set of hosts with the specified MAC address. | ||
89 | + * | ||
90 | + * @param mac mac address | ||
91 | + * @return set of hosts with the given mac | ||
92 | + */ | ||
93 | + Set<Host> getHosts(MACAddress mac) { | ||
94 | + return null; | ||
95 | + } | ||
96 | + | ||
97 | + /** | ||
98 | + * Returns the set of hosts with the specified IP address. | ||
99 | + * | ||
100 | + * @param ip ip address | ||
101 | + * @return set of hosts with the given IP | ||
102 | + */ | ||
103 | + Set<Host> getHosts(IPv4 ip) { | ||
104 | + return null; | ||
105 | + } | ||
106 | + | ||
107 | + /** | ||
108 | + * Returns the set of hosts whose location falls on the given connection point. | ||
109 | + * | ||
110 | + * @param connectPoint connection point | ||
111 | + * @return set of hosts | ||
112 | + */ | ||
113 | + Set<Host> getConnectedHosts(ConnectPoint connectPoint) { | ||
114 | + return null; | ||
115 | + } | ||
116 | + | ||
117 | + /** | ||
118 | + * Returns the set of hosts whose location falls on the given device. | ||
119 | + * | ||
120 | + * @param deviceId infrastructure device identifier | ||
121 | + * @return set of hosts | ||
122 | + */ | ||
123 | + public Set<Host> getConnectedHosts(DeviceId deviceId) { | ||
124 | + return null; | ||
125 | + } | ||
126 | + | ||
127 | +} |
... | @@ -66,11 +66,6 @@ implements LinkService, LinkAdminService, LinkProviderRegistry { | ... | @@ -66,11 +66,6 @@ implements LinkService, LinkAdminService, LinkProviderRegistry { |
66 | } | 66 | } |
67 | 67 | ||
68 | @Override | 68 | @Override |
69 | - protected LinkProviderService createProviderService(LinkProvider provider) { | ||
70 | - return new InternalLinkProviderService(provider); | ||
71 | - } | ||
72 | - | ||
73 | - @Override | ||
74 | public int getLinkCount() { | 69 | public int getLinkCount() { |
75 | return store.getLinkCount(); | 70 | return store.getLinkCount(); |
76 | } | 71 | } |
... | @@ -145,6 +140,11 @@ implements LinkService, LinkAdminService, LinkProviderRegistry { | ... | @@ -145,6 +140,11 @@ implements LinkService, LinkAdminService, LinkProviderRegistry { |
145 | listenerRegistry.removeListener(listener); | 140 | listenerRegistry.removeListener(listener); |
146 | } | 141 | } |
147 | 142 | ||
143 | + @Override | ||
144 | + protected LinkProviderService createProviderService(LinkProvider provider) { | ||
145 | + return new InternalLinkProviderService(provider); | ||
146 | + } | ||
147 | + | ||
148 | // Personalized link provider service issued to the supplied provider. | 148 | // Personalized link provider service issued to the supplied provider. |
149 | private class InternalLinkProviderService extends AbstractProviderService<LinkProvider> | 149 | private class InternalLinkProviderService extends AbstractProviderService<LinkProvider> |
150 | implements LinkProviderService { | 150 | implements LinkProviderService { | ... | ... |
... | @@ -53,6 +53,8 @@ public class SimpleTopologyManager | ... | @@ -53,6 +53,8 @@ public class SimpleTopologyManager |
53 | private final AbstractListenerRegistry<TopologyEvent, TopologyListener> | 53 | private final AbstractListenerRegistry<TopologyEvent, TopologyListener> |
54 | listenerRegistry = new AbstractListenerRegistry<>(); | 54 | listenerRegistry = new AbstractListenerRegistry<>(); |
55 | 55 | ||
56 | + private final SimpleTopologyStore store = new SimpleTopologyStore(); | ||
57 | + | ||
56 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 58 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
57 | private EventDeliveryService eventDispatcher; | 59 | private EventDeliveryService eventDispatcher; |
58 | 60 | ... | ... |
net/core/trivial/pom.xml
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
3 | - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
4 | - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | ||
5 | - <modelVersion>4.0.0</modelVersion> | ||
6 | - | ||
7 | - <parent> | ||
8 | - <groupId>org.onlab.onos</groupId> | ||
9 | - <artifactId>onos-core</artifactId> | ||
10 | - <version>1.0.0-SNAPSHOT</version> | ||
11 | - <relativePath>../pom.xml</relativePath> | ||
12 | - </parent> | ||
13 | - | ||
14 | - <artifactId>onos-core-trivial</artifactId> | ||
15 | - <packaging>bundle</packaging> | ||
16 | - | ||
17 | - <description>ONOS network control trivial implementations of core subsystems</description> | ||
18 | - | ||
19 | -</project> |
... | @@ -14,7 +14,7 @@ | ... | @@ -14,7 +14,7 @@ |
14 | <modules> | 14 | <modules> |
15 | <module>tools/build/conf</module> | 15 | <module>tools/build/conf</module> |
16 | <module>utils</module> | 16 | <module>utils</module> |
17 | - <module>net</module> | 17 | + <module>core</module> |
18 | <module>web</module> | 18 | <module>web</module> |
19 | <module>cli</module> | 19 | <module>cli</module> |
20 | <module>providers</module> | 20 | <module>providers</module> | ... | ... |
src/main/javadoc/doc-files/onos-tiers.png
0 → 100644
41.9 KB
-
Please register or login to post a comment