1 /* 2 * PIM for FRR - J/P Aggregation 3 * Copyright (C) 2017 Cumulus Networks, Inc. 4 * Donald Sharp 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, but 12 * WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License along 17 * with this program; see the file COPYING; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 #ifndef __PIM_JP_AGG_H__ 21 #define __PIM_JP_AGG_H__ 22 23 struct pim_jp_sources { 24 struct pim_upstream *up; 25 int is_join; 26 }; 27 28 struct pim_jp_agg_group { 29 struct in_addr group; 30 struct list *sources; 31 }; 32 33 void pim_jp_agg_upstream_verification(struct pim_upstream *up, bool ignore); 34 int pim_jp_agg_is_in_list(struct list *group, struct pim_upstream *up); 35 36 void pim_jp_agg_group_list_free(struct pim_jp_agg_group *jag); 37 int pim_jp_agg_group_list_cmp(void *arg1, void *arg2); 38 39 void pim_jp_agg_clear_group(struct list *group); 40 void pim_jp_agg_remove_group(struct list *group, struct pim_upstream *up, 41 struct pim_neighbor *nbr); 42 43 void pim_jp_agg_add_group(struct list *group, struct pim_upstream *up, 44 bool is_join, struct pim_neighbor *nbr); 45 46 void pim_jp_agg_switch_interface(struct pim_rpf *orpf, struct pim_rpf *nrpf, 47 struct pim_upstream *up); 48 49 void pim_jp_agg_single_upstream_send(struct pim_rpf *rpf, 50 struct pim_upstream *up, bool is_join); 51 #endif 52