Rx Packet Parsing#

This section explains how to enable an in-built programmable parser to parse the received Ethernet packet and provide an interface for users to configure rules in the parser.

The sample(QM) application shows how to configure parser rules for user-defined actions matched Rx packets.

FRP (Flexible Receive Parser)#

The MAC hardware controller has an in-built programmable parser to parse the Ethernet packet based on a software-controlled/programmable rule-set. This supports filtering and packet steering decisions (DMA channel selection) of the received packet based on any header field, 64/124 bytes from SOF (start of frame), of existing protocols or custom and future protocols. The parser uses a software programmed lookup table that contains instructions and filtering and routing decisions taken by the controller on the received packets.

Note

When FRP-based routing is enabled, MAC, RSS and IP based routing will not apply. Create FRP rules for any such added routing rules.

Scope#

There is a designated interface for FRP configuration, such as default 0, and this dedicated instance can configure any physical MAC controller instance of that hardware.

Abbreviations#

  • FRP -Flexible Receive Parser

  • MAC - Medium access control

  • MAC - Medium access control

  • RSS - Receive side scaling

  • IP - Internet protocol

  • DUT - Device under test

  • OK index(OKI)

  • NIC - Next Instruction Control.

 if (NIC==0) continue parse from OK Index
else /*(NIC ==1)*/ continue sequentially (parse the next entry in the instruction table)
  • L2 Filter - Layer 2 MAC address filter

Linux OS#

Note

The sample application is for development purposes and not for production.

Linux nvether_sample_app utility

QM sample application binary for Nvidia DUT (nvether_sample_app)

  • Part of SDK release for reference

To check the version:

./nvether_sample_app

Look for string such as Version(4), which means 4.

FRP_ADD Command Syntax#

AV+L:

nvether_sample_app <primary interface> frp_add <ID> <Match> <Type> <Filter Mode> <Offset> <OKI> <DMASel>

Parameters

  • Id - FRP table ID to add (0 to 255)

  • Match - Match data is used for comparing

    • MAX 12 bytes data

  • Type - Match data type

    • 0 - Normal data

    • 1 - L2 DA MAC

    • 2 - L2 SA MAC

    • 3 - L3 Source IP

    • 4 - L3 Destination IP

    • 5 - L4 UDP Source Port

    • 6 - L4 UDP Destination Port

    • 7 - L4 TCP Source Port

    • 8 - L4 TCP Destination Port

    • 9 - VLAN Tag

  • Mode - Filter mode for the entry

    • 0 - Accept and route

    • 1 - Reject and Drop

    • 2 - Accept and Bypass FRP Route

    • 3 - Link to OK Index

    • 4 - Inverse the Match, Accept and route

    • 5 - Inverse the Match, Reject and Drop

    • 6 - Inverse the Match, Accept and Bypass FRP Route

    • 7 - Inverse the Match, Link to OK Index

  • Offset - Frame offset of Match data

  • OKI - When NIC set give the value for Next Instruction

  • DMASel - Bit selection of DMA channels to route the frame

    • Bit[0] - DMA channel 0

    • Bit [N] - DMA channel N]

      • Max N for EQOS hardware is 7

      • Max N for MGBE is 9

Note

Packet duplication to multiple DMA channels works only for MC/BC packets and Highest RxQ needs to be enabled on the DT. Highest queue (Rx queue 9 for MGBE and Rx queue 7 for Orin platform)

Example

  1. Add FRP rule to accept and route packets from 192.168.1.100

nvether_sample_app <primary interface> frp_add 0 C0A80164 4 0 0 0 1
  1. Add FRP rule to reject and drop packets from 192.168.1.100

nvether_sample_app <primary interface> frp_add 0 C0A80164 4 1 0 0 1

FRP_UPDATE Command Syntax#

AV+L:

nvether_sample_app frp_update

  • Id - FRP table ID to add (0 to 255)

  • Match - Match data is used for comparing

    • MAX 12 bytes data

  • Type - Match data type

    • 0 - Normal data

    • 1 - L2 DA MAC

    • 2 - L2 SA MAC

    • 3 - L3 Source IP

    • 4 - L3 Destination IP

    • 5 - L4 UDP Source Port

    • 6 - L4 UDP Destination Port

    • 7 - L4 TCP Source Port

    • 8 - L4 TCP Destination Port

    • 9 - VLAN Tag

  • Mode - Filter mode for the entry

    • 0 - Accept and route

    • 1 - Reject and Drop

    • 2 - Accept and Bypass FRP Route

    • 3 - Link to OK Index

    • 4 - Inverse the Match, Accept and route

    • 5 - Inverse the Match, Reject and Drop

    • 6 - Inverse the Match, Accept and Bypass FRP Route

    • 7 - Inverse the Match, Link to OK Index

  • Offset - Frame offset of Match data

  • OKI - When NIC set give the value for Next Instruction

  • DMASel - Bit selection of DMA channels to route the frame

    • Bit[0] - DMA channel 0

    • Bit [N] - DMA channel N]

      • Max N for EQOS hardware is 7

      • Max N for MGBE is 9

