|
1 | 1 | == LACP Developer Guide |
2 | 2 | === LACP Overview |
3 | | -The LACP(Link Aggregation Control Protocol) feature can be used to |
4 | | -aggregate multiple links between OpenDaylight controlled network |
5 | | -switches and their directly connected LACP enabled legacy switches or |
6 | | -hosts operating in active mode. |
7 | | - |
8 | | -LACP passively negotiates automatic bundling of multiple links to form |
9 | | -a single logical interface. |
10 | | -The logical interface is currently realised in the OpenDaylight controlled |
11 | | -switches using Openflow(1.3) group table functionality. |
12 | | -The realisation of the logical interface can be also be done by informing the |
13 | | -creation of the LAG(LACP Aggregator) interface to the OpenDaylight controlled |
14 | | -switches or in any other manner by adding the required pluggable extension to |
15 | | -the LACP. |
| 3 | +The OpenDaylight LACP (Link Aggregation Control Protocol) project can be used to |
| 4 | +aggregate multiple links between OpenDaylight controlled network switches and |
| 5 | +LACP enabled legacy switches or hosts operating in active LACP mode. |
| 6 | + |
| 7 | +OpenDaylight LACP passively negotiates automatic bundling of multiple links to form |
| 8 | +a single LAG (Link Aggregation Group). LAGs are realised in the OpenDaylight controlled |
| 9 | +switches using OpenFlow 1.3+ group table functionality. |
| 10 | + |
16 | 11 |
|
17 | 12 | === LACP Architecture |
| 13 | + |
18 | 14 | * *inventory* |
19 | | - ** Maintains the list of LACP supporting OpenDaylight controlled switches, |
20 | | - the list of logical interfaces created and physical links that are part |
21 | | - of the logical interfaces available in each switch |
| 15 | + ** Maintains list of OpenDaylight controlled switches and port information |
| 16 | + ** List of LAGs created and physical ports that are part |
| 17 | + of the LAG |
| 18 | + ** Interacts with MD-SAL to update LACP related information |
| 19 | + |
| 20 | +* *inventorylistener* |
| 21 | + ** This module interacts with MD-SAL for receiving node/node-connector notifications |
| 22 | + |
| 23 | +* *flow* |
| 24 | + ** Programs the switch to punt LACP PDU (Protocol Data Unit) to controller |
| 25 | + |
22 | 26 | * *packethandler* |
23 | 27 | ** Receives and transmits LACP PDUs to the LACP enabled endpoint |
| 28 | + ** Provides infrastructure services for group table programming |
| 29 | + |
24 | 30 | * *core* |
25 | 31 | ** Performs LACP state machine processing |
26 | 32 |
|
27 | | -=== Realizing logical interface in switches |
28 | 33 |
|
29 | | -==== Group Table programming |
30 | | -The logical interface representing the aggregated multiple physical links |
| 34 | +==== How LAG programming is implemented |
| 35 | + |
| 36 | +The LAG representing the aggregated multiple physical ports |
31 | 37 | are realized in the OpenDaylight controlled switches by creating a |
32 | 38 | group table entry (Group table supported from Openflow 1.3 onwards). |
33 | 39 | The group table entry has a group type *Select* and action referring to |
34 | | -the aggregated physical links. |
35 | | -Any data traffic to be sent out through the logical interface can be sent |
36 | | -through the *Group entry* available for the logical interface. |
| 40 | +the aggregated physical ports. |
| 41 | +Any data traffic to be sent out through the LAG can be sent |
| 42 | +through the *group entry* available for the LAG. |
| 43 | + |
| 44 | +Suppose there are ports P1-P8 in a node. |
| 45 | +When LACP project is installed, a group table entry for handling broadcast traffic is automatically |
| 46 | +created on all the switches that have registered to the controller. |
| 47 | + |
| 48 | +[options="header"] |
| 49 | +|================================= |
| 50 | +|GroupID |GroupType|EgressPorts |
| 51 | +|<B'castgID>|ALL |P1,P2,...P8 |
| 52 | +|================================= |
| 53 | + |
| 54 | +Now, assume P1 & P2 are now part of LAG1. The group table would be programmed as follows: |
| 55 | + |
| 56 | +[options="header"] |
| 57 | +|======================================== |
| 58 | +|GroupID |GroupType|EgressPorts |
| 59 | +|<B'castgID>|ALL |P3,P4,...P8 |
| 60 | +|<LAG1> |SELECT |P1,P2 |
| 61 | +|======================================== |
| 62 | + |
| 63 | +When a second LAG, LAG2, is formed with ports P3 and P4, |
| 64 | + |
| 65 | +[options="header"] |
| 66 | +|=============================================== |
| 67 | +|GroupID |GroupType|EgressPorts |
| 68 | +|<B'castgID>|ALL |P5,P6,...P8 |
| 69 | +|<LAG1> |SELECT |P1,P2 |
| 70 | +|<LAG2> |SELECT |P3,P4 |
| 71 | +|=============================================== |
| 72 | + |
| 73 | +==== How applications can program OpenFlow flows using LACP-created LAG groups |
37 | 74 |
|
38 | | -==== Alternate ways of realizing logical interface |
| 75 | +OpenDaylight controller modules can get the information of LAG by listening/querying the LACP Aggregator datastore. |
39 | 76 |
|
40 | | -An interface for the logical interface creation / modification / deletion |
41 | | -is provided by the LACP feature. The plugin to realize the logical interface |
42 | | -has to implement this interface and provide implementation for the following |
43 | | -interface functions |
| 77 | +When any application receives packets, it can check, if the ingress port is part of a LAG by verifying the |
| 78 | +LAG Aggregator reference (lacp-agg-ref) for the source nodeConnector that OpenFlow plugin provides. |
44 | 79 |
|
45 | | -* LACreateLag(nodeId, aggId, portId) |
| 80 | +When applications want to add flows to egress out of the LAG, they must use the group entry corresponding to the LAG. |
46 | 81 |
|
47 | | -* LADeleteLag(nodeId, aggId) |
| 82 | +From the above example, for a flow to egress out of LAG1, |
48 | 83 |
|
49 | | -* LAUpdateLag(nodeId, aggId, portId, action) |
| 84 | +*add-flow eth_type=<xxxx>,ip_dst=<x.x.x.x>,actions=output:<LAG1>* |
50 | 85 |
|
51 | | -==== Realizing logical interface using other pluggable extension |
52 | | -Any new extension that wants to realize the logical interface in the |
53 | | -switch must implement the above mentioned interface functions. |
54 | | -These implemented functions must have a way of informing the |
55 | | -logical interface related operation to the switch. |
56 | | -It also has to provide a mapping so as to handle the data |
57 | | -traffic transmitted through the logical interface using the hardware |
58 | | -support available for that logical interface in the switch. |
| 86 | +Similarly, when applications want traffic to be broadcasted, they should use the group table entries *<B'castgID>,<LAG1>,<LAG2>* in output action. |
59 | 87 |
|
| 88 | +For all applications, the group table information is accessible from LACP Aggregator datastore. |
0 commit comments