Toggle navigation
Toggle navigation
This project
Loading...
Sign in
홍길동
/
onos
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
tom
2014-09-09 14:32:08 -0700
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
7869ad9aa4edc1ab9730244a9545e273084a9165
7869ad9a
1 parent
e2dc27a0
Cleaned up some of the host-related abstractions and filled in more of the host …
…manager implementation.
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
331 additions
and
39 deletions
core/api/src/main/java/org/onlab/onos/net/Host.java
core/api/src/main/java/org/onlab/onos/net/HostId.java
core/api/src/main/java/org/onlab/onos/net/host/HostEvent.java
core/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
core/api/src/main/java/org/onlab/onos/net/host/HostService.java
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceStore.java
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostManager.java
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostStore.java
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
core/api/src/main/java/org/onlab/onos/net/Host.java
View file @
7869ad9
package
org
.
onlab
.
onos
.
net
;
import
org.onlab.packet.IPv4
;
import
org.onlab.packet.MACAddress
;
import
java.util.Set
;
/**
* Abstraction of an end-station host on the network, essentially a NIC.
*/
public
interface
Host
extends
Element
{
// MAC, IP(s), optional VLAN ID
/**
* Host identification.
*
* @return host id
*/
HostId
id
();
/**
* Returns the host MAC address.
*
* @return mac address
*/
MACAddress
mac
();
/**
* 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
<
IPv4
>
ipAddresses
();
/**
* Returns the most recent host location where the host attaches to the
...
...
@@ -16,6 +39,6 @@ public interface Host extends Element {
*/
HostLocation
location
();
//
list of recent locations?
//
TODO: explore capturing list of recent locations to aid in mobility
}
...
...
core/api/src/main/java/org/onlab/onos/net/HostId.java
View file @
7869ad9
package
org
.
onlab
.
onos
.
net
;
import
org.onlab.packet.MACAddress
;
import
java.net.URI
;
/**
...
...
@@ -16,6 +18,7 @@ public final class HostId extends ElementId {
* Creates a device id using the supplied URI.
*
* @param uri device URI
* @return host identifier
*/
public
static
HostId
hostId
(
URI
uri
)
{
return
new
HostId
(
uri
);
...
...
@@ -25,9 +28,23 @@ public final class HostId extends ElementId {
* Creates a device id using the supplied URI string.
*
* @param string device URI string
* @return host identifier
*/
public
static
HostId
hostId
(
String
string
)
{
return
hostId
(
URI
.
create
(
string
));
}
/**
* Creates a device id using the supplied MAC & VLAN ID.
*
* @param mac mac address
* @param vlanId vlan identifier
* @return host identifier
*/
// FIXME: replace vlanId long with a rich data-type, e.g. VLanId or something like that
public
static
HostId
hostId
(
MACAddress
mac
,
long
vlanId
)
{
// FIXME: use more efficient means of encoding
return
hostId
(
"nic"
+
":"
+
mac
+
"/"
+
vlanId
);
}
}
...
...
core/api/src/main/java/org/onlab/onos/net/host/HostEvent.java
View file @
7869ad9
...
...
@@ -23,6 +23,11 @@ public class HostEvent extends AbstractEvent<HostEvent.Type, Host> {
HOST_REMOVED
,
/**
* Signifies that host data changed, e.g. IP address
*/
HOST_UPDATED
,
/**
* Signifies that a host location has changed.
*/
HOST_MOVED
...
...
core/api/src/main/java/org/onlab/onos/net/host/HostProviderService.java
View file @
7869ad9
package
org
.
onlab
.
onos
.
net
.
host
;
import
org.onlab.onos.net.HostId
;
import
org.onlab.onos.net.provider.ProviderService
;
/**
...
...
@@ -11,15 +12,16 @@ public interface HostProviderService extends ProviderService<HostProvider> {
* Notifies the core when a host has been detected on a network along with
* information that identifies the hoot location.
*
* @param hostId id of the host that been detected
* @param hostDescription description of host and its location
*/
void
hostDetected
(
HostDescription
hostDescription
);
void
hostDetected
(
Host
Id
hostId
,
Host
Description
hostDescription
);
/**
* Notifies the core when a host is no longer detected on a network.
*
* @param host
Description description of host
* @param host
Id id of the host that vanished
*/
void
hostVanished
(
Host
Description
hostDescription
);
void
hostVanished
(
Host
Id
hostId
);
}
...
...
core/api/src/main/java/org/onlab/onos/net/host/HostService.java
View file @
7869ad9
...
...
@@ -2,8 +2,10 @@ package org.onlab.onos.net.host;
import
org.onlab.onos.net.ConnectPoint
;
import
org.onlab.onos.net.DeviceId
;
import
org.onlab.onos.net.ElementId
;
import
org.onlab.onos.net.Host
;
import
org.onlab.onos.net.HostId
;
import
org.onlab.packet.IPv4
;
import
org.onlab.packet.MACAddress
;
import
java.util.Set
;
...
...
@@ -13,6 +15,13 @@ import java.util.Set;
public
interface
HostService
{
/**
* Returns the number of end-station hosts known to the system.
*
* @return number of end-station hosts
*/
public
int
getHostCount
();
/**
* Returns a collection of all end-station hosts.
*
* @return collection of hosts
...
...
@@ -25,12 +34,32 @@ public interface HostService {
* @param hostId host identifier
* @return host or null if one with the given identifier is not known
*/
Host
getHost
(
ElementId
hostId
);
// TODO: change to HostId
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
*/
// FIXME: change long to VLanId
Set
<
Host
>
getHostsByVlan
(
long
vlanId
);
// TODO: determine which ones make sense or which we care to support
// Set<Host> getHostsByVlan(VlanId vlan);
// Set<Host> getHostsByMac(MacAddress mac);
// Set<Host> getHostsByIp(IpAddress ip);
/**
* 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
(
IPv4
ip
);
/**
* Returns the set of hosts whose most recent location is the specified
...
...
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
View file @
7869ad9
...
...
@@ -110,21 +110,6 @@ public class SimpleDeviceManager
}
@Override
public
void
addListener
(
DeviceListener
listener
)
{
listenerRegistry
.
addListener
(
listener
);
}
@Override
public
void
removeListener
(
DeviceListener
listener
)
{
listenerRegistry
.
removeListener
(
listener
);
}
@Override
protected
DeviceProviderService
createProviderService
(
DeviceProvider
provider
)
{
return
new
InternalDeviceProviderService
(
provider
);
}
@Override
public
void
setRole
(
DeviceId
deviceId
,
MastershipRole
newRole
)
{
checkNotNull
(
deviceId
,
DEVICE_ID_NULL
);
checkNotNull
(
newRole
,
ROLE_NULL
);
...
...
@@ -149,6 +134,21 @@ public class SimpleDeviceManager
}
}
@Override
public
void
addListener
(
DeviceListener
listener
)
{
listenerRegistry
.
addListener
(
listener
);
}
@Override
public
void
removeListener
(
DeviceListener
listener
)
{
listenerRegistry
.
removeListener
(
listener
);
}
@Override
protected
DeviceProviderService
createProviderService
(
DeviceProvider
provider
)
{
return
new
InternalDeviceProviderService
(
provider
);
}
// Personalized device provider service issued to the supplied provider.
private
class
InternalDeviceProviderService
extends
AbstractProviderService
<
DeviceProvider
>
implements
DeviceProviderService
{
...
...
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceStore.java
View file @
7869ad9
...
...
@@ -28,8 +28,7 @@ import static com.google.common.base.Preconditions.checkArgument;
import
static
org
.
onlab
.
onos
.
net
.
device
.
DeviceEvent
.
Type
.*;
/**
* Manages inventory of infrastructure devices using trivial in-memory
* implementation.
*/
class
SimpleDeviceStore
{
...
...
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostManager.java
View file @
7869ad9
...
...
@@ -8,16 +8,26 @@ import org.apache.felix.scr.annotations.ReferenceCardinality;
import
org.apache.felix.scr.annotations.Service
;
import
org.onlab.onos.event.AbstractListenerRegistry
;
import
org.onlab.onos.event.EventDeliveryService
;
import
org.onlab.onos.net.ConnectPoint
;
import
org.onlab.onos.net.DeviceId
;
import
org.onlab.onos.net.Host
;
import
org.onlab.onos.net.HostId
;
import
org.onlab.onos.net.host.HostDescription
;
import
org.onlab.onos.net.host.HostEvent
;
import
org.onlab.onos.net.host.HostListener
;
import
org.onlab.onos.net.host.HostProvider
;
import
org.onlab.onos.net.host.HostProviderRegistry
;
import
org.onlab.onos.net.host.HostProviderService
;
import
org.onlab.onos.net.host.HostService
;
import
org.onlab.onos.net.provider.AbstractProviderRegistry
;
import
org.onlab.onos.net.provider.AbstractProviderService
;
import
org.onlab.packet.IPv4
;
import
org.onlab.packet.MACAddress
;
import
org.slf4j.Logger
;
import
java.util.Set
;
import
static
com
.
google
.
common
.
base
.
Preconditions
.
checkNotNull
;
import
static
org
.
slf4j
.
LoggerFactory
.
getLogger
;
/**
...
...
@@ -27,13 +37,16 @@ import static org.slf4j.LoggerFactory.getLogger;
@Service
public
class
SimpleHostManager
extends
AbstractProviderRegistry
<
HostProvider
,
HostProviderService
>
implements
HostProviderRegistry
{
implements
Host
Service
,
Host
ProviderRegistry
{
public
static
final
String
HOST_ID_NULL
=
"Host ID cannot be null"
;
private
final
Logger
log
=
getLogger
(
getClass
());
private
final
AbstractListenerRegistry
<
HostEvent
,
HostListener
>
listenerRegistry
=
new
AbstractListenerRegistry
<>();
private
final
SimpleHostStore
store
=
new
SimpleHostStore
();
@Reference
(
cardinality
=
ReferenceCardinality
.
MANDATORY_UNARY
)
private
EventDeliveryService
eventDispatcher
;
...
...
@@ -55,8 +68,64 @@ public class SimpleHostManager
return
new
InternalHostProviderService
(
provider
);
}
@Override
public
int
getHostCount
()
{
return
store
.
getHostCount
();
}
@Override
public
Iterable
<
Host
>
getHosts
()
{
return
store
.
getHosts
();
}
@Override
public
Host
getHost
(
HostId
hostId
)
{
checkNotNull
(
hostId
,
HOST_ID_NULL
);
return
store
.
getHost
(
hostId
);
}
@Override
public
Set
<
Host
>
getHostsByVlan
(
long
vlanId
)
{
return
store
.
getHosts
(
vlanId
);
}
@Override
public
Set
<
Host
>
getHostsByMac
(
MACAddress
mac
)
{
checkNotNull
(
mac
,
"MAC address cannot be null"
);
return
store
.
getHosts
(
mac
);
}
@Override
public
Set
<
Host
>
getHostsByIp
(
IPv4
ip
)
{
checkNotNull
(
ip
,
"IP address cannot be null"
);
return
store
.
getHosts
(
ip
);
}
@Override
public
Set
<
Host
>
getConnectedHosts
(
ConnectPoint
connectPoint
)
{
checkNotNull
(
connectPoint
,
"Connection point cannot be null"
);
return
store
.
getConnectedHosts
(
connectPoint
);
}
@Override
public
Set
<
Host
>
getConnectedHosts
(
DeviceId
deviceId
)
{
checkNotNull
(
deviceId
,
"Device ID cannot be null"
);
return
store
.
getConnectedHosts
(
deviceId
);
}
@Override
public
void
addListener
(
HostListener
listener
)
{
listenerRegistry
.
addListener
(
listener
);
}
@Override
public
void
removeListener
(
HostListener
listener
)
{
listenerRegistry
.
removeListener
(
listener
);
}
// Personalized host provider service issued to the supplied provider.
private
class
InternalHostProviderService
extends
AbstractProviderService
<
HostProvider
>
private
class
InternalHostProviderService
extends
AbstractProviderService
<
HostProvider
>
implements
HostProviderService
{
InternalHostProviderService
(
HostProvider
provider
)
{
...
...
@@ -64,13 +133,34 @@ public class SimpleHostManager
}
@Override
public
void
hostDetected
(
HostDescription
hostDescription
)
{
log
.
info
(
"Host {} detected"
,
hostDescription
);
public
void
hostDetected
(
HostId
hostId
,
HostDescription
hostDescription
)
{
checkNotNull
(
hostId
,
HOST_ID_NULL
);
checkValidity
();
HostEvent
event
=
store
.
createOrUpdateHost
(
provider
().
id
(),
hostId
,
hostDescription
);
if
(
event
!=
null
)
{
log
.
info
(
"Host {} detected"
,
hostId
);
post
(
event
);
}
}
@Override
public
void
hostVanished
(
HostDescription
hostDescription
)
{
log
.
info
(
"Host {} vanished"
,
hostDescription
);
public
void
hostVanished
(
HostId
hostId
)
{
checkNotNull
(
hostId
,
HOST_ID_NULL
);
checkValidity
();
HostEvent
event
=
store
.
removeHost
(
hostId
);
if
(
event
!=
null
)
{
log
.
info
(
"Host {} vanished"
,
hostId
);
post
(
event
);
}
}
}
// Posts the specified event to the local event dispatcher.
private
void
post
(
HostEvent
event
)
{
if
(
event
!=
null
&&
eventDispatcher
!=
null
)
{
eventDispatcher
.
post
(
event
);
}
}
}
...
...
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleHostStore.java
0 → 100644
View file @
7869ad9
package
org
.
onlab
.
onos
.
net
.
trivial
.
impl
;
import
org.onlab.onos.net.ConnectPoint
;
import
org.onlab.onos.net.DeviceId
;
import
org.onlab.onos.net.Host
;
import
org.onlab.onos.net.HostId
;
import
org.onlab.onos.net.host.HostDescription
;
import
org.onlab.onos.net.host.HostEvent
;
import
org.onlab.onos.net.provider.ProviderId
;
import
org.onlab.packet.IPv4
;
import
org.onlab.packet.MACAddress
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* Manages inventory of end-station hosts using trivial in-memory
* implementation.
*/
public
class
SimpleHostStore
{
private
final
Map
<
HostId
,
Host
>
hosts
=
new
ConcurrentHashMap
<>();
/**
* 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
* @return appropriate event or null if no change resulted
*/
HostEvent
createOrUpdateHost
(
ProviderId
providerId
,
HostId
hostId
,
HostDescription
hostDescription
)
{
return
null
;
}
/**
* Removes the specified host from the inventory.
*
* @param hostId host identification
* @return remove even or null if host was not found
*/
HostEvent
removeHost
(
HostId
hostId
)
{
return
null
;
}
/**
* Returns the number of hosts in the store.
*
* @return host count
*/
int
getHostCount
()
{
return
hosts
.
size
();
}
/**
* Returns a collection of all hosts in the store.
*
* @return iterable collection of all hosts
*/
Iterable
<
Host
>
getHosts
()
{
return
null
;
}
/**
* Returns the host with the specified identifer.
*
* @param hostId host identification
* @return host or null if not found
*/
Host
getHost
(
HostId
hostId
)
{
return
null
;
}
/**
* Returns the set of all hosts within the specified VLAN.
*
* @param vlanId vlan id
* @return set of hosts in the vlan
*/
Set
<
Host
>
getHosts
(
long
vlanId
)
{
return
null
;
}
/**
* 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
)
{
return
null
;
}
/**
* 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
(
IPv4
ip
)
{
return
null
;
}
/**
* 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
)
{
return
null
;
}
/**
* Returns the set of hosts whose location falls on the given device.
*
* @param deviceId infrastructure device identifier
* @return set of hosts
*/
public
Set
<
Host
>
getConnectedHosts
(
DeviceId
deviceId
)
{
return
null
;
}
}
core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
View file @
7869ad9
...
...
@@ -66,11 +66,6 @@ implements LinkService, LinkAdminService, LinkProviderRegistry {
}
@Override
protected
LinkProviderService
createProviderService
(
LinkProvider
provider
)
{
return
new
InternalLinkProviderService
(
provider
);
}
@Override
public
int
getLinkCount
()
{
return
store
.
getLinkCount
();
}
...
...
@@ -145,6 +140,11 @@ implements LinkService, LinkAdminService, LinkProviderRegistry {
listenerRegistry
.
removeListener
(
listener
);
}
@Override
protected
LinkProviderService
createProviderService
(
LinkProvider
provider
)
{
return
new
InternalLinkProviderService
(
provider
);
}
// Personalized link provider service issued to the supplied provider.
private
class
InternalLinkProviderService
extends
AbstractProviderService
<
LinkProvider
>
implements
LinkProviderService
{
...
...
Please
register
or
login
to post a comment