GroupMod

The controller uses GroupMod messages to modify group tables.
Initiator
Controller
Acknowledged
No

Not Defined
This message is not defined in this version of the protocol.

Structure

The validation of the action set in the bucket follows the rules in FlowMod. An invalid action results an Error message with type BadAction. A group entry with an existing group ID from an add request will result an error message with type GroupModFailed and code GroupExists.

For modify requests, an existing group entry should be deleted and then a new group entry is entered. There are situations in which a switch cannot add group entries and must send an error message with type GroupModeFailed and a code defined in the following.

  1. A new group ID: code UnknownGroup.

  2. An invalid group type: code InvalidGroup

  3. Buckets with a weight not equal to 1: code WeightUnsupported.

  4. Lack of space: code OutOfGroups

  5. Hardware or other restrictions on the number of buckets: OutOfBuckets

  6. Liveness unsupported: code WatchUnsupported

For delete requests, no action is taken if the specified group ID does not exist. Otherwise, the group and all flows forwarded to that group are deleted. Group with one message can be deleted with group value All.

The bucket field contains only one bucket with type Indirect. With type FF, bucket priorities are defined by bucket order. The weight field is only defined for type Select. Fields watch_port and watch_group indicate liveness, which decides the next bucket for execution. It is only required for type FF (fast failover) but optional to others. A port is live if its state is live. Furthermore, A bucket is live if watch_port does not have an ID of Any and the port watched is live, or watch_group does not have an ID of Any and the group watched is live. A group is live if at lease of one its buckets is live.

Message Structure

Name Bits Byte Ordering Constraints
command 16 MSBF see table
type 8 - see table
pad 8 - none
group_id 32 MSBF none
bucket[] - - see bucket structure

Bucket Structure

Name Bits Byte Ordering Constraints
len 16 MSBF ≥ 16
weight 16 MSBF = 1
watch_port 32 MSBF none
watch_group 32 MSBF none
pad 32 - none
action_header - MSBF action restrictions

Message Constraints

Field Name Code
Command Add 0x0000
Modify 0x0001
Delete 0x0002
Type All 0x00
Select 0x01
Indirect 0x02
FastFailover 0x03

References

Openflow Switch Specification 1.1 pages 41-42

Structure

No changes were made to data structures in this version. However, requirements for group chaining is added. If groups of groups is not supported by a switch, an error message is sent with type GroupModFailed and code ChainingUnsupported. If a loop is created in group forwarding, an error message is sent with type GroupModFailed and code Loop. If a switch cannot delete a group due to its reference from other groups, an error message is sent with type GroupModFailed and code ChainedGroup.

Message Structure

Name Bits Byte Ordering Constraints
command 16 MSBF see table
type 8 - see table
pad 8 - none
group_id 32 MSBF none
bucket[] - - see bucket table

Bucket Structure

Name Bits Byte Ordering Constraints
len 16 MSBF ≥ 16
weight 16 MSBF = 1
watch_port 32 MSBF none
watch_group 32 MSBF none
pad 32 - none
action_header - MSBF action restrictions

Message Constraints

Field Name Code
Command Add 0x0000
Modify 0x0001
Delete 0x0002
Type All 0x00
Select 0x01
Indirect 0x02
FastFailover 0x03

References

Openflow Switch Specification 1.2 pages 49-50

Structure

No changes were made to data structures in this version. However, requirements for group chaining is added. If groups of groups is not supported by a switch, an error message is sent with type GroupModFailed and code ChainingUnsupported. If a loop is created in group forwarding, an error message is sent with type GroupModFailed and code Loop. If a switch cannot delete a group due to its reference from other groups, an error message is sent with type GroupModFailed and code ChainedGroup.

Message Structure

Name Bits Byte Ordering Constraints
command 16 MSBF see table
type 8 - see table
pad 8 - none
group_id 32 MSBF none
bucket[] - MSBF see bucket table

Bucket Structure

Name Bits Byte Ordering Constraints
len 16 MSBF ≥ 16
weight 16 MSBF = 1
watch_port 32 MSBF none
watch_group 32 MSBF none
pad 32 - none
action_header - MSBF action restrictions

Message Constraints

Field Name Code
Command Add 0x0000
Modify 0x0001
Delete 0x0002
Type All 0x00
Select 0x01
Indirect 0x02
FastFailover 0x03

References

Openflow Switch Specification 1.3.0 pages 56-57

Structure

Some special group IDs are introduced in this version.

Message Structure

Name Bits Byte Ordering Constraints
command 16 MSBF see table
type 8 - see table
pad 8 - none
group_id 32 MSBF see table
bucket[] - - see bucket table

Bucket Structure

Name Bits Byte Ordering Constraints
len 16 MSBF ≥ 16
weight 16 MSBF = 1
watch_port 32 MSBF none
watch_group 32 MSBF none
pad 32 - none
action_header - MSBF action restrictions

Message Constraints

Field Name Code
Command Add 0x0000
Modify 0x0001
Delete 0x0002
Type All 0x00
Select 0x01
Indirect 0x02
FastFailover 0x03
GroupID Max 0xFFFFFF00
All 0xFFFFFFFC
Any 0xFFFFFFFF

References

Openflow Switch Specification 1.3.1 pages 66-68

Structure

Some special group IDs are introduced in this version.

Message Structure

Name Bits Byte Ordering Constraints
command 16 MSBF see table
type 8 - see table
pad 8 - none
group_id 32 MSBF see table
bucket[] - - see bucket table

Bucket Structure

Name Bits Byte Ordering Constraints
len 16 MSBF ≥ 16
weight 16 MSBF = 1
watch_port 32 MSBF none
watch_group 32 MSBF none
pad 32 - none
action_header - MSBF action restrictions

Message Constraints

Field Name Code
Command Add 0x0000
Modify 0x0001
Delete 0x0002
Type All 0x00
Select 0x01
Indirect 0x02
FastFailover 0x03
GroupID Max 0xFFFFFF00
All 0xFFFFFFFC
Any 0xFFFFFFFF

References

Openflow Switch Specification 1.3.2 pages 68-70

Under development
This section is under active development.

Under development
This section is under active development.