send_join(up);
- up->t_join_timer = 0;
+ up->t_join_timer = NULL;
join_timer_start(up);
return 0;
up->group_addr = group_addr;
up->flags = 0;
up->ref_count = 1;
- up->t_join_timer = 0;
+ up->t_join_timer = NULL;
+ up->t_ka_timer = NULL;
up->join_state = 0;
up->state_transition = pim_time_monotonic_sec();
- up->channel_oil = 0;
+ up->channel_oil = NULL;
up->sptbit = PIM_UPSTREAM_SPTBIT_TRUE;
up->rpf.source_nexthop.interface = 0;
struct pim_rpf rpf;
struct thread *t_join_timer;
+
+ /*
+ * KAT(S,G)
+ */
+ struct thread *t_ka_timer;
+#define PIM_KEEPALIVE_PERIOD (210)
+#define PIM_RP_KEEPALIVE_PERIOD ( 3 * qpim_register_suppress_time + qpim_register_probe_time )
+
int64_t state_transition; /* Record current state uptime */
};
struct list *qpim_static_route_list = 0;
struct in_addr qpim_rp;
+int32_t qpim_register_suppress_time = PIM_REGISTER_SUPPRESSION_TIME_DEFAULT;
+int32_t qpim_register_probe_time = PIM_REGISTER_PROBE_TIME_DEFAULT;
+
static void pim_free()
{
pim_ssmpingd_destroy();
#define PIM_MROUTE_IS_ENABLED (qpim_mroute_socket_fd >= 0)
#define PIM_MROUTE_IS_DISABLED (qpim_mroute_socket_fd < 0)
+/*
+ * Register-Stop Timer (RST(S,G))
+ * Default values
+ */
+extern int32_t qpim_register_suppress_time;
+extern int32_t qpim_register_probe_time;
+#define PIM_REGISTER_SUPPRESSION_TIME_DEFAULT (60)
+#define PIM_REGISTER_PROBE_TIME_DEFAULT (5)
+
#define PIM_DEBUG_PIM_EVENTS (qpim_debugs & PIM_MASK_PIM_EVENTS)
#define PIM_DEBUG_PIM_PACKETS (qpim_debugs & PIM_MASK_PIM_PACKETS)
#define PIM_DEBUG_PIM_PACKETDUMP_SEND (qpim_debugs & PIM_MASK_PIM_PACKETDUMP_SEND)