]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_nht.h
Merge pull request #5430 from taruta811/build-docker-centos
[mirror_frr.git] / pimd / pim_nht.h
index 796fbf9731943f2ca58278527ba516341455d630..12dbf167d1fc044c53731ef389b68455d087bf30 100644 (file)
@@ -41,31 +41,40 @@ struct pim_nexthop_cache {
        int64_t last_update;
        uint16_t flags;
 #define PIM_NEXTHOP_VALID             (1 << 0)
+#define PIM_NEXTHOP_ANSWER_RECEIVED   (1 << 1)
 
        struct list *rp_list;
        struct hash *upstream_hash;
+       /* Ideally this has to be list of scope zone. But for now we can just
+        * have as a bool variable to say bsr_tracking.
+        * Later this variable can be changed as a list of scope zones for
+        * tracking same bsr for multiple scope zones.
+        */
+       bool bsr_tracking;
 };
 
-int pim_parse_nexthop_update(int command, struct zclient *zclient,
-                            zebra_size_t length, vrf_id_t vrf_id);
+int pim_parse_nexthop_update(ZAPI_CALLBACK_ARGS);
 int pim_find_or_track_nexthop(struct pim_instance *pim, struct prefix *addr,
                              struct pim_upstream *up, struct rp_info *rp,
+                             bool bsr_track_needed,
                              struct pim_nexthop_cache *out_pnc);
 void pim_delete_tracked_nexthop(struct pim_instance *pim, struct prefix *addr,
-                               struct pim_upstream *up, struct rp_info *rp);
+                               struct pim_upstream *up, struct rp_info *rp,
+                               bool del_bsr_tracking);
 struct pim_nexthop_cache *pim_nexthop_cache_find(struct pim_instance *pim,
                                                 struct pim_rpf *rpf);
 uint32_t pim_compute_ecmp_hash(struct prefix *src, struct prefix *grp);
-int pim_ecmp_nexthop_search(struct pim_instance *pim,
-                           struct pim_nexthop_cache *pnc,
-                           struct pim_nexthop *nexthop, struct prefix *src,
-                           struct prefix *grp, int neighbor_needed);
 int pim_ecmp_nexthop_lookup(struct pim_instance *pim,
                            struct pim_nexthop *nexthop, struct prefix *src,
                            struct prefix *grp, int neighbor_needed);
 void pim_sendmsg_zebra_rnh(struct pim_instance *pim, struct zclient *zclient,
                           struct pim_nexthop_cache *pnc, int command);
-void pim_resolve_upstream_nh(struct pim_instance *pim, struct prefix *nht_p);
 int pim_ecmp_fib_lookup_if_vif_index(struct pim_instance *pim,
                                     struct prefix *src, struct prefix *grp);
+void pim_rp_nexthop_del(struct rp_info *rp_info);
+bool pim_nexthop_match(struct pim_instance *pim, struct in_addr addr,
+                      struct in_addr ip_src);
+bool pim_nexthop_match_nht_cache(struct pim_instance *pim, struct in_addr addr,
+                                struct in_addr ip_src);
+
 #endif