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
alshabib
2014-09-08 20:18:52 -0700
Browse Files
Options
Browse Files
Download
Plain Diff
Commit
1d334ce84585ce2ce6fe0ac35bca9ae32e479d60
1d334ce8
2 parents
62b14185
568581d5
Merge branch 'master' of
ssh://gerrit.onlab.us:29418/onos-next
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
325 additions
and
38 deletions
cli/src/main/java/org/onlab/onos/cli/net/DeviceRoleCommand.java
cli/src/main/java/org/onlab/onos/cli/net/RoleCompleter.java
cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java
net/api/src/main/java/org/onlab/onos/net/DeviceId.java
net/api/src/main/java/org/onlab/onos/net/EdgeLink.java
net/api/src/main/java/org/onlab/onos/net/HostId.java
net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java
net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java
net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java
net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java
net/api/src/test/java/org/onlab/onos/net/HostIdTest.java
net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java
cli/src/main/java/org/onlab/onos/cli/net/DeviceRoleCommand.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
cli
.
net
;
import
org.apache.karaf.shell.commands.Argument
;
import
org.apache.karaf.shell.commands.Command
;
import
org.onlab.onos.cli.AbstractShellCommand
;
import
org.onlab.onos.net.DeviceId
;
import
org.onlab.onos.net.MastershipRole
;
import
org.onlab.onos.net.device.DeviceAdminService
;
/**
* Sets role of the controller node for the given infrastructure device.
*/
@Command
(
scope
=
"onos"
,
name
=
"device-role"
,
description
=
"Sets role of the controller node for the given infrastructure device"
)
public
class
DeviceRoleCommand
extends
AbstractShellCommand
{
@Argument
(
index
=
0
,
name
=
"uri"
,
description
=
"Device ID"
,
required
=
true
,
multiValued
=
false
)
String
uri
=
null
;
@Argument
(
index
=
1
,
name
=
"role"
,
description
=
"Mastership role"
,
required
=
true
,
multiValued
=
false
)
String
role
=
null
;
@Override
protected
Object
doExecute
()
throws
Exception
{
MastershipRole
mastershipRole
=
MastershipRole
.
valueOf
(
role
.
toUpperCase
());
getService
(
DeviceAdminService
.
class
).
setRole
(
DeviceId
.
deviceId
(
uri
),
mastershipRole
);
return
null
;
}
}
cli/src/main/java/org/onlab/onos/cli/net/RoleCompleter.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
cli
.
net
;
import
org.apache.karaf.shell.console.Completer
;
import
org.apache.karaf.shell.console.completer.StringsCompleter
;
import
org.onlab.onos.net.MastershipRole
;
import
java.util.List
;
import
java.util.SortedSet
;
/**
* Device mastership role completer.
*/
public
class
RoleCompleter
implements
Completer
{
@Override
public
int
complete
(
String
buffer
,
int
cursor
,
List
<
String
>
candidates
)
{
// Delegate string completer
StringsCompleter
delegate
=
new
StringsCompleter
();
SortedSet
<
String
>
strings
=
delegate
.
getStrings
();
strings
.
add
(
MastershipRole
.
MASTER
.
toString
().
toLowerCase
());
strings
.
add
(
MastershipRole
.
STANDBY
.
toString
().
toLowerCase
());
strings
.
add
(
MastershipRole
.
NONE
.
toString
().
toLowerCase
());
// Now let the completer do the work for figuring out what to offer.
return
delegate
.
complete
(
buffer
,
cursor
,
candidates
);
}
}
cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
View file @
1d334ce
...
...
@@ -16,6 +16,13 @@
<ref
component-id=
"deviceIdCompleter"
/>
</completers>
</command>
<command>
<action
class=
"org.onlab.onos.cli.net.DeviceRoleCommand"
/>
<completers>
<ref
component-id=
"deviceIdCompleter"
/>
<ref
component-id=
"roleCompleter"
/>
</completers>
</command>
<command>
<action
class=
"org.onlab.onos.cli.net.LinksListCommand"
/>
...
...
@@ -33,6 +40,7 @@
</command-bundle>
<bean
id=
"deviceIdCompleter"
class=
"org.onlab.onos.cli.net.DeviceIdCompleter"
/>
<bean
id=
"roleCompleter"
class=
"org.onlab.onos.cli.net.RoleCompleter"
/>
<bean
id=
"nameCompleter"
class=
"org.onlab.onos.cli.NameCompleter"
/>
...
...
net/api/src/main/java/org/onlab/onos/net/DefaultEdgeLink.java
View file @
1d334ce
...
...
@@ -37,7 +37,7 @@ public class DefaultEdgeLink extends DefaultLink implements EdgeLink {
}
@Override
public
ConnectPoint
connectPoint
()
{
public
HostLocation
hostLocation
()
{
return
hostLocation
;
}
}
...
...
net/api/src/main/java/org/onlab/onos/net/DeviceId.java
View file @
1d334ce
...
...
@@ -27,7 +27,7 @@ public final class DeviceId extends ElementId {
* @param string device URI string
*/
public
static
DeviceId
deviceId
(
String
string
)
{
return
new
D
eviceId
(
URI
.
create
(
string
));
return
d
eviceId
(
URI
.
create
(
string
));
}
}
...
...
net/api/src/main/java/org/onlab/onos/net/EdgeLink.java
View file @
1d334ce
...
...
@@ -17,8 +17,8 @@ public interface EdgeLink extends Link {
* Returns the connection point where the host attaches to the
* network infrastructure.
*
* @return host
connec
tion point
* @return host
loca
tion point
*/
ConnectPoint
connectPoint
();
HostLocation
hostLocation
();
}
...
...
net/api/src/main/java/org/onlab/onos/net/HostId.java
View file @
1d334ce
...
...
@@ -27,7 +27,7 @@ public final class HostId extends ElementId {
* @param string device URI string
*/
public
static
HostId
hostId
(
String
string
)
{
return
new
H
ostId
(
URI
.
create
(
string
));
return
h
ostId
(
URI
.
create
(
string
));
}
}
...
...
net/api/src/main/java/org/onlab/onos/net/topology/LinkWeight.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
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
<
TopoVertex
,
TopoEdge
>
{
}
net/api/src/main/java/org/onlab/onos/net/topology/TopoEdge.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
net
.
topology
;
import
org.onlab.graph.Edge
;
import
org.onlab.onos.net.Link
;
/**
* Represents an edge in the topology graph.
*/
public
interface
TopoEdge
extends
Edge
<
TopoVertex
>
{
/**
* Returns the associated infrastructure link.
*
* @return backing infrastructure link
*/
Link
link
();
}
net/api/src/main/java/org/onlab/onos/net/topology/TopoVertex.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
net
.
topology
;
import
org.onlab.graph.Vertex
;
import
org.onlab.onos.net.DeviceId
;
/**
* Represents a vertex in the topology graph.
*/
public
interface
TopoVertex
extends
Vertex
{
/**
* Returns the associated infrastructure device identification.
*
* @return device identifier
*/
DeviceId
deviceId
();
}
net/api/src/main/java/org/onlab/onos/net/topology/TopologyCluster.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
net
.
topology
;
/**
* Representation of an SCC (strongly-connected component) in a network topology.
*/
public
interface
TopologyCluster
{
// TODO: add stuff in here: id, deviceCount, linkCount
}
net/api/src/main/java/org/onlab/onos/net/topology/TopologyService.java
View file @
1d334ce
package
org
.
onlab
.
onos
.
net
.
topology
;
import
org.onlab.graph.Graph
;
import
org.onlab.onos.net.ConnectPoint
;
import
org.onlab.onos.net.DeviceId
;
import
org.onlab.onos.net.Path
;
import
org.onlab.onos.net.Topology
;
import
java.util.Set
;
/**
* Service for providing network topology information.
*/
...
...
@@ -14,13 +20,64 @@ public interface TopologyService {
*/
Topology
currentTopology
();
// TODO: Figure out hot to best export graph traversal methods via Graph/Vertex/Edge
// TODO: figure out how we want this to be presented, via Topology or via TopologyService
// Set<TopologyCluster> getClusters(Topology topology);
// Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst);
// Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight);
// boolean isInfrastructure(Topology topology, ConnectPoint connectPoint);
// boolean isInBroadcastTree(Topology topology, ConnectPoint connectPoint);
/**
* 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 graph view of the specified topology.
*
* @param topology topology descriptor
* @return topology graph view
*/
Graph
<
TopoVertex
,
TopoEdge
>
getGraph
(
Topology
topology
);
/**
* Returns the set of all shortest paths, 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
* @return set of all shortest paths between the two devices
*/
Set
<
Path
>
getPaths
(
Topology
topology
,
DeviceId
src
,
DeviceId
dst
,
LinkWeight
weight
);
/**
* 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 the specified connection point allows broadcast.
*
* @param topology topology descriptor
* @param connectPoint connection point
* @return true if broadcast is permissible
*/
boolean
isInBroadcastTree
(
Topology
topology
,
ConnectPoint
connectPoint
);
/**
* Adds the specified topology listener.
...
...
net/api/src/test/java/org/onlab/onos/net/DefaultEdgeLinkTest.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
net
;
import
com.google.common.testing.EqualsTester
;
import
org.junit.Test
;
import
org.onlab.onos.net.provider.ProviderId
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
onlab
.
onos
.
net
.
DefaultLinkTest
.
cp
;
import
static
org
.
onlab
.
onos
.
net
.
DeviceId
.
deviceId
;
import
static
org
.
onlab
.
onos
.
net
.
HostId
.
hostId
;
import
static
org
.
onlab
.
onos
.
net
.
PortNumber
.
portNumber
;
/**
* Test of the default edge link model entity.
*/
public
class
DefaultEdgeLinkTest
{
private
static
final
ProviderId
PID
=
new
ProviderId
(
"foo"
);
private
static
final
DeviceId
DID1
=
deviceId
(
"of:foo"
);
private
static
final
HostId
HID1
=
hostId
(
"nic:foobar"
);
private
static
final
HostId
HID2
=
hostId
(
"nic:barfoo"
);
private
static
final
PortNumber
P0
=
portNumber
(
0
);
private
static
final
PortNumber
P1
=
portNumber
(
1
);
@Test
public
void
testEquality
()
{
EdgeLink
l1
=
new
DefaultEdgeLink
(
PID
,
cp
(
HID1
,
P0
),
new
HostLocation
(
DID1
,
P1
,
123L
),
true
);
EdgeLink
l2
=
new
DefaultEdgeLink
(
PID
,
cp
(
HID1
,
P0
),
new
HostLocation
(
DID1
,
P1
,
123L
),
true
);
EdgeLink
l3
=
new
DefaultEdgeLink
(
PID
,
cp
(
HID2
,
P0
),
new
HostLocation
(
DID1
,
P1
,
123L
),
false
);
EdgeLink
l4
=
new
DefaultEdgeLink
(
PID
,
cp
(
HID2
,
P0
),
new
HostLocation
(
DID1
,
P1
,
123L
),
false
);
EdgeLink
l5
=
new
DefaultEdgeLink
(
PID
,
cp
(
HID1
,
P0
),
new
HostLocation
(
DID1
,
P1
,
123L
),
false
);
new
EqualsTester
().
addEqualityGroup
(
l1
,
l2
)
.
addEqualityGroup
(
l3
,
l4
)
.
addEqualityGroup
(
l5
)
.
testEquals
();
}
@Test
public
void
basics
()
{
HostLocation
hostLocation
=
new
HostLocation
(
DID1
,
P1
,
123L
);
EdgeLink
link
=
new
DefaultEdgeLink
(
PID
,
cp
(
HID1
,
P0
),
hostLocation
,
false
);
assertEquals
(
"incorrect src"
,
cp
(
HID1
,
P0
),
link
.
src
());
assertEquals
(
"incorrect dst"
,
hostLocation
,
link
.
dst
());
assertEquals
(
"incorrect type"
,
Link
.
Type
.
EDGE
,
link
.
type
());
assertEquals
(
"incorrect hostId"
,
HID1
,
link
.
hostId
());
assertEquals
(
"incorrect connect point"
,
hostLocation
,
link
.
hostLocation
());
assertEquals
(
"incorrect time"
,
123L
,
link
.
hostLocation
().
time
());
}
}
net/api/src/test/java/org/onlab/onos/net/DefaultLinkTest.java
View file @
1d334ce
...
...
@@ -21,7 +21,7 @@ public class DefaultLinkTest {
private
static
final
PortNumber
P1
=
portNumber
(
1
);
private
static
final
PortNumber
P2
=
portNumber
(
2
);
public
static
ConnectPoint
cp
(
Device
Id
id
,
PortNumber
pn
)
{
public
static
ConnectPoint
cp
(
Element
Id
id
,
PortNumber
pn
)
{
return
new
ConnectPoint
(
id
,
pn
);
}
...
...
net/api/src/test/java/org/onlab/onos/net/DefaultPortTest.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
net
;
import
com.google.common.testing.EqualsTester
;
import
org.junit.Test
;
import
org.onlab.onos.net.provider.ProviderId
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
onlab
.
onos
.
net
.
Device
.
Type
.
SWITCH
;
import
static
org
.
onlab
.
onos
.
net
.
DeviceId
.
deviceId
;
import
static
org
.
onlab
.
onos
.
net
.
PortNumber
.
portNumber
;
/**
* Test of the default port model entity.
*/
public
class
DefaultPortTest
{
private
static
final
ProviderId
PID
=
new
ProviderId
(
"foo"
);
private
static
final
DeviceId
DID1
=
deviceId
(
"of:foo"
);
private
static
final
DeviceId
DID2
=
deviceId
(
"of:bar"
);
private
static
final
PortNumber
P1
=
portNumber
(
1
);
private
static
final
PortNumber
P2
=
portNumber
(
2
);
@Test
public
void
testEquality
()
{
Device
device
=
new
DefaultDevice
(
PID
,
DID1
,
SWITCH
,
"m"
,
"h"
,
"s"
,
"n"
);
Port
p1
=
new
DefaultPort
(
device
,
portNumber
(
1
),
true
);
Port
p2
=
new
DefaultPort
(
device
,
portNumber
(
1
),
true
);
Port
p3
=
new
DefaultPort
(
device
,
portNumber
(
2
),
true
);
Port
p4
=
new
DefaultPort
(
device
,
portNumber
(
2
),
true
);
Port
p5
=
new
DefaultPort
(
device
,
portNumber
(
1
),
false
);
new
EqualsTester
().
addEqualityGroup
(
p1
,
p2
)
.
addEqualityGroup
(
p3
,
p4
)
.
addEqualityGroup
(
p5
)
.
testEquals
();
}
@Test
public
void
basics
()
{
Device
device
=
new
DefaultDevice
(
PID
,
DID1
,
SWITCH
,
"m"
,
"h"
,
"s"
,
"n"
);
Port
port
=
new
DefaultPort
(
device
,
portNumber
(
1
),
true
);
assertEquals
(
"incorrect element"
,
device
,
port
.
element
());
assertEquals
(
"incorrect number"
,
portNumber
(
1
),
port
.
number
());
assertEquals
(
"incorrect state"
,
true
,
port
.
isEnabled
());
}
}
net/api/src/test/java/org/onlab/onos/net/HostIdTest.java
0 → 100644
View file @
1d334ce
package
org
.
onlab
.
onos
.
net
;
import
com.google.common.testing.EqualsTester
;
import
org.junit.Test
;
import
static
org
.
onlab
.
onos
.
net
.
HostId
.
hostId
;
/**
* Test of the host identifier.
*/
public
class
HostIdTest
extends
ElementIdTest
{
@Test
public
void
basics
()
{
new
EqualsTester
()
.
addEqualityGroup
(
hostId
(
"nic:foo"
),
hostId
(
"nic:foo"
))
.
addEqualityGroup
(
hostId
(
"nic:bar"
))
.
testEquals
();
}
}
net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
View file @
1d334ce
...
...
@@ -27,11 +27,8 @@ import org.onlab.onos.net.provider.AbstractProviderService;
import
org.slf4j.Logger
;
import
java.util.List
;
import
java.util.concurrent.ExecutorService
;
import
static
com
.
google
.
common
.
base
.
Preconditions
.
checkNotNull
;
import
static
java
.
util
.
concurrent
.
Executors
.
newSingleThreadExecutor
;
import
static
org
.
onlab
.
util
.
Tools
.
namedThreads
;
import
static
org
.
slf4j
.
LoggerFactory
.
getLogger
;
/**
...
...
@@ -56,9 +53,6 @@ public class SimpleDeviceManager
private
final
SimpleDeviceStore
store
=
new
SimpleDeviceStore
();
private
final
ExecutorService
executor
=
newSingleThreadExecutor
(
namedThreads
(
"onos-device-%d"
));
@Reference
(
cardinality
=
ReferenceCardinality
.
MANDATORY_UNARY
)
protected
EventDeliveryService
eventDispatcher
;
...
...
@@ -168,11 +162,12 @@ public class SimpleDeviceManager
log
.
info
(
"Device {} connected"
,
deviceId
);
DeviceEvent
event
=
store
.
createOrUpdateDevice
(
provider
().
id
(),
deviceId
,
deviceDescription
);
post
(
event
);
// If there was a change of any kind, trigger role selection process.
if
(
event
!=
null
)
{
triggerRoleSelection
(
event
.
subject
(),
provider
());
Device
device
=
event
.
subject
();
provider
().
roleChanged
(
device
,
store
.
getRole
(
device
.
id
()));
post
(
event
);
}
}
...
...
@@ -210,22 +205,6 @@ public class SimpleDeviceManager
}
}
/**
* Triggers asynchronous role selection.
*
* @param device device
* @param provider device provider
*/
private
void
triggerRoleSelection
(
final
Device
device
,
final
DeviceProvider
provider
)
{
executor
.
execute
(
new
Runnable
()
{
@Override
public
void
run
()
{
provider
.
roleChanged
(
device
,
store
.
getRole
(
device
.
id
()));
}
});
}
// Posts the specified event to the local event dispatcher.
private
void
post
(
DeviceEvent
event
)
{
if
(
event
!=
null
&&
eventDispatcher
!=
null
)
{
...
...
net/core/trivial/src/test/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManagerTest.java
View file @
1d334ce
...
...
@@ -143,7 +143,7 @@ public class SimpleDeviceManagerTest {
}
@Test
public
void
setRole
()
{
public
void
setRole
()
throws
InterruptedException
{
connectDevice
(
DID1
,
SW1
);
admin
.
setRole
(
DID1
,
MastershipRole
.
STANDBY
);
validateEvents
(
DEVICE_ADDED
,
DEVICE_MASTERSHIP_CHANGED
);
...
...
Please
register
or
login
to post a comment