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
Jonathan Hart
2014-10-21 11:46:00 -0700
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
bc4a793a004e52cf4647572bf923e2ed150ade84
bc4a793a
1 parent
d87aeca6
Allowed flows to be permanent
Change-Id: I61952fe4cbad98be53094c7ec4a474868384b616
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
41 additions
and
16 deletions
apps/fwd/src/main/java/org/onlab/onos/fwd/ReactiveForwarding.java
core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowEntry.java
core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
core/net/src/main/java/org/onlab/onos/net/flow/impl/FlowRuleManager.java
core/net/src/main/java/org/onlab/onos/net/intent/impl/LinkCollectionIntentInstaller.java
core/net/src/main/java/org/onlab/onos/net/intent/impl/PathIntentInstaller.java
core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java
providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowEntryBuilder.java
apps/fwd/src/main/java/org/onlab/onos/fwd/ReactiveForwarding.java
View file @
bc4a793
package
org
.
onlab
.
onos
.
fwd
;
import
static
org
.
slf4j
.
LoggerFactory
.
getLogger
;
import
java.util.Dictionary
;
import
java.util.Set
;
import
org.apache.felix.scr.annotations.Activate
;
import
org.apache.felix.scr.annotations.Component
;
import
org.apache.felix.scr.annotations.Deactivate
;
...
...
@@ -30,11 +35,6 @@ import org.onlab.packet.Ethernet;
import
org.osgi.service.component.ComponentContext
;
import
org.slf4j.Logger
;
import
java.util.Dictionary
;
import
java.util.Set
;
import
static
org
.
slf4j
.
LoggerFactory
.
getLogger
;
/**
* Sample reactive forwarding application.
*/
...
...
@@ -206,7 +206,7 @@ public class ReactiveForwarding {
treat
.
setOutput
(
portNumber
);
FlowRule
f
=
new
DefaultFlowRule
(
context
.
inPacket
().
receivedFrom
().
deviceId
(),
builder
.
build
(),
treat
.
build
(),
PRIORITY
,
appId
,
TIMEOUT
);
builder
.
build
(),
treat
.
build
(),
PRIORITY
,
appId
,
TIMEOUT
,
false
);
flowRuleService
.
applyFlowRules
(
f
);
}
...
...
core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowEntry.java
View file @
bc4a793
...
...
@@ -27,7 +27,7 @@ public class DefaultFlowEntry extends DefaultFlowRule
TrafficTreatment
treatment
,
int
priority
,
FlowEntryState
state
,
long
life
,
long
packets
,
long
bytes
,
long
flowId
,
int
timeout
)
{
super
(
deviceId
,
selector
,
treatment
,
priority
,
flowId
,
timeout
);
super
(
deviceId
,
selector
,
treatment
,
priority
,
flowId
,
timeout
,
false
);
this
.
state
=
state
;
this
.
life
=
life
;
this
.
packets
=
packets
;
...
...
core/api/src/main/java/org/onlab/onos/net/flow/DefaultFlowRule.java
View file @
bc4a793
...
...
@@ -24,16 +24,18 @@ public class DefaultFlowRule implements FlowRule {
private
final
short
appId
;
private
final
int
timeout
;
private
final
boolean
permanent
;
public
DefaultFlowRule
(
DeviceId
deviceId
,
TrafficSelector
selector
,
TrafficTreatment
treatment
,
int
priority
,
long
flowId
,
int
timeout
)
{
int
timeout
,
boolean
permanent
)
{
this
.
deviceId
=
deviceId
;
this
.
priority
=
priority
;
this
.
selector
=
selector
;
this
.
treatment
=
treatment
;
this
.
timeout
=
timeout
;
this
.
permanent
=
permanent
;
this
.
created
=
System
.
currentTimeMillis
();
this
.
appId
=
(
short
)
(
flowId
>>>
48
);
...
...
@@ -42,7 +44,7 @@ public class DefaultFlowRule implements FlowRule {
public
DefaultFlowRule
(
DeviceId
deviceId
,
TrafficSelector
selector
,
TrafficTreatment
treatement
,
int
priority
,
ApplicationId
appId
,
int
timeout
)
{
int
timeout
,
boolean
permanent
)
{
if
(
priority
<
FlowRule
.
MIN_PRIORITY
)
{
throw
new
IllegalArgumentException
(
"Priority cannot be less than "
+
MIN_PRIORITY
);
...
...
@@ -54,6 +56,7 @@ public class DefaultFlowRule implements FlowRule {
this
.
treatment
=
treatement
;
this
.
appId
=
appId
.
id
();
this
.
timeout
=
timeout
;
this
.
permanent
=
permanent
;
this
.
created
=
System
.
currentTimeMillis
();
this
.
id
=
FlowId
.
valueOf
((((
long
)
this
.
appId
)
<<
48
)
|
(
this
.
hash
()
&
0x0000ffffffff
L
));
...
...
@@ -67,6 +70,7 @@ public class DefaultFlowRule implements FlowRule {
this
.
appId
=
rule
.
appId
();
this
.
id
=
rule
.
id
();
this
.
timeout
=
rule
.
timeout
();
this
.
permanent
=
rule
.
isPermanent
();
this
.
created
=
System
.
currentTimeMillis
();
}
...
...
@@ -157,4 +161,9 @@ public class DefaultFlowRule implements FlowRule {
return
timeout
;
}
@Override
public
boolean
isPermanent
()
{
return
permanent
;
}
}
...
...
core/api/src/main/java/org/onlab/onos/net/flow/FlowRule.java
View file @
bc4a793
...
...
@@ -59,8 +59,16 @@ public interface FlowRule extends BatchOperationTarget {
/**
* Returns the timeout for this flow requested by an application.
*
* @return integer value of the timeout
*/
int
timeout
();
/**
* Returns whether the flow is permanent i.e. does not time out.
*
* @return true if the flow is permanent, otherwise false
*/
boolean
isPermanent
();
}
...
...
core/net/src/main/java/org/onlab/onos/net/flow/impl/FlowRuleManager.java
View file @
bc4a793
...
...
@@ -327,6 +327,10 @@ public class FlowRuleManager
if
(
storedRule
==
null
)
{
return
false
;
}
if
(
storedRule
.
isPermanent
())
{
return
true
;
}
final
long
timeout
=
storedRule
.
timeout
()
*
1000
;
final
long
currentTime
=
System
.
currentTimeMillis
();
if
(
storedRule
.
packets
()
!=
swRule
.
packets
())
{
...
...
core/net/src/main/java/org/onlab/onos/net/intent/impl/LinkCollectionIntentInstaller.java
View file @
bc4a793
...
...
@@ -117,7 +117,7 @@ public class LinkCollectionIntentInstaller implements IntentInstaller<LinkCollec
TrafficTreatment
treatment
=
builder
().
setOutput
(
outPort
).
build
();
FlowRule
rule
=
new
DefaultFlowRule
(
deviceId
,
selector
,
treatment
,
123
,
appId
,
600
);
selector
,
treatment
,
123
,
appId
,
0
,
true
);
return
new
FlowRuleBatchEntry
(
operation
,
rule
);
}
...
...
core/net/src/main/java/org/onlab/onos/net/intent/impl/PathIntentInstaller.java
View file @
bc4a793
...
...
@@ -73,7 +73,7 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> {
FlowRule
rule
=
new
DefaultFlowRule
(
link
.
src
().
deviceId
(),
builder
.
build
(),
treatment
,
123
,
appId
,
15
);
123
,
appId
,
0
,
true
);
rules
.
add
(
new
FlowRuleBatchEntry
(
FlowRuleOperation
.
ADD
,
rule
));
prev
=
link
.
dst
();
}
...
...
@@ -95,7 +95,7 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> {
.
setOutput
(
link
.
src
().
port
()).
build
();
FlowRule
rule
=
new
DefaultFlowRule
(
link
.
src
().
deviceId
(),
builder
.
build
(),
treatment
,
123
,
appId
,
600
);
123
,
appId
,
0
,
true
);
rules
.
add
(
new
FlowRuleBatchEntry
(
FlowRuleOperation
.
REMOVE
,
rule
));
prev
=
link
.
dst
();
}
...
...
core/net/src/test/java/org/onlab/onos/net/flow/impl/FlowRuleManagerTest.java
View file @
bc4a793
package
org
.
onlab
.
onos
.
net
.
flow
.
impl
;
import
static
java
.
util
.
Collections
.
EMPTY_LIST
;
import
static
org
.
junit
.
Assert
.*;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
static
org
.
junit
.
Assert
.
fail
;
import
static
org
.
onlab
.
onos
.
net
.
flow
.
FlowRuleEvent
.
Type
.
RULE_ADDED
;
import
static
org
.
onlab
.
onos
.
net
.
flow
.
FlowRuleEvent
.
Type
.
RULE_REMOVED
;
import
static
org
.
onlab
.
onos
.
net
.
flow
.
FlowRuleEvent
.
Type
.
RULE_UPDATED
;
...
...
@@ -115,7 +119,7 @@ public class FlowRuleManagerTest {
private
FlowRule
flowRule
(
int
tsval
,
int
trval
)
{
TestSelector
ts
=
new
TestSelector
(
tsval
);
TestTreatment
tr
=
new
TestTreatment
(
trval
);
return
new
DefaultFlowRule
(
DID
,
ts
,
tr
,
10
,
appId
,
TIMEOUT
);
return
new
DefaultFlowRule
(
DID
,
ts
,
tr
,
10
,
appId
,
TIMEOUT
,
false
);
}
...
...
providers/openflow/flow/src/main/java/org/onlab/onos/provider/of/flow/impl/FlowEntryBuilder.java
View file @
bc4a793
...
...
@@ -78,7 +78,7 @@ public class FlowEntryBuilder {
if
(
addedRule
)
{
FlowRule
rule
=
new
DefaultFlowRule
(
DeviceId
.
deviceId
(
Dpid
.
uri
(
dpid
)),
buildSelector
(),
buildTreatment
(),
stat
.
getPriority
(),
stat
.
getCookie
().
getValue
(),
stat
.
getIdleTimeout
());
stat
.
getCookie
().
getValue
(),
stat
.
getIdleTimeout
()
,
false
);
return
new
DefaultFlowEntry
(
rule
,
FlowEntryState
.
ADDED
,
stat
.
getDurationSec
(),
stat
.
getPacketCount
().
getValue
(),
stat
.
getByteCount
().
getValue
());
...
...
@@ -86,7 +86,7 @@ public class FlowEntryBuilder {
}
else
{
FlowRule
rule
=
new
DefaultFlowRule
(
DeviceId
.
deviceId
(
Dpid
.
uri
(
dpid
)),
buildSelector
(),
null
,
removed
.
getPriority
(),
removed
.
getCookie
().
getValue
(),
removed
.
getIdleTimeout
());
removed
.
getCookie
().
getValue
(),
removed
.
getIdleTimeout
()
,
false
);
return
new
DefaultFlowEntry
(
rule
,
FlowEntryState
.
REMOVED
,
removed
.
getDurationSec
(),
removed
.
getPacketCount
().
getValue
(),
removed
.
getByteCount
().
getValue
());
}
...
...
Please
register
or
login
to post a comment