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-16 14:38:39 -0700
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
7b795499fd7043ccacdf78b7eac81b5a9e6f088f
7b795499
1 parent
498052f5
initial impl of criteria
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
240 additions
and
10 deletions
core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criterion.java
core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java
core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java
core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criteria.java
View file @
7b79549
package
org
.
onlab
.
onos
.
net
.
flow
.
criteria
;
import
org.onlab.onos.net.PortNumber
;
import
org.onlab.onos.net.flow.criteria.Criterion.Type
;
import
org.onlab.packet.IPAddress
;
import
org.onlab.packet.MACAddress
;
import
org.onlab.packet.VLANID
;
/**
* Factory class to create various traffic selection criteria.
*/
public
final
class
Criteria
{
//TODO: incomplete type implementation. Need to implement complete list from Criterion
// Ban construction
private
Criteria
()
{
}
/**
* Creates a match on IN_PORT field using the specified value.
*
* @param port inport value
* @return match criterion
*/
public
static
Criterion
matchInPort
(
PortNumber
port
)
{
return
new
PortCriterion
(
port
);
}
/**
* Creates a match on ETH_SRC field using the specified value. This value
* may be a wildcard mask.
*
* @param macValue MAC address value or wildcard mask
* @return match criterion
*/
public
static
Criterion
matchEthSrc
(
MAC
Value
macValue
)
{
return
n
ull
;
public
static
Criterion
matchEthSrc
(
MAC
Address
mac
)
{
return
n
ew
EthCriterion
(
mac
,
Type
.
ETH_SRC
)
;
}
/**
...
...
@@ -27,11 +45,214 @@ public final class Criteria {
* @param macValue MAC address value or wildcard mask
* @return match criterion
*/
public
static
Criterion
matchEthDst
(
MACValue
macValue
)
{
return
null
;
public
static
Criterion
matchEthDst
(
MACAddress
mac
)
{
return
new
EthCriterion
(
mac
,
Type
.
ETH_DST
);
}
/**
* Creates a match on ETH_TYPE field using the specified value.
*
* @param ethType eth type value
* @return match criterion
*/
public
static
Criterion
matchEthType
(
Short
ethType
)
{
return
new
EthTypeCriterion
(
ethType
);
}
/**
* Creates a match on VLAN ID field using the specified value.
*
* @param vlanId vlan id value
* @return match criterion
*/
public
static
Criterion
matchVlanId
(
VLANID
vlanId
)
{
return
new
VlanIdCriterion
(
vlanId
);
}
/**
* Creates a match on VLAN PCP field using the specified value.
*
* @param vlanPcp vlan pcp value
* @return match criterion
*/
public
static
Criterion
matchVlanId
(
Byte
vlanPcp
)
{
return
new
VlanPcpCriterion
(
vlanPcp
);
}
/**
* Creates a match on IP proto field using the specified value.
*
* @param proto ip protocol value
* @return match criterion
*/
public
static
Criterion
matchIPProtocol
(
Byte
proto
)
{
return
new
IPProtocolCriterion
(
proto
);
}
/**
* Creates a match on IP src field using the specified value.
*
* @param ip ip src value
* @return match criterion
*/
public
static
Criterion
matchIPSrc
(
IPAddress
ip
)
{
return
new
IPCriterion
(
ip
,
Type
.
IPV4_SRC
);
}
/**
* Creates a match on IP dst field using the specified value.
*
* @param ip ip src value
* @return match criterion
*/
public
static
Criterion
matchIPDst
(
IPAddress
ip
)
{
return
new
IPCriterion
(
ip
,
Type
.
IPV4_DST
);
}
/*
* Implementations of criteria.
*/
public
static
final
class
PortCriterion
implements
Criterion
{
private
final
PortNumber
port
;
public
PortCriterion
(
PortNumber
port
)
{
this
.
port
=
port
;
}
@Override
public
Type
type
()
{
return
Type
.
IN_PORT
;
}
public
PortNumber
port
()
{
return
this
.
port
;
}
}
public
static
final
class
EthCriterion
implements
Criterion
{
private
final
MACAddress
mac
;
private
final
Type
type
;
public
EthCriterion
(
MACAddress
mac
,
Type
type
)
{
this
.
mac
=
mac
;
this
.
type
=
type
;
}
@Override
public
Type
type
()
{
return
this
.
type
;
}
public
MACAddress
mac
()
{
return
this
.
mac
;
}
}
public
static
final
class
EthTypeCriterion
implements
Criterion
{
private
final
Short
ethType
;
public
EthTypeCriterion
(
Short
ethType
)
{
this
.
ethType
=
ethType
;
}
@Override
public
Type
type
()
{
return
Type
.
ETH_TYPE
;
}
public
Short
ethType
()
{
return
ethType
;
}
}
public
static
final
class
IPCriterion
implements
Criterion
{
private
final
IPAddress
ip
;
private
final
Type
type
;
public
IPCriterion
(
IPAddress
ip
,
Type
type
)
{
this
.
ip
=
ip
;
this
.
type
=
type
;
}
@Override
public
Type
type
()
{
return
this
.
type
;
}
public
IPAddress
ip
()
{
return
this
.
ip
;
}
}
public
static
final
class
IPProtocolCriterion
implements
Criterion
{
private
final
Byte
proto
;
public
IPProtocolCriterion
(
Byte
protocol
)
{
this
.
proto
=
protocol
;
}
@Override
public
Type
type
()
{
return
Type
.
IP_PROTO
;
}
public
Byte
protocol
()
{
return
proto
;
}
}
public
static
final
class
VlanPcpCriterion
implements
Criterion
{
private
final
Byte
vlanPcp
;
public
VlanPcpCriterion
(
Byte
vlanPcp
)
{
this
.
vlanPcp
=
vlanPcp
;
}
@Override
public
Type
type
()
{
return
Type
.
VLAN_PCP
;
}
public
Byte
protocol
()
{
return
vlanPcp
;
}
}
public
static
final
class
VlanIdCriterion
implements
Criterion
{
private
final
VLANID
vlanId
;
public
VlanIdCriterion
(
VLANID
vlanId
)
{
this
.
vlanId
=
vlanId
;
}
@Override
public
Type
type
()
{
return
Type
.
VLAN_VID
;
}
public
VLANID
vlanId
()
{
return
vlanId
;
}
}
// Dummy to illustrate the concept for now; delete ASAP
private
static
class
MACValue
{
}
}
...
...
core/api/src/main/java/org/onlab/onos/net/flow/criteria/Criterion.java
View file @
7b79549
package
org
.
onlab
.
onos
.
net
.
flow
.
criteria
;
/**
* Representation of a single header field selection.
*/
...
...
@@ -92,6 +93,12 @@ public interface Criterion {
IPV6_EXTHDR
}
/**
* Returns the type of criterion.
* @return type of criterion
*/
public
Type
type
();
// TODO: Create factory class 'Criteria' that will have various factory
// to create specific criterions.
...
...
core/api/src/main/java/org/onlab/onos/net/flow/instructions/Instructions.java
View file @
7b79549
...
...
@@ -10,6 +10,7 @@ import org.onlab.onos.net.flow.instructions.L3ModificationInstruction.ModIPInstr
import
org.onlab.onos.net.flow.instructions.L3ModificationInstruction.ModIPProtoInstruction
;
import
org.onlab.packet.IPAddress
;
import
org.onlab.packet.MACAddress
;
import
org.onlab.packet.VLANID
;
/**
* Factory class for creating various traffic treatment instructions.
*/
...
...
@@ -74,7 +75,7 @@ public final class Instructions {
* @param vlanId the vlan id to modify to.
* @return a L2 modification
*/
public
static
L2ModificationInstruction
modVlanId
(
Short
vlanId
)
{
public
static
L2ModificationInstruction
modVlanId
(
VLANID
vlanId
)
{
checkNotNull
(
vlanId
,
"VLAN id cannot be null"
);
return
new
L2ModificationInstruction
.
ModVlanIdInstruction
(
vlanId
);
}
...
...
core/api/src/main/java/org/onlab/onos/net/flow/instructions/L2ModificationInstruction.java
View file @
7b79549
package
org
.
onlab
.
onos
.
net
.
flow
.
instructions
;
import
org.onlab.packet.MACAddress
;
import
org.onlab.packet.VLANID
;
/**
* Abstraction of a single traffic treatment step.
...
...
@@ -100,9 +101,9 @@ public abstract class L2ModificationInstruction implements Instruction {
*/
public
static
final
class
ModVlanIdInstruction
extends
L2ModificationInstruction
{
public
final
Short
vlanId
;
public
final
VLANID
vlanId
;
public
ModVlanIdInstruction
(
Short
vlanId
)
{
public
ModVlanIdInstruction
(
VLANID
vlanId
)
{
this
.
vlanId
=
vlanId
;
}
...
...
@@ -111,7 +112,7 @@ public abstract class L2ModificationInstruction implements Instruction {
return
L2SubType
.
VLAN_ID
;
}
public
Short
vlanId
()
{
public
VLANID
vlanId
()
{
return
this
.
vlanId
;
}
...
...
Please
register
or
login
to post a comment