ofdpa
ofdpa_group_tbl_find(const struct ofdpa *ofdpa,
hash_for_each_possible(ofdpa->group_tbl, found,
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->group_tbl_lock, lock_flags);
found = ofdpa_group_tbl_find(ofdpa, match);
hash_add(ofdpa->group_tbl, &found->entry, found->group_id);
spin_unlock_irqrestore(&ofdpa->group_tbl_lock, lock_flags);
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->group_tbl_lock, lock_flags);
found = ofdpa_group_tbl_find(ofdpa, match);
spin_unlock_irqrestore(&ofdpa->group_tbl_lock, lock_flags);
ofdpa_neigh_tbl_find(const struct ofdpa *ofdpa, __be32 ip_addr)
hash_for_each_possible(ofdpa->neigh_tbl, found,
static void ofdpa_neigh_add(struct ofdpa *ofdpa,
entry->index = ofdpa->neigh_tbl_next_index++;
hash_add(ofdpa->neigh_tbl, &entry->entry,
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->neigh_tbl_lock, lock_flags);
found = ofdpa_neigh_tbl_find(ofdpa, ip_addr);
ofdpa_neigh_add(ofdpa, entry);
spin_unlock_irqrestore(&ofdpa->neigh_tbl_lock, lock_flags);
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->neigh_tbl_lock, lock_flags);
found = ofdpa_neigh_tbl_find(ofdpa, ip_addr);
ofdpa_neigh_add(ofdpa, entry);
spin_unlock_irqrestore(&ofdpa->neigh_tbl_lock, lock_flags);
static struct ofdpa_port *ofdpa_port_get(const struct ofdpa *ofdpa,
rocker_port = ofdpa->rocker->ports[port_index];
const struct ofdpa *ofdpa = ofdpa_port->ofdpa;
unsigned int port_count = ofdpa->rocker->port_count;
p = ofdpa_port_get(ofdpa, i);
const struct ofdpa *ofdpa = ofdpa_port->ofdpa;
unsigned int port_count = ofdpa->rocker->port_count;
p = ofdpa_port_get(ofdpa, i);
ofdpa_fdb_tbl_find(const struct ofdpa *ofdpa,
hash_for_each_possible(ofdpa->fdb_tbl, found, entry, match->key_crc32)
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->fdb_tbl_lock, lock_flags);
found = ofdpa_fdb_tbl_find(ofdpa, fdb);
hash_add(ofdpa->fdb_tbl, &fdb->entry,
spin_unlock_irqrestore(&ofdpa->fdb_tbl_lock, lock_flags);
struct ofdpa *ofdpa;
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->fdb_tbl_lock, lock_flags);
hash_for_each_safe(ofdpa->fdb_tbl, bkt, tmp, found, entry) {
spin_unlock_irqrestore(&ofdpa->fdb_tbl_lock, lock_flags);
struct ofdpa *ofdpa = timer_container_of(ofdpa, t, fdb_cleanup_timer);
unsigned long next_timer = jiffies + ofdpa->ageing_time;
spin_lock_irqsave(&ofdpa->fdb_tbl_lock, lock_flags);
hash_for_each_safe(ofdpa->fdb_tbl, bkt, tmp, entry, entry) {
spin_unlock_irqrestore(&ofdpa->fdb_tbl_lock, lock_flags);
mod_timer(&ofdpa->fdb_cleanup_timer, round_jiffies_up(next_timer));
ofdpa_internal_vlan_tbl_find(const struct ofdpa *ofdpa, int ifindex)
hash_for_each_possible(ofdpa->internal_vlan_tbl, found,
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->internal_vlan_tbl_lock, lock_flags);
found = ofdpa_internal_vlan_tbl_find(ofdpa, ifindex);
hash_add(ofdpa->internal_vlan_tbl, &found->entry, found->ifindex);
if (test_and_set_bit(i, ofdpa->internal_vlan_bitmap))
spin_unlock_irqrestore(&ofdpa->internal_vlan_tbl_lock, lock_flags);
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->internal_vlan_tbl_lock, lock_flags);
found = ofdpa_internal_vlan_tbl_find(ofdpa, ifindex);
clear_bit(bit, ofdpa->internal_vlan_bitmap);
spin_unlock_irqrestore(&ofdpa->internal_vlan_tbl_lock, lock_flags);
struct ofdpa *ofdpa = rocker->wpriv;
ofdpa->rocker = rocker;
hash_init(ofdpa->flow_tbl);
spin_lock_init(&ofdpa->flow_tbl_lock);
hash_init(ofdpa->group_tbl);
spin_lock_init(&ofdpa->group_tbl_lock);
hash_init(ofdpa->fdb_tbl);
spin_lock_init(&ofdpa->fdb_tbl_lock);
hash_init(ofdpa->internal_vlan_tbl);
spin_lock_init(&ofdpa->internal_vlan_tbl_lock);
hash_init(ofdpa->neigh_tbl);
spin_lock_init(&ofdpa->neigh_tbl_lock);
timer_setup(&ofdpa->fdb_cleanup_timer, ofdpa_fdb_cleanup, 0);
mod_timer(&ofdpa->fdb_cleanup_timer, jiffies);
ofdpa->ageing_time = BR_DEFAULT_AGEING_TIME;
struct ofdpa *ofdpa = rocker->wpriv;
timer_delete_sync(&ofdpa->fdb_cleanup_timer);
spin_lock_irqsave(&ofdpa->flow_tbl_lock, flags);
hash_for_each_safe(ofdpa->flow_tbl, bkt, tmp, flow_entry, entry)
spin_unlock_irqrestore(&ofdpa->flow_tbl_lock, flags);
spin_lock_irqsave(&ofdpa->group_tbl_lock, flags);
hash_for_each_safe(ofdpa->group_tbl, bkt, tmp, group_entry, entry)
spin_unlock_irqrestore(&ofdpa->group_tbl_lock, flags);
spin_lock_irqsave(&ofdpa->fdb_tbl_lock, flags);
hash_for_each_safe(ofdpa->fdb_tbl, bkt, tmp, fdb_entry, entry)
spin_unlock_irqrestore(&ofdpa->fdb_tbl_lock, flags);
spin_lock_irqsave(&ofdpa->internal_vlan_tbl_lock, flags);
hash_for_each_safe(ofdpa->internal_vlan_tbl, bkt,
spin_unlock_irqrestore(&ofdpa->internal_vlan_tbl_lock, flags);
spin_lock_irqsave(&ofdpa->neigh_tbl_lock, flags);
hash_for_each_safe(ofdpa->neigh_tbl, bkt, tmp, neigh_entry, entry)
spin_unlock_irqrestore(&ofdpa->neigh_tbl_lock, flags);
ofdpa_port->ofdpa = rocker_port->rocker->wpriv;
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
if (ofdpa_port->ageing_time < ofdpa->ageing_time)
ofdpa->ageing_time = ofdpa_port->ageing_time;
mod_timer(&ofdpa_port->ofdpa->fdb_cleanup_timer, jiffies);
struct ofdpa *ofdpa = rocker->wpriv;
if (ofdpa->fib_aborted)
struct ofdpa *ofdpa = rocker->wpriv;
if (ofdpa->fib_aborted)
struct ofdpa *ofdpa = rocker->wpriv;
if (ofdpa->fib_aborted)
spin_lock_irqsave(&ofdpa->flow_tbl_lock, flags);
hash_for_each_safe(ofdpa->flow_tbl, bkt, tmp, flow_entry, entry) {
spin_unlock_irqrestore(&ofdpa->flow_tbl_lock, flags);
ofdpa->fib_aborted = true;
.priv_size = sizeof(struct ofdpa),
ofdpa_flow_tbl_find(const struct ofdpa *ofdpa,
hash_for_each_possible(ofdpa->flow_tbl, found,
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->flow_tbl_lock, lock_flags);
found = ofdpa_flow_tbl_find(ofdpa, match);
found->cookie = ofdpa->flow_tbl_next_cookie++;
hash_add(ofdpa->flow_tbl, &found->entry, found->key_crc32);
spin_unlock_irqrestore(&ofdpa->flow_tbl_lock, lock_flags);
struct ofdpa *ofdpa = ofdpa_port->ofdpa;
spin_lock_irqsave(&ofdpa->flow_tbl_lock, lock_flags);
found = ofdpa_flow_tbl_find(ofdpa, match);
spin_unlock_irqrestore(&ofdpa->flow_tbl_lock, lock_flags);