70 likes | 88 Views
Comprehensive guide on managing protocol filters and results in TCAM database. Learn allocation, priority, and operations for unicast and multicast filters.
E N D
Filters and Results • First, some things to remember: • This is the NPE: we are supporting protocols that may not be IP! • Order of filters in a TCAM database defines those filters’ priority • Lower numbered filter indices are higher priority • TCAM filter lookup is done on the A-Side. • TCAM filter result gives us a pointer to a full result which resides in SRAM on the B-Side. • Thus the A-Side filter and the B-Side result need not be a 1-1 mapping • We could have many filters using the same B-Side result. • We are supporting Unicast and Multicast filters and results • Multicast supports a maximum fanout of 16.
Filters and Results (continued) • Slice owners allocate N unicast filters and M multicast filters. • They get: • N+M Filter id’s (0 – (N+M-1) ) • Contiguous in the TCAM • Order in TCAM indicates priority, lower id higher priority • N Unicast Result indices (0 – (N-1) ) • Contiguous in the Unicast portion of Result table • M Multicast Result indices (0 - (M-1) ) • Contiguous in the Multicast port of the Result table • Result entries are re-initialized when allocated to a fastpath • This prevents a fastpath from re-using a stale result from another fastpath • Filter id and Result index (unicast or multicast) are referenced separately. • Example: Filter id 4 might use unicast result index 12 • Unicast and Multicast filters in TCAM can be mingled. • Remember: Order in TCAM is important. • Example: A unicast catch-all (all wildcards) filter should probably be the LAST filter in a slice’s set of filters so it does not override other filters including multicast filters.
Filters and Results (continued) • Slice owners will have the ability to disable a filter. • Control removes the filter from tthe TCAM (LookupA) • Result is left on NPUB for "in-flight" packets • Slice owners can also remove a filter • This deletes the results from the B-side
Filter / Result Operations TCAM Result (A-side) Result Table (B-side) Type (1b) ResultIndex(31) MC Result BitMask(16b) Stats Index (16) Unicast N Results 16B per Result Result Entry (B-side) • If we use entire SRAM Bank: • SRAM Banks are 8MB • Result size is 16B • TCAM has 128K 144b entries • N + M = 128K • (N+16*M) * 16 <= 8MB • N = 104858 • M = 26214 Valid(1b) Multicast M Blocks 16 Results per Block 16B per Result Pad (11b) QID (20b) 16B IP DAddr (32b) UDP DPort (16b) UDP SPort (16b) Pad (16b) HFIndex (16b)
Filter / Result Operations • add_mc_filter(fid, RxMI, Key, Mask, mcResultIndex, statIndex) • update_mc_filter(fid, mcResultIndex, resultMask) • add_mc_result(fid, mcResultIndex, entryIndex, Qinfo, DestInfo) • update_mc_result(fid, mcResultIndex, entryIndex, Qinfo, DestInfo) • remove_mc_filter(fid) • remove_mc_result(mcResultIndex) • add_uc_filter(fid, RxMI, Key, Mask, ucResultIndex, statIndex) • update_uc_filter(fid, ucResultIndex, statIndex) • add_uc_result(fid, ucResultIndex, Qinfo, DestInfo) • update_uc_result(fid, ucResultIndex, Qinfo, DestInfo) • remove_uc_filter(fid) • remove_uc_result(ucResultIndex) Type (1b) ResultIndex(31) Result Bit Mask(16b) Stats Index (16) Valid(1b) TCAM Result (A-side) QID (20b) IP DAddr (32b) Result Entry (B-side) UDP DPort (16b) UDP SPort (16b) HFIndex (16b)
Multicast Filter / Result Operations • add_mc_filter(fid, RxMI, Key, mcResultIndex, resultMask, statIndex) • Adds multicast filter to TCAM • update_mc_filter(fid, mcResultIndex, resultMask, statIndex) • Updates (re-writes) the TCAM result • add_mc_result(mcResultIndex, entryIndex, Qinfo, DestInfo) • Writes a MC result entry into Result Table • Marks result as valid • update_mc_result(mcResultIndex, entryIndex, Qinfo, DestInfo) • Updates (re-writes) a MC result entry in the Result Table • Marks result as valid • Implementation will almost certainly be same as add_mc_result so why have both? • remove_mc_filter(fid) • Removes the filter from the TCAM, leaves B-side results unchanged. • remove_mc_result(mcResultIndex) • Invalidates a multicast filter result
Unicast Filter / Result Operations • add_uc_filter(fid, RxMI, Key, ucResultIndex, statIndex) • Adds unicast filter to TCAM • update_uc_filter(fid, ucResultIndex, statIndex) • Updates (re-writes) the TCAM result • add_uc_result(ucResultIndex, Qinfo, DestInfo) • Writes a UC result entry into the Result table • Marks result as valid • update_uc_result(ucResultIndex, Qinfo, DestInfo) • Updates (re-writes) a UC result entry into the Result table • Marks result as valid • Implementation will almost certainly be same as add_uc_result so why have both? • remove_uc_filter(fid) • Removes the filter from the TCAM, leaves the B-Side results unchanged • remove_uc_result(ucResultIndex) • Invalidates a unicast filter result