11 #ifndef __GMPR_PRIVATE_H__
12 #define __GMPR_PRIVATE_H__
100 #define GMP_QUERY_SMEAR_IVL (30*60*MSECS_PER_SEC)
101 #define GMP_QUERY_QUICK_SMEAR_IVL (10*MSECS_PER_SEC)
103 #define GMPR_INSTANCE_MAGIC 0x52696E73
197 rintf_global_patnode);
199 #define GMPR_QUERY_IVL_DEFAULT 125000
200 #define GMPR_QUERY_RESP_IVL_DEFAULT 10000
201 #define GMPR_INIT_FIRST_QUERY_IVL 100
202 #define GMPR_INIT_LATER_QUERY_IVL 2000
203 #define GMPR_LMQI_DEFAULT 1000
308 rgroup_intf_patnode);
346 rgroup_addr_oif_thread);
400 rogroup_intf_patnode);
402 rogroup_global_thread);
461 #define GMPR_CLIENT_MAGIC 0x52636C69
532 static inline boolean
619 notify_block -= ordinal;
623 byte_ptr = (uint8_t *) notify_block;
624 byte_ptr -= offsetof(
gmpr_ogroup, rogroup_client_thread);
656 notify_block -= ordinal;
660 byte_ptr = (uint8_t *) notify_block;
692 notify_block -= ordinal;
696 byte_ptr = (uint8_t *) notify_block;
729 notify_block -= ordinal;
733 byte_ptr = (uint8_t *) notify_block;
747 static inline boolean
764 static inline boolean
801 static inline boolean
818 static inline boolean
836 static inline boolean
853 static inline boolean
900 static inline boolean
935 static inline boolean
969 static inline boolean
1022 void *inst_context);
1052 boolean just_delink);
1096 uint8_t *group_addr);
1101 const uint8_t *source);
task_thread rgroup_host_addr_head
gmp_version rgroup_compatibility_mode
uint32_t rintf_other_querier_ivl
gmpr_client_notification * gmpr_client_get_notification(gmpr_client *client, gmpr_client_notification *last_notification)
void gmpr_trigger_one_query(gmpr_intf *intf)
task_thread rclient_host_notif_head
gmpx_block_tag gmpr_host_notification_tag
boolean rintf_suppress_gs_query
boolean rinst_smear_timer_accelerated
gmp_addr_string rintf_querier_addr
task_thread rinst_startup_intf_thread
gmpx_timer * rgroup_query_timer
gmp_addr_string rgroup_last_reporter
gmpx_timer * rhgroup_timer
gmpx_patnode rintf_inst_patnode
static gmp_addr_list * gmpr_group_source_list(gmpr_group *group)
#define GMPX_MAX_RTR_CLIENTS
void gmpr_destroy_instance_clients(gmpr_instance *instance)
ordinal_handle rinst_ord_handle
gmpx_patroot * rinst_global_state_root
void gmpr_evaluate_group_version(gmpr_group *group)
gmpx_patroot * rintf_group_root
#define EMBEDDED_STRUCT_TO_STRUCT(procname, outerstruct, innerstruct, field)
boolean gmpr_notifications_active(gmpr_notify_block *notify_block)
gmpx_patnode rintf_global_patnode
void gmpr_enqueue_group_xmit(gmpr_group *group)
gmpx_timer * rintf_other_querier_present
void gmpr_init_group_addr_entry(gmpr_group *group, gmp_addr_list_entry *addr_entry)
gmpx_timer * rintf_query_timer
boolean gmpr_group_forwards_all_sources(gmpr_ogroup *group)
void gmpr_destroy_instance_intfs(gmpr_instance *instance)
struct gmpr_global_group_ gmpr_global_group
uint32_t rintf_robustness
task_thread rintf_xmit_head
static boolean gmp_addr_in_list(gmp_addr_list *addr_list, ordinal_t ordinal)
gmpx_block_tag gmpr_global_group_tag
static gmp_filter_mode gmpr_group_addr_mode(gmpr_ogroup_addr_entry *group_addr)
struct gmpr_intf_ gmpr_intf
void gmpr_flush_host_notifications_client(gmpr_client *client)
gmpr_notify_block rhgroup_notify[GMPX_MAX_RTR_CLIENTS]
gmp_addr_string rgroup_addr
void gmpr_destroy_intf_groups(gmpr_intf *intf)
void gmpr_group_timer_expiry(gmpx_timer *timer, void *context)
uint32_t rinst_min_max_resp
struct gmpr_ogroup_ gmpr_ogroup
void gmpr_instance_destroy(gmpr_instance *instance)
void gmpr_group_query_timer_expiry(gmpx_timer *timer, void *context)
gmpx_patroot * rinst_intfs
gmpr_intf * gmpr_intf_lookup_global(gmp_proto proto, gmpx_intf_id intf_id)
gmpx_block_tag gmpr_instance_tag
gmpx_block_tag gmpr_intf_group_tag
int gmpr_intf_set_params(gmpr_instance *instance, gmpx_intf_id intf_id, gmpr_intf_params *params)
gmp_addr_list rgroup_src_addr_stopped
void gmpr_update_querier(gmpr_intf *intf, gmp_addr_string *addr, boolean querier)
task_thread gmpr_notify_thread
gmpr_group * gmpr_first_group_xmit(gmpr_intf *intf)
void gmpr_client_enqueue_all_groups(gmpr_client *client, boolean flush)
gmp_addr_list rogroup_incl_src_addr
gmp_addr_string rgroup_addr_last_reporter
#define GMPX_PATNODE_TO_STRUCT
task_thread rgroup_xmit_thread
#define THREAD_TO_STRUCT(function, structure, member)
void gmpr_last_host_group_ref_gone(gmpr_group *group)
ordinal_t rclient_ordinal
struct gmpr_host_group_ gmpr_host_group
struct gmpr_notify_block_ gmpr_notify_block
gmp_addr_list_entry rogroup_addr_entry
gmpx_patnode rogroup_intf_patnode
task_thread rinst_client_thread
void gmpr_timeout_group(gmpr_group *group)
gmp_addr_list rgroup_query_hi_timers
void gmpr_free_notification(gmpr_client_notification *notification)
void gmpr_register_packet_handler(void)
void gmpr_attempt_group_free(gmpr_group *group)
gmp_filter_mode rgroup_filter_mode
void gmpr_dequeue_group_xmit(gmpr_group *group)
uint32_t rintf_local_query_ivl
gmpr_host_group * rhga_host_group
gmp_version gmpr_group_version(gmpr_intf *intf, gmpr_group *group)
static gmpr_host_group_addr * gmpr_client_notification_to_host_group_addr(gmpr_notify_block *notify_block, ordinal_t ordinal)
static gmp_addr_list * gmpr_ogroup_source_list(gmpr_ogroup *group)
void gmpr_alert_clients(gmpr_instance *instance)
boolean rhgroup_is_deleted
uint32_t rintf_group_count
gmpx_block_tag gmpr_ogroup_tag
gmpr_limit_state_t rintf_limit_state
void gmpr_host_notify_oif_map_change(gmpr_group *group)
static gmpr_ogroup_addr_entry * gmpr_client_notification_to_addr_entry(gmpr_notify_block *notify_block, ordinal_t ordinal)
gmpr_client_host_notification * gmpr_client_get_host_notification(gmpr_client *client, gmpr_client_host_notification *last_notification)
void gmpr_accelerate_query_smear(gmpr_instance *instance)
boolean rgroup_send_gss_query
gmpx_patroot * rintf_oif_group_root
struct gmpr_client_ gmpr_client
uint32_t rintf_log_interval
void gmpr_source_timer_expiry(gmpx_timer *timer, void *context)
static boolean gmpr_host_group_addr_deleted(gmpr_host_group_addr *group_addr)
gmp_addr_list * addr_ent_list
struct gmpr_ogroup_addr_entry_ gmpr_ogroup_addr_entry
gmp_addr_list rgroup_src_addr_running
gmp_addr_list rogroup_src_addr_deleted
gmpx_patnode rgroup_intf_patnode
void gmpr_client_free_host_notification(gmpr_client_host_notification *host_notif)
gmpr_group * rhgroup_group
uint8_t rgroup_query_rexmit_count
task_thread rclient_thread
static boolean gmpr_group_addr_excluded(gmpr_ogroup_addr_entry *group_addr)
struct gmpr_group_ gmpr_group
gmpr_group * gmpr_next_intf_group(gmpr_intf *intf, gmpr_group *group)
gmpr_intf * gmpr_intf_lookup(gmpr_instance *instance, gmpx_intf_id intf_id)
static boolean gmpr_host_group_active(gmpr_host_group *host_group)
void gmpr_gss_query_timer_expiry(gmpx_timer *timer, void *context)
gmp_addr_list rhgroup_deleted
gmpr_instance * gmpr_instance_create(gmp_proto proto, void *inst_context)
boolean gmpr_check_grp_limit(gmpr_intf *intf, boolean incr)
void gmpr_notify_oif_map_change_internal(gmpr_intf *intf)
task_thread rhgroup_thread
gmpx_block_tag gmpr_group_tag
gmpr_notification_type gmpr_notify_type
gmpx_timer * rinst_smear_timer
void gmpr_alert_host_clients(gmpr_instance *instance)
gmp_addr_string rhgroup_addr
void gmpr_intf_update_robustness(gmpr_intf *intf, uint32_t robustness)
void gmpr_setup_initial_query_timer(gmpr_intf *intf)
gmpr_group * gmpr_group_create(gmpr_intf *intf, const gmp_addr_string *group_addr)
uint32_t rintf_oif_group_count
patnode global_group_node
task_thread rclient_notif_head
task_thread rintf_startup_thread
gmpr_notify_block rogroup_addr_client_thread[GMPX_MAX_RTR_CLIENTS]
void gmpr_destroy_intf_hosts(gmpr_intf *intf)
void gmpr_set_notification_type(gmpr_notify_block *notify_block, gmpr_notification_type notify_type)
void gmpr_update_group_oif(gmpr_group *group, oif_update_type type)
void gmpr_source_notify_clients(gmpr_ogroup_addr_entry *group_addr, gmpr_source_notify_flag flag)
int gmpr_attach_intf_internal(gmpr_instance *instance, gmpx_intf_id intf_id)
boolean rintf_xmit_pending
gmpr_notify_block rogroup_client_thread[GMPX_MAX_RTR_CLIENTS]
task_thread rogroup_global_thread
void gmpr_enqueue_refresh_end(gmpr_client *client)
static gmpr_host_group * gmpr_client_notification_to_host_group(gmpr_notify_block *notify_block, ordinal_t ordinal)
gmpr_global_group * gmpr_link_global_group(gmpr_ogroup *group)
gmpx_patroot * rhost_group_root
gmpx_timer * rgroup_basic_host_present
struct gmpr_instance_ gmpr_instance
gmpr_ogroup * gmpr_ogroup_lookup(gmpr_intf *intf, const uint8_t *group)
boolean rintf_first_query_pending
gmpx_patnode rhgroup_node
static boolean gmpr_all_group_lists_empty(gmpr_group *group)
gmpx_block_tag gmpr_host_group_tag
uint8_t rgroup_addr_rexmit_count
boolean gmp_addr_list_empty(gmp_addr_list *list)
gmp_addr_list_entry rhga_addr_ent
static boolean gmpr_group_addr_included(gmpr_ogroup_addr_entry *group_addr)
void gmpr_flush_notifications(gmpr_notify_block *notify_block, boolean just_delink)
uint32_t rintf_group_membership_ivl
boolean rintf_passive_receive
gmpx_timer * gmpr_create_change_report_timer(gmpr_group *group)
task_thread rgroup_oif_thread
void gmpr_destroy_client(gmpr_client *client)
gmpr_instance_context rinst_cb_context
boolean rintf_suppress_gen_query
struct gmpr_ogroup_ * rgroup_oif_group
boolean rintf_querier_enabled
gmpr_group_addr_entry * rhga_source
gmpx_block_tag gmpr_ogroup_addr_entry_tag
uint32_t rintf_channel_count
gmpx_block_tag gmpr_client_tag
gmpr_group * gmpr_group_lookup(gmpr_intf *intf, const uint8_t *group)
void gmpr_delink_global_group(gmpr_ogroup *group)
gmpr_client * gmpr_get_client(gmp_client_id client_id)
gmpx_timer * rgroup_group_timer
boolean rclient_host_notify
task_thread rogroup_oif_head
gmpr_instance * rclient_instance
uint32_t rintf_local_robustness
gmpx_block_tag gmpr_intf_tag
uint32_t rinst_group_timeout
gmp_addr_list rogroup_excl_src_addr
boolean rintf_gen_query_requested
task_thread global_group_head
static boolean gmpr_ogroup_is_active(gmpr_ogroup *ogroup)
void gmpr_flush_notifications_group(gmpr_ogroup *ogroup)
gmpx_patroot * rintf_host_root
gmpr_intf * gmpr_next_instance_intf(gmpr_instance *instance, gmpr_intf *prev_intf)
void gmpr_intf_update_query_ivl(gmpr_intf *intf, uint32_t query_ivl)
gmpr_ogroup * rogroup_addr_group
static boolean gmpr_group_addr_deleted(gmpr_ogroup_addr_entry *group_addr)
void gmpr_host_process_report(uint8_t *src_addr, gmp_report_rectype rec_type, gmpr_group *group, gmp_addr_vect *source_vect)
uint32_t rintf_query_resp_ivl
gmpr_instance * gmpr_get_instance(gmp_instance_id instance_id)
boolean rintf_fast_leaves
boolean rogroup_send_full_notif[GMPX_MAX_RTR_CLIENTS]
void gmpr_enqueue_all_source_notifications(gmpr_ogroup *ogroup, gmpr_client *client)
void gmpr_client_enqueue_all_host_groups(gmpr_client *client)
gmp_addr_list_entry rgroup_addr_entry
uint32_t rinst_traceflags
struct gmpr_ogroup_addr_entry_ * rgroup_addr_oif_addr
void gmpr_update_intf_output_groups(gmpr_intf *intf)
boolean rintf_send_gen_query
void gmpr_update_source_oif(gmpr_group_addr_entry *group_addr, oif_update_type type)
struct gmpr_host_group_addr_ gmpr_host_group_addr
gmpx_block_tag gmpr_host_tag
gmpx_patroot * gmpr_global_intf_tree[]
task_thread gmpr_global_instance_thread
task_thread rgroup_host_group_head
gmp_addr_string rhost_addr
static gmpr_ogroup * gmpr_client_notification_to_group(gmpr_notify_block *notify_block, ordinal_t ordinal)
gmpx_timer * rgroup_leaves_host_present
gmpr_notify_block rhga_notify[GMPX_MAX_RTR_CLIENTS]
void gmpr_group_notify_clients(gmpr_ogroup *group)
gmpx_block_tag gmpr_group_addr_entry_tag
gmp_filter_mode rogroup_filter_mode
uint32_t rintf_startup_query_count
gmpx_block_tag gmpr_intf_list_tag
gmp_addr_string rintf_local_addr
uint32_t rintf_channel_limit
gmpr_notify_block rclient_refresh_end_notif
gmpx_timer * rclient_startup_timer
gmpr_client_context rclient_cb_context
boolean rinst_host_tracking
gmp_addr_string global_group_addr
uint32_t rintf_chan_limit_drops
static boolean gmpr_group_is_active(gmpr_group *group)
gmp_addr_list rgroup_query_lo_timers
void gmpr_client_enqueue_all_intf_groups(gmpr_client *client, gmpr_intf *intf, boolean flush)
gmpr_client * gmpr_create_client(gmpr_instance *instance)
task_thread rgroup_addr_oif_thread
gmpr_group * rgroup_addr_group
gmpx_timer * rgroup_addr_timer
void gmpr_flush_intf_input_groups(gmpr_intf *intf)
gmpr_instance * rintf_instance
boolean rgroup_send_group_query
int gmpr_detach_intf_internal(gmpr_instance *instance, gmpx_intf_id intf_id)
void gmpr_mode_change_notify_clients(gmpr_ogroup *group)
struct gmpr_group_addr_entry_ gmpr_group_addr_entry
void gmpr_last_host_addr_ref_gone(gmpr_group_addr_entry *group_addr_entry)
gmp_addr_string rogroup_addr
gmpx_block_tag gmpr_host_group_addr_tag
task_thread rogroup_addr_oif_head
gmpx_block_tag gmpr_notification_tag
gmpr_ogroup * gmpr_next_oif_group(gmpr_intf *oif, gmpr_ogroup *group)
uint32_t rintf_channel_threshold
boolean gmpr_group_forwards_source(gmpr_ogroup *group, const uint8_t *source)
static boolean gmpr_source_is_active(gmpr_ogroup *group, gmpr_ogroup_addr_entry *group_addr)
void gmpr_kick_xmit(gmpr_intf *intf)
gmpx_timer * rgroup_gss_query_timer
static boolean gmpr_source_ord_is_active(gmpr_ogroup *group, ordinal_t ord)
gmp_addr_list rhgroup_addrs
gmpr_host * gmpr_lookup_host(gmpr_intf *intf, const uint8_t *host_addr)
gmp_addr_catalog rinst_addr_cat
void gmpr_update_oif_mode_change(gmpr_group *group)
struct gmpr_host_ gmpr_host
boolean gmpr_attempt_ogroup_free(gmpr_ogroup *ogroup)
gmpr_global_group * gmpr_lookup_global_group(gmpr_instance *instance, uint8_t *group_addr)
uint32_t rintf_local_query_resp_ivl
static gmp_addr_list * gmpr_ogroup_source_list_by_mode(gmpr_ogroup *group, gmp_filter_mode mode)
uint8_t rhgroup_lock_count