Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
floodlight
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
croft1
floodlight
Commits
d2b57d07
Commit
d2b57d07
authored
11 years ago
by
Gregor Maier
Browse files
Options
Downloads
Patches
Plain Diff
CLI expects OFPhysicalPorts being serialized. Add all DescriptionStats to REST
parent
c9c0f550
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/main/java/net/floodlightcontroller/core/web/ControllerSwitchesResource.java
+115
-8
115 additions, 8 deletions
...dlightcontroller/core/web/ControllerSwitchesResource.java
with
115 additions
and
8 deletions
src/main/java/net/floodlightcontroller/core/web/ControllerSwitchesResource.java
+
115
−
8
View file @
d2b57d07
...
...
@@ -17,13 +17,19 @@
package
net.floodlightcontroller.core.web
;
import
java.net.SocketAddress
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.Collection
;
import
net.floodlightcontroller.core.IFloodlightProviderService
;
import
net.floodlightcontroller.core.IOFSwitch
;
import
net.floodlightcontroller.core.ImmutablePort
;
import
net.floodlightcontroller.util.FilterIterator
;
import
org.openflow.protocol.OFPhysicalPort
;
import
org.openflow.util.HexString
;
import
org.restlet.data.Form
;
import
org.restlet.data.Status
;
...
...
@@ -35,12 +41,107 @@ import org.restlet.resource.ServerResource;
* @author readams
*/
public
class
ControllerSwitchesResource
extends
ServerResource
{
/**
* A wrapper class around IOFSwitch that defines the REST serialization
* fields. Could have written a Jackson serializer but this is easier.
*/
public
static
class
SwitchJsonSerializerWrapper
{
private
final
IOFSwitch
sw
;
public
SwitchJsonSerializerWrapper
(
IOFSwitch
sw
)
{
this
.
sw
=
sw
;
}
public
int
getActions
()
{
return
sw
.
getActions
();
}
public
Map
<
Object
,
Object
>
getAttributes
()
{
return
sw
.
getAttributes
();
}
public
Map
<
String
,
String
>
getDescription
()
{
Map
<
String
,
String
>
rv
=
new
HashMap
<
String
,
String
>();
rv
.
put
(
"manufacturer"
,
sw
.
getDescriptionStatistics
().
getManufacturerDescription
());
rv
.
put
(
"hardware"
,
sw
.
getDescriptionStatistics
().
getHardwareDescription
());
rv
.
put
(
"software"
,
sw
.
getDescriptionStatistics
().
getSoftwareDescription
());
rv
.
put
(
"serialNum"
,
sw
.
getDescriptionStatistics
().
getSerialNumber
());
rv
.
put
(
"datapath"
,
sw
.
getDescriptionStatistics
().
getDatapathDescription
());
return
rv
;
}
public
int
getBuffers
()
{
return
sw
.
getBuffers
();
}
public
int
getCapabilities
()
{
return
sw
.
getCapabilities
();
}
public
long
getConnectedSince
()
{
return
sw
.
getConnectedSince
().
getTime
();
}
public
String
getDpid
()
{
return
sw
.
getStringId
();
}
public
String
getHarole
()
{
return
sw
.
getHARole
().
toString
();
}
public
String
getInetAddress
()
{
SocketAddress
addr
=
sw
.
getInetAddress
();
if
(
addr
==
null
)
return
null
;
return
addr
.
toString
();
}
public
Collection
<
OFPhysicalPort
>
getPorts
()
{
return
ImmutablePort
.
ofPhysicalPortListOf
(
sw
.
getPorts
());
}
}
/**
* Wraps an iterator of IOFSwitch into an iterator of
* SwitchJsonSerializerWrapper
* @author gregor
*/
private
static
class
SwitchJsonSerializerWrapperIterator
implements
Iterator
<
SwitchJsonSerializerWrapper
>
{
private
final
Iterator
<
IOFSwitch
>
iter
;
public
SwitchJsonSerializerWrapperIterator
(
Iterator
<
IOFSwitch
>
iter
)
{
this
.
iter
=
iter
;
}
@Override
public
boolean
hasNext
()
{
return
this
.
iter
.
hasNext
();
}
@Override
public
SwitchJsonSerializerWrapper
next
()
{
return
new
SwitchJsonSerializerWrapper
(
iter
.
next
());
}
@Override
public
void
remove
()
{
this
.
iter
.
remove
();
}
}
public
static
final
String
DPID_ERROR
=
"Invalid Switch DPID: must be a 64-bit quantity, expressed in "
+
"hex as AA:BB:CC:DD:EE:FF:00:11"
;
@Get
(
"json"
)
public
Iterator
<
IOF
Switch
>
retrieve
()
{
public
Iterator
<
Switch
JsonSerializerWrapper
>
retrieve
()
{
IFloodlightProviderService
floodlightProvider
=
(
IFloodlightProviderService
)
getContext
().
getAttributes
().
get
(
IFloodlightProviderService
.
class
.
getCanonicalName
());
...
...
@@ -60,19 +161,25 @@ public class ControllerSwitchesResource extends ServerResource {
if
(
switchDPID
!=
null
)
{
IOFSwitch
sw
=
floodlightProvider
.
getSwitch
(
switchDPID
);
if
(
sw
!=
null
)
return
Collections
.
singleton
(
sw
).
iterator
();
return
Collections
.<
IOFSwitch
>
emptySet
().
iterator
();
if
(
sw
!=
null
)
{
SwitchJsonSerializerWrapper
wrappedSw
=
new
SwitchJsonSerializerWrapper
(
sw
);
return
Collections
.
singleton
(
wrappedSw
).
iterator
();
}
return
Collections
.<
SwitchJsonSerializerWrapper
>
emptySet
().
iterator
();
}
final
String
dpidStartsWith
=
form
.
getFirstValue
(
"dpid__startswith"
,
true
);
Iterator
<
IOFSwitch
>
switer
=
Iterator
<
IOFSwitch
>
iofSwitchIter
=
floodlightProvider
.
getAllSwitchMap
().
values
().
iterator
();
Iterator
<
SwitchJsonSerializerWrapper
>
switer
=
new
SwitchJsonSerializerWrapperIterator
(
iofSwitchIter
);
if
(
dpidStartsWith
!=
null
)
{
return
new
FilterIterator
<
IOF
Switch
>(
switer
)
{
return
new
FilterIterator
<
Switch
JsonSerializerWrapper
>(
switer
)
{
@Override
protected
boolean
matches
(
IOF
Switch
value
)
{
return
value
.
get
StringI
d
().
startsWith
(
dpidStartsWith
);
protected
boolean
matches
(
Switch
JsonSerializerWrapper
value
)
{
return
value
.
get
Dpi
d
().
startsWith
(
dpidStartsWith
);
}
};
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment