]>
git.proxmox.com Git - mirror_frr.git/blob - pimd/pim_nht.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Copyright (C) 2017 Cumulus Networks, Inc.
19 /* PIM nexthop cache value structure. */
20 struct pim_nexthop_cache
{
22 /* IGP route's metric. */
25 /* Nexthop number and nexthop linked list. */
27 struct nexthop
*nexthop
;
30 #define PIM_NEXTHOP_VALID (1 << 0)
31 #define PIM_NEXTHOP_ANSWER_RECEIVED (1 << 1)
34 struct hash
*upstream_hash
;
36 /* bsr_count won't currently go above 1 as we only have global_scope,
37 * but if anyone adds scope support multiple scopes may NHT-track the
43 struct pnc_hash_walk_data
{
44 struct pim_instance
*pim
;
45 struct interface
*ifp
;
48 int pim_parse_nexthop_update(ZAPI_CALLBACK_ARGS
);
49 int pim_find_or_track_nexthop(struct pim_instance
*pim
, pim_addr addr
,
50 struct pim_upstream
*up
, struct rp_info
*rp
,
51 struct pim_nexthop_cache
*out_pnc
);
52 void pim_delete_tracked_nexthop(struct pim_instance
*pim
, pim_addr addr
,
53 struct pim_upstream
*up
, struct rp_info
*rp
);
54 struct pim_nexthop_cache
*pim_nexthop_cache_find(struct pim_instance
*pim
,
56 uint32_t pim_compute_ecmp_hash(struct prefix
*src
, struct prefix
*grp
);
57 int pim_ecmp_nexthop_lookup(struct pim_instance
*pim
,
58 struct pim_nexthop
*nexthop
, pim_addr src
,
59 struct prefix
*grp
, int neighbor_needed
);
60 void pim_sendmsg_zebra_rnh(struct pim_instance
*pim
, struct zclient
*zclient
,
61 struct pim_nexthop_cache
*pnc
, int command
);
62 int pim_ecmp_fib_lookup_if_vif_index(struct pim_instance
*pim
, pim_addr src
,
64 void pim_rp_nexthop_del(struct rp_info
*rp_info
);
66 /* for RPF check on BSM message receipt */
67 void pim_nht_bsr_add(struct pim_instance
*pim
, pim_addr bsr_addr
);
68 void pim_nht_bsr_del(struct pim_instance
*pim
, pim_addr bsr_addr
);
69 /* RPF(bsr_addr) == src_ip%src_ifp? */
70 bool pim_nht_bsr_rpf_check(struct pim_instance
*pim
, pim_addr bsr_addr
,
71 struct interface
*src_ifp
, pim_addr src_ip
);
72 void pim_upstream_nh_if_update(struct pim_instance
*pim
, struct interface
*ifp
);