Lines Matching refs:neigh_entry

1971 			struct mlxsw_sp_neigh_entry *neigh_entry)  in mlxsw_sp_rif_neigh_next()  argument
1973 if (!neigh_entry) { in mlxsw_sp_rif_neigh_next()
1978 typeof(*neigh_entry), in mlxsw_sp_rif_neigh_next()
1981 if (list_is_last(&neigh_entry->rif_list_node, &rif->neigh_list)) in mlxsw_sp_rif_neigh_next()
1983 return list_next_entry(neigh_entry, rif_list_node); in mlxsw_sp_rif_neigh_next()
1986 int mlxsw_sp_neigh_entry_type(struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_entry_type() argument
1988 return neigh_entry->key.n->tbl->family; in mlxsw_sp_neigh_entry_type()
1992 mlxsw_sp_neigh_entry_ha(struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_entry_ha() argument
1994 return neigh_entry->ha; in mlxsw_sp_neigh_entry_ha()
1997 u32 mlxsw_sp_neigh4_entry_dip(struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh4_entry_dip() argument
2001 n = neigh_entry->key.n; in mlxsw_sp_neigh4_entry_dip()
2006 mlxsw_sp_neigh6_entry_dip(struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh6_entry_dip() argument
2010 n = neigh_entry->key.n; in mlxsw_sp_neigh6_entry_dip()
2015 struct mlxsw_sp_neigh_entry *neigh_entry, in mlxsw_sp_neigh_counter_get() argument
2018 if (!neigh_entry->counter_valid) in mlxsw_sp_neigh_counter_get()
2021 return mlxsw_sp_flow_counter_get(mlxsw_sp, neigh_entry->counter_index, in mlxsw_sp_neigh_counter_get()
2029 struct mlxsw_sp_neigh_entry *neigh_entry; in mlxsw_sp_neigh_entry_alloc() local
2031 neigh_entry = kzalloc(sizeof(*neigh_entry), GFP_KERNEL); in mlxsw_sp_neigh_entry_alloc()
2032 if (!neigh_entry) in mlxsw_sp_neigh_entry_alloc()
2035 neigh_entry->key.n = n; in mlxsw_sp_neigh_entry_alloc()
2036 neigh_entry->rif = rif; in mlxsw_sp_neigh_entry_alloc()
2037 INIT_LIST_HEAD(&neigh_entry->nexthop_list); in mlxsw_sp_neigh_entry_alloc()
2039 return neigh_entry; in mlxsw_sp_neigh_entry_alloc()
2042 static void mlxsw_sp_neigh_entry_free(struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_entry_free() argument
2044 kfree(neigh_entry); in mlxsw_sp_neigh_entry_free()
2049 struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_entry_insert() argument
2052 &neigh_entry->ht_node, in mlxsw_sp_neigh_entry_insert()
2058 struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_entry_remove() argument
2061 &neigh_entry->ht_node, in mlxsw_sp_neigh_entry_remove()
2067 struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_counter_should_alloc() argument
2072 switch (mlxsw_sp_neigh_entry_type(neigh_entry)) { in mlxsw_sp_neigh_counter_should_alloc()
2090 struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_counter_alloc() argument
2092 if (!mlxsw_sp_neigh_counter_should_alloc(mlxsw_sp, neigh_entry)) in mlxsw_sp_neigh_counter_alloc()
2095 if (mlxsw_sp_flow_counter_alloc(mlxsw_sp, &neigh_entry->counter_index)) in mlxsw_sp_neigh_counter_alloc()
2098 neigh_entry->counter_valid = true; in mlxsw_sp_neigh_counter_alloc()
2103 struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_counter_free() argument
2105 if (!neigh_entry->counter_valid) in mlxsw_sp_neigh_counter_free()
2108 neigh_entry->counter_index); in mlxsw_sp_neigh_counter_free()
2109 neigh_entry->counter_valid = false; in mlxsw_sp_neigh_counter_free()
2115 struct mlxsw_sp_neigh_entry *neigh_entry; in mlxsw_sp_neigh_entry_create() local
2123 neigh_entry = mlxsw_sp_neigh_entry_alloc(mlxsw_sp, n, rif->rif_index); in mlxsw_sp_neigh_entry_create()
2124 if (!neigh_entry) in mlxsw_sp_neigh_entry_create()
2127 err = mlxsw_sp_neigh_entry_insert(mlxsw_sp, neigh_entry); in mlxsw_sp_neigh_entry_create()
2131 mlxsw_sp_neigh_counter_alloc(mlxsw_sp, neigh_entry); in mlxsw_sp_neigh_entry_create()
2132 list_add(&neigh_entry->rif_list_node, &rif->neigh_list); in mlxsw_sp_neigh_entry_create()
2134 return neigh_entry; in mlxsw_sp_neigh_entry_create()
2137 mlxsw_sp_neigh_entry_free(neigh_entry); in mlxsw_sp_neigh_entry_create()
2143 struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_entry_destroy() argument
2145 list_del(&neigh_entry->rif_list_node); in mlxsw_sp_neigh_entry_destroy()
2146 mlxsw_sp_neigh_counter_free(mlxsw_sp, neigh_entry); in mlxsw_sp_neigh_entry_destroy()
2147 mlxsw_sp_neigh_entry_remove(mlxsw_sp, neigh_entry); in mlxsw_sp_neigh_entry_destroy()
2148 mlxsw_sp_neigh_entry_free(neigh_entry); in mlxsw_sp_neigh_entry_destroy()
2358 struct mlxsw_sp_neigh_entry *neigh_entry; in mlxsw_sp_router_neighs_update_nh() local
2361 list_for_each_entry(neigh_entry, &mlxsw_sp->router->nexthop_neighs_list, in mlxsw_sp_router_neighs_update_nh()
2366 neigh_event_send(neigh_entry->key.n, NULL); in mlxsw_sp_router_neighs_update_nh()
2397 struct mlxsw_sp_neigh_entry *neigh_entry; in mlxsw_sp_router_probe_unresolved_nexthops() local
2409 list_for_each_entry(neigh_entry, &router->nexthop_neighs_list, in mlxsw_sp_router_probe_unresolved_nexthops()
2411 if (!neigh_entry->connected) in mlxsw_sp_router_probe_unresolved_nexthops()
2412 neigh_event_send(neigh_entry->key.n, NULL); in mlxsw_sp_router_probe_unresolved_nexthops()
2421 struct mlxsw_sp_neigh_entry *neigh_entry,
2432 struct mlxsw_sp_neigh_entry *neigh_entry, in mlxsw_sp_router_neigh_entry_op4() argument
2435 struct neighbour *n = neigh_entry->key.n; in mlxsw_sp_router_neigh_entry_op4()
2439 mlxsw_reg_rauht_pack4(rauht_pl, op, neigh_entry->rif, neigh_entry->ha, in mlxsw_sp_router_neigh_entry_op4()
2441 if (neigh_entry->counter_valid) in mlxsw_sp_router_neigh_entry_op4()
2443 neigh_entry->counter_index); in mlxsw_sp_router_neigh_entry_op4()
2449 struct mlxsw_sp_neigh_entry *neigh_entry, in mlxsw_sp_router_neigh_entry_op6() argument
2452 struct neighbour *n = neigh_entry->key.n; in mlxsw_sp_router_neigh_entry_op6()
2456 mlxsw_reg_rauht_pack6(rauht_pl, op, neigh_entry->rif, neigh_entry->ha, in mlxsw_sp_router_neigh_entry_op6()
2458 if (neigh_entry->counter_valid) in mlxsw_sp_router_neigh_entry_op6()
2460 neigh_entry->counter_index); in mlxsw_sp_router_neigh_entry_op6()
2464 bool mlxsw_sp_neigh_ipv6_ignore(struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_neigh_ipv6_ignore() argument
2466 struct neighbour *n = neigh_entry->key.n; in mlxsw_sp_neigh_ipv6_ignore()
2480 struct mlxsw_sp_neigh_entry *neigh_entry, in mlxsw_sp_neigh_entry_update() argument
2486 if (!adding && !neigh_entry->connected) in mlxsw_sp_neigh_entry_update()
2488 neigh_entry->connected = adding; in mlxsw_sp_neigh_entry_update()
2489 if (neigh_entry->key.n->tbl->family == AF_INET) { in mlxsw_sp_neigh_entry_update()
2490 err = mlxsw_sp_router_neigh_entry_op4(mlxsw_sp, neigh_entry, in mlxsw_sp_neigh_entry_update()
2494 } else if (neigh_entry->key.n->tbl->family == AF_INET6) { in mlxsw_sp_neigh_entry_update()
2495 if (mlxsw_sp_neigh_ipv6_ignore(neigh_entry)) in mlxsw_sp_neigh_entry_update()
2497 err = mlxsw_sp_router_neigh_entry_op6(mlxsw_sp, neigh_entry, in mlxsw_sp_neigh_entry_update()
2507 neigh_entry->key.n->flags |= NTF_OFFLOADED; in mlxsw_sp_neigh_entry_update()
2509 neigh_entry->key.n->flags &= ~NTF_OFFLOADED; in mlxsw_sp_neigh_entry_update()
2514 struct mlxsw_sp_neigh_entry *neigh_entry, in mlxsw_sp_neigh_entry_counter_update() argument
2518 mlxsw_sp_neigh_counter_alloc(mlxsw_sp, neigh_entry); in mlxsw_sp_neigh_entry_counter_update()
2520 mlxsw_sp_neigh_counter_free(mlxsw_sp, neigh_entry); in mlxsw_sp_neigh_entry_counter_update()
2521 mlxsw_sp_neigh_entry_update(mlxsw_sp, neigh_entry, true); in mlxsw_sp_neigh_entry_counter_update()
2535 struct mlxsw_sp_neigh_entry *neigh_entry; in mlxsw_sp_router_neigh_event_work() local
2555 neigh_entry = mlxsw_sp_neigh_entry_lookup(mlxsw_sp, n); in mlxsw_sp_router_neigh_event_work()
2556 if (!entry_connected && !neigh_entry) in mlxsw_sp_router_neigh_event_work()
2558 if (!neigh_entry) { in mlxsw_sp_router_neigh_event_work()
2559 neigh_entry = mlxsw_sp_neigh_entry_create(mlxsw_sp, n); in mlxsw_sp_router_neigh_event_work()
2560 if (IS_ERR(neigh_entry)) in mlxsw_sp_router_neigh_event_work()
2564 memcpy(neigh_entry->ha, ha, ETH_ALEN); in mlxsw_sp_router_neigh_event_work()
2565 mlxsw_sp_neigh_entry_update(mlxsw_sp, neigh_entry, entry_connected); in mlxsw_sp_router_neigh_event_work()
2566 mlxsw_sp_nexthop_neigh_update(mlxsw_sp, neigh_entry, !entry_connected, in mlxsw_sp_router_neigh_event_work()
2569 if (!neigh_entry->connected && list_empty(&neigh_entry->nexthop_list)) in mlxsw_sp_router_neigh_event_work()
2570 mlxsw_sp_neigh_entry_destroy(mlxsw_sp, neigh_entry); in mlxsw_sp_router_neigh_event_work()
2730 struct mlxsw_sp_neigh_entry *neigh_entry, *tmp; in mlxsw_sp_neigh_rif_gone_sync() local
2732 list_for_each_entry_safe(neigh_entry, tmp, &rif->neigh_list, in mlxsw_sp_neigh_rif_gone_sync()
2734 mlxsw_sp_neigh_entry_update(mlxsw_sp, neigh_entry, false); in mlxsw_sp_neigh_rif_gone_sync()
2735 mlxsw_sp_neigh_entry_destroy(mlxsw_sp, neigh_entry); in mlxsw_sp_neigh_rif_gone_sync()
2774 struct mlxsw_sp_neigh_entry *neigh_entry; member
2855 return nh->neigh_entry->ha; in mlxsw_sp_nexthop_ha()
3171 struct mlxsw_sp_neigh_entry *neigh_entry = nh->neigh_entry; in __mlxsw_sp_nexthop_update() local
3176 adj_index, neigh_entry->rif); in __mlxsw_sp_nexthop_update()
3177 mlxsw_reg_ratr_eth_entry_pack(ratr_pl, neigh_entry->ha); in __mlxsw_sp_nexthop_update()
3581 struct mlxsw_sp_neigh_entry *neigh_entry) in mlxsw_sp_nexthop_dead_neigh_replace() argument
3583 struct neighbour *n, *old_n = neigh_entry->key.n; in mlxsw_sp_nexthop_dead_neigh_replace()
3589 nh = list_first_entry(&neigh_entry->nexthop_list, in mlxsw_sp_nexthop_dead_neigh_replace()
3601 mlxsw_sp_neigh_entry_remove(mlxsw_sp, neigh_entry); in mlxsw_sp_nexthop_dead_neigh_replace()
3602 neigh_entry->key.n = n; in mlxsw_sp_nexthop_dead_neigh_replace()
3603 err = mlxsw_sp_neigh_entry_insert(mlxsw_sp, neigh_entry); in mlxsw_sp_nexthop_dead_neigh_replace()
3613 list_for_each_entry(nh, &neigh_entry->nexthop_list, in mlxsw_sp_nexthop_dead_neigh_replace()
3626 neigh_entry->key.n = old_n; in mlxsw_sp_nexthop_dead_neigh_replace()
3627 mlxsw_sp_neigh_entry_insert(mlxsw_sp, neigh_entry); in mlxsw_sp_nexthop_dead_neigh_replace()
3634 struct mlxsw_sp_neigh_entry *neigh_entry, in mlxsw_sp_nexthop_neigh_update() argument
3639 if (list_empty(&neigh_entry->nexthop_list)) in mlxsw_sp_nexthop_neigh_update()
3646 neigh_entry); in mlxsw_sp_nexthop_neigh_update()
3652 list_for_each_entry(nh, &neigh_entry->nexthop_list, in mlxsw_sp_nexthop_neigh_update()
3681 struct mlxsw_sp_neigh_entry *neigh_entry; in mlxsw_sp_nexthop_neigh_init() local
3686 if (!nh->nh_grp->gateway || nh->neigh_entry) in mlxsw_sp_nexthop_neigh_init()
3702 neigh_entry = mlxsw_sp_neigh_entry_lookup(mlxsw_sp, n); in mlxsw_sp_nexthop_neigh_init()
3703 if (!neigh_entry) { in mlxsw_sp_nexthop_neigh_init()
3704 neigh_entry = mlxsw_sp_neigh_entry_create(mlxsw_sp, n); in mlxsw_sp_nexthop_neigh_init()
3705 if (IS_ERR(neigh_entry)) { in mlxsw_sp_nexthop_neigh_init()
3714 if (list_empty(&neigh_entry->nexthop_list)) in mlxsw_sp_nexthop_neigh_init()
3715 list_add_tail(&neigh_entry->nexthop_neighs_list_node, in mlxsw_sp_nexthop_neigh_init()
3718 nh->neigh_entry = neigh_entry; in mlxsw_sp_nexthop_neigh_init()
3719 list_add_tail(&nh->neigh_list_node, &neigh_entry->nexthop_list); in mlxsw_sp_nexthop_neigh_init()
3736 struct mlxsw_sp_neigh_entry *neigh_entry = nh->neigh_entry; in mlxsw_sp_nexthop_neigh_fini() local
3739 if (!neigh_entry) in mlxsw_sp_nexthop_neigh_fini()
3741 n = neigh_entry->key.n; in mlxsw_sp_nexthop_neigh_fini()
3745 nh->neigh_entry = NULL; in mlxsw_sp_nexthop_neigh_fini()
3750 if (list_empty(&neigh_entry->nexthop_list)) in mlxsw_sp_nexthop_neigh_fini()
3751 list_del(&neigh_entry->nexthop_neighs_list_node); in mlxsw_sp_nexthop_neigh_fini()
3753 if (!neigh_entry->connected && list_empty(&neigh_entry->nexthop_list)) in mlxsw_sp_nexthop_neigh_fini()
3754 mlxsw_sp_neigh_entry_destroy(mlxsw_sp, neigh_entry); in mlxsw_sp_nexthop_neigh_fini()