Lines Matching refs:fib_event
7425 struct mlxsw_sp_fib_event *fib_event) in mlxsw_sp_router_fib4_event_process() argument
7431 switch (fib_event->event) { in mlxsw_sp_router_fib4_event_process()
7433 err = mlxsw_sp_router_fib4_replace(mlxsw_sp, op_ctx, &fib_event->fen_info); in mlxsw_sp_router_fib4_event_process()
7438 &fib_event->fen_info); in mlxsw_sp_router_fib4_event_process()
7440 fib_info_put(fib_event->fen_info.fi); in mlxsw_sp_router_fib4_event_process()
7443 err = mlxsw_sp_router_fib4_del(mlxsw_sp, op_ctx, &fib_event->fen_info); in mlxsw_sp_router_fib4_event_process()
7446 fib_info_put(fib_event->fen_info.fi); in mlxsw_sp_router_fib4_event_process()
7450 mlxsw_sp_nexthop4_event(mlxsw_sp, fib_event->event, fib_event->fnh_info.fib_nh); in mlxsw_sp_router_fib4_event_process()
7451 fib_info_put(fib_event->fnh_info.fib_nh->nh_parent); in mlxsw_sp_router_fib4_event_process()
7458 struct mlxsw_sp_fib_event *fib_event) in mlxsw_sp_router_fib6_event_process() argument
7460 struct mlxsw_sp_fib6_event *fib6_event = &fib_event->fib6_event; in mlxsw_sp_router_fib6_event_process()
7465 switch (fib_event->event) { in mlxsw_sp_router_fib6_event_process()
7467 err = mlxsw_sp_router_fib6_replace(mlxsw_sp, op_ctx, fib_event->fib6_event.rt_arr, in mlxsw_sp_router_fib6_event_process()
7468 fib_event->fib6_event.nrt6); in mlxsw_sp_router_fib6_event_process()
7476 mlxsw_sp_router_fib6_event_fini(&fib_event->fib6_event); in mlxsw_sp_router_fib6_event_process()
7479 err = mlxsw_sp_router_fib6_append(mlxsw_sp, op_ctx, fib_event->fib6_event.rt_arr, in mlxsw_sp_router_fib6_event_process()
7480 fib_event->fib6_event.nrt6); in mlxsw_sp_router_fib6_event_process()
7488 mlxsw_sp_router_fib6_event_fini(&fib_event->fib6_event); in mlxsw_sp_router_fib6_event_process()
7491 err = mlxsw_sp_router_fib6_del(mlxsw_sp, op_ctx, fib_event->fib6_event.rt_arr, in mlxsw_sp_router_fib6_event_process()
7492 fib_event->fib6_event.nrt6); in mlxsw_sp_router_fib6_event_process()
7495 mlxsw_sp_router_fib6_event_fini(&fib_event->fib6_event); in mlxsw_sp_router_fib6_event_process()
7501 struct mlxsw_sp_fib_event *fib_event) in mlxsw_sp_router_fibmr_event_process() argument
7508 switch (fib_event->event) { in mlxsw_sp_router_fibmr_event_process()
7511 replace = fib_event->event == FIB_EVENT_ENTRY_REPLACE; in mlxsw_sp_router_fibmr_event_process()
7513 err = mlxsw_sp_router_fibmr_add(mlxsw_sp, &fib_event->men_info, replace); in mlxsw_sp_router_fibmr_event_process()
7516 mr_cache_put(fib_event->men_info.mfc); in mlxsw_sp_router_fibmr_event_process()
7519 mlxsw_sp_router_fibmr_del(mlxsw_sp, &fib_event->men_info); in mlxsw_sp_router_fibmr_event_process()
7520 mr_cache_put(fib_event->men_info.mfc); in mlxsw_sp_router_fibmr_event_process()
7524 &fib_event->ven_info); in mlxsw_sp_router_fibmr_event_process()
7527 dev_put(fib_event->ven_info.dev); in mlxsw_sp_router_fibmr_event_process()
7530 mlxsw_sp_router_fibmr_vif_del(mlxsw_sp, &fib_event->ven_info); in mlxsw_sp_router_fibmr_event_process()
7531 dev_put(fib_event->ven_info.dev); in mlxsw_sp_router_fibmr_event_process()
7544 struct mlxsw_sp_fib_event *fib_event; in mlxsw_sp_router_fib_event_work() local
7558 list_for_each_entry_safe(fib_event, next_fib_event, in mlxsw_sp_router_fib_event_work()
7565 op_ctx->bulk_ok = !list_is_last(&fib_event->list, &fib_event_queue) && in mlxsw_sp_router_fib_event_work()
7566 fib_event->family == next_fib_event->family && in mlxsw_sp_router_fib_event_work()
7567 fib_event->event == next_fib_event->event; in mlxsw_sp_router_fib_event_work()
7568 op_ctx->event = fib_event->event; in mlxsw_sp_router_fib_event_work()
7575 if (fib_event->family != last_family) in mlxsw_sp_router_fib_event_work()
7578 switch (fib_event->family) { in mlxsw_sp_router_fib_event_work()
7581 fib_event); in mlxsw_sp_router_fib_event_work()
7585 fib_event); in mlxsw_sp_router_fib_event_work()
7595 fib_event); in mlxsw_sp_router_fib_event_work()
7601 last_family = fib_event->family; in mlxsw_sp_router_fib_event_work()
7602 kfree(fib_event); in mlxsw_sp_router_fib_event_work()
7609 static void mlxsw_sp_router_fib4_event(struct mlxsw_sp_fib_event *fib_event, in mlxsw_sp_router_fib4_event() argument
7615 switch (fib_event->event) { in mlxsw_sp_router_fib4_event()
7620 fib_event->fen_info = *fen_info; in mlxsw_sp_router_fib4_event()
7624 fib_info_hold(fib_event->fen_info.fi); in mlxsw_sp_router_fib4_event()
7630 fib_event->fnh_info = *fnh_info; in mlxsw_sp_router_fib4_event()
7631 fib_info_hold(fib_event->fnh_info.fib_nh->nh_parent); in mlxsw_sp_router_fib4_event()
7636 static int mlxsw_sp_router_fib6_event(struct mlxsw_sp_fib_event *fib_event, in mlxsw_sp_router_fib6_event() argument
7642 switch (fib_event->event) { in mlxsw_sp_router_fib6_event()
7648 err = mlxsw_sp_router_fib6_event_init(&fib_event->fib6_event, in mlxsw_sp_router_fib6_event()
7659 mlxsw_sp_router_fibmr_event(struct mlxsw_sp_fib_event *fib_event, in mlxsw_sp_router_fibmr_event() argument
7662 switch (fib_event->event) { in mlxsw_sp_router_fibmr_event()
7666 memcpy(&fib_event->men_info, info, sizeof(fib_event->men_info)); in mlxsw_sp_router_fibmr_event()
7667 mr_cache_hold(fib_event->men_info.mfc); in mlxsw_sp_router_fibmr_event()
7671 memcpy(&fib_event->ven_info, info, sizeof(fib_event->ven_info)); in mlxsw_sp_router_fibmr_event()
7672 dev_hold(fib_event->ven_info.dev); in mlxsw_sp_router_fibmr_event()
7726 struct mlxsw_sp_fib_event *fib_event; in mlxsw_sp_router_fib_event() local
7758 fib_event = kzalloc(sizeof(*fib_event), GFP_ATOMIC); in mlxsw_sp_router_fib_event()
7759 if (!fib_event) in mlxsw_sp_router_fib_event()
7762 fib_event->mlxsw_sp = router->mlxsw_sp; in mlxsw_sp_router_fib_event()
7763 fib_event->event = event; in mlxsw_sp_router_fib_event()
7764 fib_event->family = info->family; in mlxsw_sp_router_fib_event()
7768 mlxsw_sp_router_fib4_event(fib_event, info); in mlxsw_sp_router_fib_event()
7771 err = mlxsw_sp_router_fib6_event(fib_event, info); in mlxsw_sp_router_fib_event()
7777 mlxsw_sp_router_fibmr_event(fib_event, info); in mlxsw_sp_router_fib_event()
7783 list_add_tail(&fib_event->list, &router->fib_event_queue); in mlxsw_sp_router_fib_event()
7790 kfree(fib_event); in mlxsw_sp_router_fib_event()