-
Notifications
You must be signed in to change notification settings - Fork 35
VLAN design
A bond interface can be configured for high availability redundancy or for load sharing, which increases connection throughput above that which is possible using one physical interface. The NAS-L2 LAG acts as enabler/uniform interface between the NPU/kernel and the architecture upper layers LAG/LACP feature.
The design of the NAS module for LAG should consider both Dell Networking OS offering and opening offering — there should not be any change in NAS L2 if the LAG feature is exercised via the Dell CLI or Linux utilities. To enable this, both the Dell offering and open offering use link aggregation (bonding) implementation support in the Linux kernel.
LAG complies to the IEEE 802.3ad (prior 2008) standard (see 802.1AX-2008 for more information).
1. NAS registers for all notification from the kernel for interface-specific operations — they are received into the NAS when an operation is triggered.
2. When NAS L2 receives a CPS operation (set, create, delete), the NAS L2 LAG module constructs netlink messages to send to the kernel for LAG-specific operations (create, delete, add, remove).
3. On receiving the netlink messages, the NAS parses the messages to the LAG module in the NAS and calls appropriate SAI APIs into SDK.
The NAS L2 LAG is part of the interface object with sub-interface type (LAG). The transport layer between the LAG and other objects in the system are via the CPS layer (CPS functional specification). Events/notifications are sent to other objects using the CPS API pub-sub model.
1. The CPS layer calls the NAS CPS API with (CPS key /?/lag/lagID) and lagId
to create bond0.
2. The NAS CPS API constructs a netlink message and sends it to the kernel to create the interface.
3. On successful creation, the NAS receives the netlink message along with its ifindex
(NAS mapping table is maintained between the CPS ladId
to the kernel LAG ifindex
).
4. Received netlink message is parsed to call into SAI for creation of the LAG. SAI generates the lagId
internally and reports it to the NAS (NAS maintains mapping table between ifindex
from kernel to SAI lagId
). The following mapping is stored in NAS dynamically — any member port added or delete are added to the list.
CPS
lagId
<===> kernel LAGifindex
Kernel LAG
ifindex
<===> SAIlagId
5. Received kernel ifindex
is converted to the NPU ID, port ID to communicate to NDI<—>SAI.
1. The CPS layer calls the NAS CPS API with the interface ifindex
(CPS key /?/lag/port/lagId
) to add the interface to LAG bond0.
2. The NAS CPS API constructs a netlink message and sends it to the kernel to add the member to the LAG interface.
3. On successful creation, NAS receives the netlink message as the port is added as a slave to the bond master — mapping is updated in the NAS with the port addition.
4. The SAI lagId
is retrieved from the bond master kernel ifindex
for the slave added, and the program into the NPU trunk group (SAI APIs are used).
1. When a port is to be removed from a LAG group, the CPS API is called with (CPS key /?/lag/port/lagId
).
2. The NAS CPS API constructs a netlink message and sends it to the kernel to delete the member to the LAG interface.
3. On successful delete, the NAS receives the netlink message as the port is deleted as the slave to bond the master — mapping is updated in the NAS with the port deletion.
4. The SAI lagId
is retrieved from the bond master kernel ifindex
for the slave deleted, and the program into the NPU trunk group (SAI APIs are used).
1. When a LAG group is to be deleted, the CPS API is called with (CPS key /?/lag/lagId
).
2. The NAS CPS API constructs a netlink message and sends it to the kernel to delete the interface. This ensures the slave associated to the LAG is removed from kernel.
3. Notifications received on the deletion of the LAG group into NAS updates the mapping table to remove the bond master, and its associated points initialize.
4. The SAI lagId
is retrieved from the bond master kernel ifindex
, and the program NPU to delete the ports from trunk group and its trunk ID (SAI APIs are used).
© 2019 OpenSwitch project. All information is contributed to and made available by OPX under the Creative Commons Attribution 4.0 International License (available at http://creativecommons.org/licenses/by/4.0/).
- Home
- System overview
- Software releases
- Hardware support
- FAQs
- Install
- Build
- Configure
- Develop
- Administer
- Troubleshoot
- Software compatibility
- Contribute
- DevOps
- Join