Skip to content

Network device interface

Amy Buck edited this page Dec 21, 2016 · 1 revision

The NDI abstracts the NPU accessibility to NAS components and provides uniform interface towards NPU irrespective of whether it is local or remote. It also maintains platforms specific details. The NDI layer is the part of NAS which is responsible for instantiating and providing interface to the NPU via SAI.

Main functionality provided by NDI layer

  • Initialization of SAI instances. NDI maintains NDI NPU database for each NPU present in the system or line card running base package. A SAI instance is created for each NPU and linked with NDI NPU databasxe.
  • Provides mapping between NPU ID/port ID to SAI instance. Each NAS feature component needs to implement the corresponding southbound ndi_xxx() APIs. ndi_xxx() maps to SAI APIs stored in the NDI NPU database. It is recommended to have one to one mapping between each ndi_xxx() with SAI API but it is permissible to have ndi_xxx() calling multiple SAI APIs to improve readability and reduce overhead.
  • Maintains default platform and vendor specific settings like port configuration and properties.
  • Interfaces with Other platform components like PAL and physical media drivers for optics related functionality and any other miscellaneous platform based functionality. It also provides interface to PAL and any other modules which needs access to NPU’s environment variable such as NPU temperature sensor reading.

See NDI design for more information.

NDI vs. SAI

  • NDI is a higher level of abstraction, and uses the SAI API.
  • NDI aggregates and abstracts access to all networking devices (media/optics, FPGA, BFD functionality). SAI API only implements an SDK abstraction only For instance, ndi_set_port_admin_state(npu_id, port_id, enable) performs two functions:
    • Enable tx laser, enable rx on QSFP corresponding to NPU port
    • Enable NPU port
  • NDI implements per platform initialization functions related to networking devices (such as CPLD, FPGA, NPU pre-emphasis), SAI provides NPU specific initialization, and only from the perspective of networking services
  • NDI supports multiple NPUs as part of the API, SAI supports a single NPU per SAI instance
  • The NDI can create multiple SAI instances to support multiple NPU
  • NDI supports NPU virtualization (where a remote NPU can be addressed by SW running on a card where the NPU is not physically connected), SAI only supports locally connected NPU (such as local PCI bus, to a given NPU)
Clone this wiki locally