Skip to content

VLAN design

Amy Buck edited this page Aug 7, 2017 · 3 revisions

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.

Compliance to standards

LAG complies to the IEEE 802.3ad (prior 2008) standard (see 802.1AX-2008 for more information).

Top-level view for LAG functionality in NAS layer

Design overview

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.

Create LAG interface

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 LAG ifindex

Kernel LAG ifindex <===> SAI lagId

5. Received kernel ifindex is converted to the NPU ID, port ID to communicate to NDI<—>SAI.

Add member to LAG interface

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).

Delete member to LAG interface

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).

Delete LAG interface

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).

Clone this wiki locally