IPA FILTER AND ROUTE TABLES(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… IPA Filter and Route Tables(9) πŸ’…

okay so bestie, this is the IPA Filter and Route Tables(9) page from the Kernel API Manual, and it's literally all about the tables the IPA keeps in its local (IPA-resident) memory for filter and routing rules. πŸŽ€

The IPA has tables defined in its local (IPA-resident) memory that define filter and routing rules. An entry in either of these tables is a little endian 64-bit "slot" that holds the address of a rule definition. (The size of these slots is 64 bits regardless of the host DMA address size.) ✨

Separate tables (both filter and route) are used for IPv4 and IPv6. There is normally another set of "hashed" filter and route tables, which are used with a hash of message metadata. Hashed operation is not supported by all IPA hardware (IPA v4.2 doesn't support hashed tables). πŸ¦‹

Rules can be in local memory or in DRAM (system memory). The offset of an object (such as a route or filter table) in IPA-resident memory must 128-byte aligned. An object in system memory (such as a route or filter rule) must be at an 8-byte aligned address. We currently only place route or filter rules in system memory.

A rule consists of a contiguous block of 32-bit values terminated with 32 zero bits. A special "zero entry" rule consisting of 64 zero bits represents "no filtering" or "no routing," and is the reset value for filter or route table rules. πŸ’€

Each filter rule is associated with an AP or modem TX endpoint, though not all TX endpoints support filtering. The first 64-bit slot in a filter table is a bitmap indicating which endpoints have entries in the table. Each set bit in this bitmap indicates the presence of the address of a filter rule in the memory following the bitmap. Until IPA v5.0, the low-order bit (bit 0) in this bitmap represents a special global filter, which applies to all traffic. Otherwise the position of each set bit represents an endpoint for which a filter rule is defined. πŸ‘‘

The global rule is not used in current code, and support for it is removed starting at IPA v5.0. For IPA v5.0+, the endpoint bitmap position defines the endpoint ID--i.e. if bit 1 is set in the endpoint bitmap, endpoint 1 has a filter rule. Older versions of IPA represent the presence of a filter rule for endpoint X by bit (X + 1) being set. I.e., bit 1 set indicates the presence of a filter rule for endpoint 0, and bit 3 set means there is a filter rule present for endpoint 2. 🫢

Each filter table entry has the address of a set of equations that implement a filter rule. So following the endpoint bitmap there will be such an address/entry for each endpoint with a set bit in the bitmap. 🌸

The AP initializes all entries in a filter table to refer to a "zero" rule. Once initialized, the modem and AP update the entries for endpoints they "own" directly. Currently the AP does not use the IPA filtering functionality. ✨

This diagram shows an example of a filter table with an endpoint bitmap as defined prior to IPA v5.0.

IPA Filter Table
----------------------
endpoint bitmap      | 0x0000000000000048 | Bits 3 and 6 set (endpoints 2 and 5)
----------------------
1st endpoint         | 0x000123456789abc0 | DMA address for modem endpoint 2 rule
----------------------
2nd endpoint         | 0x000123456789abf0 | DMA address for AP endpoint 5 rule
----------------------
(unused)             |                    | (Unused space in filter table)
----------------------
. . .                |                    |
----------------------
(unused)             |                    | (Unused space in filter table)
----------------------

The set of available route rules is divided about equally between the AP and modem. The AP initializes all entries in a route table to refer to a "zero entry". Once initialized, the modem and AP are responsible for updating their own entries. All entries in a route table are usable, though the AP currently does not use the IPA routing functionality. 🌈

IPA Route Table
----------------------
1st modem route      | 0x0001234500001100 | DMA address for first route rule
----------------------
2nd modem route      | 0x0001234500001140 | DMA address for second route rule
----------------------
. . .                |                    |
----------------------
Last modem route     | 0x0001234500002280 | DMA address for Nth route rule
----------------------
1st AP route         | 0x0001234500001100 | DMA address for route rule (N+1)
----------------------
2nd AP route         | 0x0001234500001140 | DMA address for next route rule
----------------------
. . .                |                    |
----------------------
Last AP route        | 0x0001234500002280 | DMA address for last route rule
----------------------

πŸ‘€ SEE ALSO πŸ‘€

Kernel file ./drivers/net/ipa/ipa_table.c β€” ipa_filter_tuple_zero(9), ipa_route_tuple_zero(9).

mwah πŸ’‹ this page came from ./drivers/net/ipa, dated October 2026, and it's the IPA Filter and Route Tables(9) manual β€” periodt. 🫢

πŸ“¦ where this page comes from