net: mscc: ocelot: add a new ocelot_vcap_block_find_filter_by_id function
And rename the existing find to ocelot_vcap_block_find_filter_by_index. The index is the position in the TCAM, and the id is the flow cookie given by tc. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
642942637c
commit
085f5b9162
@ -769,8 +769,8 @@ static int ocelot_vcap_block_get_filter_index(struct ocelot_vcap_block *block,
|
||||
}
|
||||
|
||||
static struct ocelot_vcap_filter*
|
||||
ocelot_vcap_block_find_filter(struct ocelot_vcap_block *block,
|
||||
int index)
|
||||
ocelot_vcap_block_find_filter_by_index(struct ocelot_vcap_block *block,
|
||||
int index)
|
||||
{
|
||||
struct ocelot_vcap_filter *tmp;
|
||||
int i = 0;
|
||||
@ -784,6 +784,18 @@ ocelot_vcap_block_find_filter(struct ocelot_vcap_block *block,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct ocelot_vcap_filter *
|
||||
ocelot_vcap_block_find_filter_by_id(struct ocelot_vcap_block *block, int id)
|
||||
{
|
||||
struct ocelot_vcap_filter *filter;
|
||||
|
||||
list_for_each_entry(filter, &block->rules, list)
|
||||
if (filter->id == id)
|
||||
return filter;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* If @on=false, then SNAP, ARP, IP and OAM frames will not match on keys based
|
||||
* on destination and source MAC addresses, but only on higher-level protocol
|
||||
* information. The only frame types to match on keys containing MAC addresses
|
||||
@ -865,7 +877,7 @@ ocelot_exclusive_mac_etype_filter_rules(struct ocelot *ocelot,
|
||||
if (ocelot_vcap_is_problematic_mac_etype(filter)) {
|
||||
/* Search for any non-MAC_ETYPE rules on the port */
|
||||
for (i = 0; i < block->count; i++) {
|
||||
tmp = ocelot_vcap_block_find_filter(block, i);
|
||||
tmp = ocelot_vcap_block_find_filter_by_index(block, i);
|
||||
if (tmp->ingress_port_mask & filter->ingress_port_mask &&
|
||||
ocelot_vcap_is_problematic_non_mac_etype(tmp))
|
||||
return false;
|
||||
@ -877,7 +889,7 @@ ocelot_exclusive_mac_etype_filter_rules(struct ocelot *ocelot,
|
||||
} else if (ocelot_vcap_is_problematic_non_mac_etype(filter)) {
|
||||
/* Search for any MAC_ETYPE rules on the port */
|
||||
for (i = 0; i < block->count; i++) {
|
||||
tmp = ocelot_vcap_block_find_filter(block, i);
|
||||
tmp = ocelot_vcap_block_find_filter_by_index(block, i);
|
||||
if (tmp->ingress_port_mask & filter->ingress_port_mask &&
|
||||
ocelot_vcap_is_problematic_mac_etype(tmp))
|
||||
return false;
|
||||
@ -916,7 +928,7 @@ int ocelot_vcap_filter_add(struct ocelot *ocelot,
|
||||
for (i = block->count - 1; i > index; i--) {
|
||||
struct ocelot_vcap_filter *tmp;
|
||||
|
||||
tmp = ocelot_vcap_block_find_filter(block, i);
|
||||
tmp = ocelot_vcap_block_find_filter_by_index(block, i);
|
||||
is2_entry_set(ocelot, i, tmp);
|
||||
}
|
||||
|
||||
@ -968,7 +980,7 @@ int ocelot_vcap_filter_del(struct ocelot *ocelot,
|
||||
for (i = index; i < block->count; i++) {
|
||||
struct ocelot_vcap_filter *tmp;
|
||||
|
||||
tmp = ocelot_vcap_block_find_filter(block, i);
|
||||
tmp = ocelot_vcap_block_find_filter_by_index(block, i);
|
||||
is2_entry_set(ocelot, i, tmp);
|
||||
}
|
||||
|
||||
@ -992,7 +1004,7 @@ int ocelot_vcap_filter_stats_update(struct ocelot *ocelot,
|
||||
vcap_entry_get(ocelot, filter, index);
|
||||
|
||||
/* After we get the result we need to clear the counters */
|
||||
tmp = ocelot_vcap_block_find_filter(block, index);
|
||||
tmp = ocelot_vcap_block_find_filter_by_index(block, index);
|
||||
tmp->stats.pkts = 0;
|
||||
is2_entry_set(ocelot, index, tmp);
|
||||
|
||||
|
@ -221,6 +221,8 @@ int ocelot_vcap_filter_del(struct ocelot *ocelot,
|
||||
struct ocelot_vcap_filter *rule);
|
||||
int ocelot_vcap_filter_stats_update(struct ocelot *ocelot,
|
||||
struct ocelot_vcap_filter *rule);
|
||||
struct ocelot_vcap_filter *
|
||||
ocelot_vcap_block_find_filter_by_id(struct ocelot_vcap_block *block, int id);
|
||||
|
||||
void ocelot_detect_vcap_constants(struct ocelot *ocelot);
|
||||
int ocelot_vcap_init(struct ocelot *ocelot);
|
||||
|
Loading…
x
Reference in New Issue
Block a user