summaryrefslogtreecommitdiffstats
path: root/src/plugins/lacp/lacp_doc.md
blob: 7df82b5689a2e76cdcbf1538ef6e820121d66634 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# VPP Link Aggregation Control Protocol (LACP) implementation    {#lacp_plugin_doc}

This document is to describe the usage of VPP LACP implementation.

## LACP

The Link Aggregation Control Protocol (LACP) is an 802.3ad standard which
provides a protocol for exchanging information between Partner Systems on a
link to allow their protocol instances to reach agreement on the Link Aggregation
Group to which the link belongs and enable transmission and reception for the
higher layer. Multiple links may be bundled to the same Aggregation Group to form
a high bandwidth transmission medium and create a fault-tolerant link.


### Configuration

1. Create the bond interface
create bond mode lacp [hw-addr <mac-address>] [load-balance { l2 | l23 | l34 } [numa-only]]

2. Enslave the physical interface to the bond
bond add <bond-interface-name> <slave-interface> [passive] [long-timeout]"

3. Delete the bond interface
delete bond {<interface> | sw_if_index <sw_idx>}

4. Detach the slave interface from the bond
bond del <slave-interface>

### Configuration example

```
create bond mode lacp
set interface state BondEthernet0 up
bond add BondEthernet0 TenGigabitEthernet7/0/0
bond add BondEthernet0 TenGigabitEthernet7/0/1
bond add BondEthernet0 TenGigabitEthernet5/0/0
bond add BondEthernet0 TenGigabitEthernet5/0/1
```

```
bond del TenGigabitEthernet5/0/1
```

```
delete bond BondEthernet0
```

### Operational data

```
show lacp [<interface>] [details]
```

Example:

```
DBGvpp# show lacp
                                                        actor state                      partner state
interface name            sw_if_index  bond interface   exp/def/dis/col/syn/agg/tim/act  exp/def/dis/col/syn/agg/tim/act
GigabitEthernet2/0/1      1            BondEthernet0      0   0   1   1   1   1   1   1    0   0   1   1   1   1   1   1
  LAG ID: [(ffff,e4-c7-22-f3-26-71,0000,00ff,0001), (ffff,fc-99-47-4a-0c-8b,0009,00ff,0001)]
  RX-state: CURRENT, TX-state: TRANSMIT, MUX-state: COLLECTING_DISTRIBUTING, PTX-state: PERIODIC_TX
TenGigabitEthernet4/0/0   2            BondEthernet1      0   0   1   1   1   1   1   1    0   0   1   1   1   1   0   1
  LAG ID: [(ffff,90-e2-ba-76-cf-2d,0001,00ff,0001), (8000,00-2a-6a-e5-50-c1,0140,8000,011d)]
  RX-state: CURRENT, TX-state: TRANSMIT, MUX-state: COLLECTING_DISTRIBUTING, PTX-state: PERIODIC_TX
TenGigabitEthernet4/0/1   3            BondEthernet1      0   0   1   1   1   1   1   1    0   0   1   1   1   1   0   1
  LAG ID: [(ffff,90-e2-ba-76-cf-2d,0001,00ff,0002), (8000,00-2a-6a-e5-50-c1,0140,8000,011e)]
  RX-state: CURRENT, TX-state: TRANSMIT, MUX-state: COLLECTING_DISTRIBUTING, PTX-state: PERIODIC_TX
TenGigabitEthernet8/0/1   7            BondEthernet1      0   0   1   1   1   1   1   1    0   0   1   1   1   1   0   1
  LAG ID: [(ffff,90-e2-ba-76-cf-2d,0001,00ff,0003), (8000,00-2a-6a-e5-50-01,007a,8000,0114)]
  RX-state: CURRENT, TX-state: TRANSMIT, MUX-state: COLLECTING_DISTRIBUTING, PTX-state: PERIODIC_TX
TenGigabitEthernet8/0/0   6            BondEthernet1      0   0   1   1   1   1   1   1    0   0   1   1   1   1   0   1
  LAG ID: [(ffff,90-e2-ba-76-cf-2d,0001,00ff,0004), (8000,00-2a-6a-e5-50-01,007a,8000,0115)]
  RX-state: CURRENT, TX-state: TRANSMIT, MUX-state: COLLECTING_DISTRIBUTING, PTX-state: PERIODIC_TX
TenGigabitEthernet6/0/1   5            BondEthernet2      0   0   1   1   1   1   1   1    0   0   1   1   1   1   1   1
  LAG ID: [(ffff,90-e2-ba-36-31-21,0002,00ff,0001), (ffff,90-e2-ba-29-f5-31,000f,00ff,0002)]
  RX-state: CURRENT, TX-state: TRANSMIT, MUX-state: COLLECTING_DISTRIBUTING, PTX-state: PERIODIC_TX
TenGigabitEthernet6/0/0   4            BondEthernet2      0   0   1   1   1   1   1   1    0   0   1   1   1   1   1   1
  LAG ID: [(ffff,90-e2-ba-36-31-21,0002,00ff,0002), (ffff,90-e2-ba-29-f5-31,000f,00ff,0001)]
  RX-state: CURRENT, TX-state: TRANSMIT, MUX-state: COLLECTING_DISTRIBUTING, PTX-state: PERIODIC_TX
DBGvpp#
```

```
show bond [details]
````

Example:

```
DBGvpp# show bond
sh bond
interface name   sw_if_index   mode         load balance  active slaves  slaves
BondEthernet0    10            lacp         l2            1              1
BondEthernet1    11            lacp         l34           4              4
BondEthernet2    12            lacp         l23           2              2
DBGvpp#
```

### Debugging

```
debug lacp [<interface>] <on | off>
```
new affinity per service list head index. * * @returns new affinity per service list head index. */ u32 nat_affinity_get_per_service_list_head_index (void); /** * @brief Flush all service affinity data. * * @param affinity_per_service_list_head_index Per sevice list head index. */ void nat_affinity_flush_service (u32 affinity_per_service_list_head_index); /** * @brief Initialize NAT client-IP based affinity. * * @param vm vlib main. * * @return error code. */ clib_error_t *nat_affinity_init (vlib_main_t * vm); /** * @brief Find service backend index for client-IP and take a reference * counting lock. * * @param client_addr Client IP address. * @param service_addr Service IP address. * @param proto IP protocol number. * @param service_port Service L4 port number. * @param backend_index Service backend index for client-IP if found. * * @return 0 on success, non-zero value otherwise. */ int nat_affinity_find_and_lock (ip4_address_t client_addr, ip4_address_t service_addr, u8 proto, u16 service_port, u8 * backend_index); /** * @brief Create affinity record and take reference counting lock. * @param client_addr Client IP address. * @param service_addr Service IP address. * @param proto IP protocol number. * @param service_port Service L4 port number. * @param backend_index Service backend index for client-IP. * @param sticky_time Affinity sticky time in seconds. * @param affinity_per_service_list_head_index Per sevice list head index. * * @return 0 on success, non-zero value otherwise. */ int nat_affinity_create_and_lock (ip4_address_t client_addr, ip4_address_t service_addr, u8 proto, u16 service_port, u8 backend_index, u32 sticky_time, u32 affinity_per_service_list_head_index); /** * @brief Release a reference counting lock for affinity. * * @param client_addr Client IP address. * @param service_addr Service IP address. * @param proto IP protocol number. */ void nat_affinity_unlock (ip4_address_t client_addr, ip4_address_t service_addr, u8 proto, u16 service_port); #endif /* __included_nat_affinity_h__ */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */