MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rte_table_acl_lookup

Function rte_table_acl_lookup

dpdk/lib/table/rte_table_acl.c:708–765  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

706}
707
708static int
709rte_table_acl_lookup(
710 void *table,
711 struct rte_mbuf **pkts,
712 uint64_t pkts_mask,
713 uint64_t *lookup_hit_mask,
714 void **entries)
715{
716 struct rte_table_acl *acl = (struct rte_table_acl *) table;
717 const uint8_t *pkts_data[RTE_PORT_IN_BURST_SIZE_MAX];
718 uint32_t results[RTE_PORT_IN_BURST_SIZE_MAX];
719 uint64_t pkts_out_mask;
720 uint32_t n_pkts, i, j;
721
722 __rte_unused uint32_t n_pkts_in = rte_popcount64(pkts_mask);
723 RTE_TABLE_ACL_STATS_PKTS_IN_ADD(acl, n_pkts_in);
724
725 /* Input conversion */
726 for (i = 0, j = 0; i < (uint32_t)(RTE_PORT_IN_BURST_SIZE_MAX -
727 rte_clz64(pkts_mask)); i++) {
728 uint64_t pkt_mask = 1LLU << i;
729
730 if (pkt_mask & pkts_mask) {
731 pkts_data[j] = rte_pktmbuf_mtod(pkts[i], uint8_t *);
732 j++;
733 }
734 }
735 n_pkts = j;
736
737 /* Low-level ACL table lookup */
738 if (acl->ctx != NULL)
739 rte_acl_classify(acl->ctx, pkts_data, results, n_pkts, 1);
740 else
741 n_pkts = 0;
742
743 /* Output conversion */
744 pkts_out_mask = 0;
745 for (i = 0; i < n_pkts; i++) {
746 uint32_t action_table_pos = results[i];
747 uint32_t pkt_pos = rte_ctz64(pkts_mask);
748 uint64_t pkt_mask = 1LLU << pkt_pos;
749
750 pkts_mask &= ~pkt_mask;
751
752 if (action_table_pos != 0) {
753 pkts_out_mask |= pkt_mask;
754 entries[pkt_pos] = (void *)
755 &acl->memory[action_table_pos *
756 acl->entry_size];
757 rte_prefetch0(entries[pkt_pos]);
758 }
759 }
760
761 *lookup_hit_mask = pkts_out_mask;
762 RTE_TABLE_ACL_STATS_PKTS_LOOKUP_MISS(acl, n_pkts_in - rte_popcount64(pkts_out_mask));
763
764 return 0;
765}

Callers

nothing calls this directly

Calls 5

rte_popcount64Function · 0.85
rte_clz64Function · 0.85
rte_acl_classifyFunction · 0.85
rte_ctz64Function · 0.85
rte_prefetch0Function · 0.50

Tested by

no test coverage detected