Group table

Groups represent sets of actions for flooding as well as more complex forwarding semantics (e.g. multipath, fast reroute, and link aggregation). As a general layer of indirection, groups also enable multiple flow entries to forward to a single identifier (e.g. IP forwarding to a common next hop). This abstraction allows common output actions across flow entries to be changed efficiently.

The group table contains group entries; each group entry contains a list of action buckets with specific semantics dependent on group type. The actions in one or more action buckets are applied to packets sent to the group. There are 4 types of groups:

  1. All

    All the action buckets in the group should be executed when a packet hits the group table.

  2. Select

    Execute any one action bucket in the group. The switch implementation uses round-robin to select the action bucket to be executed. Openflow specification defines a weight mechanism to do load sharing. However, this is not supported in the switch implementation. The weight MUST be given as 1. For all the other groups, weight MUST be specified as 0.

  3. Indirect

    Execute the one defined bucket in this group. This group supports only a single bucket.

  4. Fast failover

    Execute the first live bucket. The buckets are evaluated for liveness in the order defined by the group.

For the implementation of groups, the following is important to note:

  • Group table is supported only in software. Hence, group cannot be referenced directly from a hardware flow entry.

  • The number of groups per OpenFlow instance is capped to 32.

  • The total number of groups in the switch is capped to 1024.

  • Chaining of groups not supported. As a consequence, watch_group is also not supported while doing group additions. Watch_group MUST always be set to OFPG_ANY for all the group types.

OpenFlow groups in hardware

Group type “ALL”

Some of the OpenFlow Groups are now supported in hardware apart from the existing support in Software. The OpenFlow group type “ALL” is now supported in hardware for v2 and v3 cards.

The capabilities provided by this feature include:

  • Only the type “ALL” Groups would be supported in hardware while the rest of the Groups continue to be supported in software.

  • The group of type “ALL” with buckets containing output port action will be installed in hardware. If the group of type “ALL” has other actions in the buckets, then the group is installed in software.

  • The ports that can be supported in OpenFlow “ALL” Group are Physical ports and LAG ports.

  • The type “ALL” groups with output ports in separate buckets would be taken to hardware.  If multiple output ports are given in a single bucket, the group would be put in software.

  • Groups not accommodated in hardware (either because actions are not supported or because hardware resources not available) would be accommodated in software.

  • Special port OFPP_FLOOD is supported in the ALL type Group in hardware.

The packet is effectively cloned for each bucket; one packet is processed for each bucket of the group.

The group bucket concept is explained below:

Bucket -1

(actions= output: a1)

Bucket-2

(actions= output: a2)

Bucket-3

(actions=output: a3)

The packets hitting the above Group action will be sent to the 3 ports (a1, a2 and a3).