Note

The Multiple DMA channel selection only works for MC/BC packets and Highest RxQ needs to be enabled on the DT. Highest queue (9 for MGBE and 7 for Orin platform)

Example

  1. Add FRP rule to accept and route packets from 192.168.1.100

nvether_sample_app <primary interface> frp_add 0 C0A80164 4 0 0 0 1
  1. Update FRP rule to reject and drop packets from 192.168.1.100

nvether_sample_app <primary interface> frp_update 0 C0A80164 4 1 0 0 1

FRP_DEL Command Syntax#

AV+L

./nvether_sample_app <primary interface> frp_del <ID>

Parameters

  • Id - FRP table ID to add (0 to 255)

Example

  • Delete FRP rule at ID 0.

nvether_sample_app <primary interface> frp_del 0

Additional Example Syntax#

L2 DA accept Filtering and DMA route

  • Delete Old FRP entries with frp_del command

nvether_sample_app <primary interface> frp_del 0
  • Add FRP rule to ADD DA f2:3b:00:06:87:ff:

nvether_sample_app <primary interface> frp_add 0 f23b000687ff 1 0 0 0 0x10

L2 DA Reject Filtering and DMA route

  • Add FRP rule to ADD DA f2:3b:00:06:87:ff:

nvether_sample_app <primary interface> frp_update 0 f23b000687ff 1 1 0 0 0x10

L2 MC DA Accept Filtering and Multiple DMA Channels Route

  • DUT side Add/Update FRP rule to MC MAC 01:00:5E:01:01:01

nvether_sample_app <primary interface> frp_update 0 01005E010101 1 0 0 0 0x3FF

L2 MC DA Reject Filtering

  • DUT side Add/Update FRP rule to MC MAC 01:00:5E:01:01:01

nvether_sample_app <primary interface> frp_update 0 01005E010101 1 1 0 0 0x3FF

L2 BC DA Accept Filtering and Multiple DMA Channels

  • DUT side Add/Update FRP rule for BC MAC FF:FF:FF:FF:FF:FF

nvether_sample_app <primary interface> frp_update 0 FFFFFFFFFFFF 1 0 0 0 0x3FF

L2 BC DA Reject Filtering

  • DUT side Add/Update FRP rule for BC MAC FF:FF:FF:FF:FF:FF

nvether_sample_app <primary interface> frp_update 0 FFFFFFFFFFFF 1 1 0 0 0x3FF

L2 SA Reject filtering

  • DUT side Add/Update FRP table 0 and 1 entry to ADD SA <<00:17:b6:00:00:00>>

nvether_sample_app <primary interface> frp_update 0 <<0017b6000000>> 2 1 0 0 0x8

L3 SA IP Reject filtering

  • DUT Side Add/Update FRP table entry 0 and 1 for Source IP 192.168.1.3

nvether_sample_app <primary interface> frp_update 0 C0A80103 3 1 0 0 0x2

Enable VLAN accept filtering using FRP command

nvether_sample_app <primary interface> frp_update 0 0005 9 0 0 0 0x2

Enable VLAN reject filtering FRP commands

nvether_sample_app <primary interface> frp_update 0 0005 9 1 0 0 0x2

L2 DA + L2 SA accept Filtering and DMA route

  • Add FRP rule for L2 DA <> L2 SA and link both rules:

nvether_sample_app <primary interface> frp_add 0 <f23b000687ff> 1 0 0 0 0x10
*
nvether_sample_app <primary interface> frp_add 1 <f23b000687ff> 2 0 0 0 0x10
*
nvether_sample_app <primary interface> frp_update 0 <f23b000687ff> 1 4 0 0 0x10

L2 DA + L2 SA Reject Filtering

  • Add FRP rule for L2 DA <> L2 SA and link both rules:

nvether_sample_app <primary interface> frp_add 0 <f23b000687ff> 1 0 0 0 0x10
*
nvether_sample_app <primary interface> frp_add 1 <f23b000687ff> 2 1 0 0 0x10
* nvether_sample_app <primary interface> frp_update 0 <f23b000687ff> 1 4 0 0 0x10

L2 Address Filter Command Syntax#

AV+L

nvether_sample_app <interface name> l2_filter <filter_no> <enable/disable> <mac addr>
            Filter_no
    Index  0 to 31.
            enable/disable
                0 - to disable filter, 1 - to enable filter\n"
            mac addr - MAC address(Ex - 94:18:82:71:ae:1d)]\n"

Note

  • Rx Packets are routed to the DMA channel, which is bound to the interface used for configuration.

  • This feature can be used only with Ethernet virtualization enabled.

  • As there are multiple default L2 addresses configured, use index numbers in reverse order reverse, such as 31, 30, 29, to avoid overwriting.

Example

  • To add/enable AA:10:18:2b:8f:8a at index 9

eqos_0 l2_filter 9 1 AA:10:18:2b:8f:8a
  • To delete/disable AA:10:18:2b:8f:8a at index 9

eqos_0 l2_filter 9 0 AA:10:18:2b:8f:8a