mirror of
https://github.com/rtbrick/bngblaster.git
synced 2024-05-06 15:54:57 +00:00
#27 Fix IGMP Delay Calculation
This commit is contained in:
+7
-4
@@ -457,7 +457,7 @@ bbl_igmp_zapping(timer_s *timer)
|
||||
struct timespec time_diff;
|
||||
struct timespec time_now;
|
||||
|
||||
int ms;
|
||||
uint32_t ms;
|
||||
|
||||
if(session->session_state != BBL_ESTABLISHED ||
|
||||
session->ipcp_state != BBL_PPP_OPENED) {
|
||||
@@ -483,9 +483,10 @@ bbl_igmp_zapping(timer_s *timer)
|
||||
group = session->zapping_joined_group;
|
||||
if(group->first_mc_rx_time.tv_sec) {
|
||||
timespec_sub(&time_diff, &group->first_mc_rx_time, &group->join_tx_time);
|
||||
ms = round(time_diff.tv_nsec / 1.0e6); // Convert nanoseconds to milliseconds
|
||||
ms = time_diff.tv_nsec / 1000000; // convert nanoseconds to milliseconds
|
||||
if(time_diff.tv_nsec % 1000000) ms++; // simple roundup function
|
||||
join_delay = (time_diff.tv_sec * 1000) + ms;
|
||||
|
||||
if(!join_delay) join_delay = 1; // join delay must be at least one millisecond
|
||||
session->zapping_join_delay_sum += join_delay;
|
||||
session->zapping_join_delay_count++;
|
||||
if(join_delay > session->stats.max_join_delay) session->stats.max_join_delay = join_delay;
|
||||
@@ -530,8 +531,10 @@ bbl_igmp_zapping(timer_s *timer)
|
||||
group = session->zapping_leaved_group;
|
||||
if(group->group && group->last_mc_rx_time.tv_sec && group->leave_tx_time.tv_sec) {
|
||||
timespec_sub(&time_diff, &group->last_mc_rx_time, &group->leave_tx_time);
|
||||
ms = round(time_diff.tv_nsec / 1.0e6); // Convert nanoseconds to milliseconds
|
||||
ms = time_diff.tv_nsec / 1000000; // convert nanoseconds to milliseconds
|
||||
if(time_diff.tv_nsec % 1000000) ms++; // simple roundup function
|
||||
leave_delay = (time_diff.tv_sec * 1000) + ms;
|
||||
if(!leave_delay) leave_delay = 1; // leave delay must be at least one millisecond
|
||||
session->zapping_leave_delay_sum += leave_delay;
|
||||
session->zapping_leave_delay_count++;
|
||||
if(leave_delay > session->stats.max_leave_delay) session->stats.max_leave_delay = leave_delay;
|
||||
|
||||
+4
-4
@@ -55,8 +55,8 @@ bbl_stats_generate (bbl_ctx_s *ctx, bbl_stats_t * stats) {
|
||||
bbl_session_s *session;
|
||||
uint32_t i;
|
||||
|
||||
int join_delays = 0;
|
||||
int leave_delays = 0;
|
||||
uint32_t join_delays = 0;
|
||||
uint32_t leave_delays = 0;
|
||||
|
||||
bbl_stats_update_cps(ctx);
|
||||
|
||||
@@ -142,10 +142,10 @@ bbl_stats_generate (bbl_ctx_s *ctx, bbl_stats_t * stats) {
|
||||
}
|
||||
}
|
||||
if(join_delays) {
|
||||
stats->avg_join_delay = round(stats->avg_join_delay / join_delays);
|
||||
stats->avg_join_delay = stats->avg_join_delay / join_delays;
|
||||
}
|
||||
if(leave_delays) {
|
||||
stats->avg_leave_delay = round(stats->avg_leave_delay / leave_delays);
|
||||
stats->avg_leave_delay = stats->avg_leave_delay / leave_delays;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-1
@@ -295,7 +295,6 @@ bbl_encode_packet_igmp (bbl_session_s *session)
|
||||
if(group->robustness_count) {
|
||||
group->robustness_count--;
|
||||
}
|
||||
|
||||
if(session->igmp_version == IGMP_VERSION_3) {
|
||||
igmp.version = IGMP_VERSION_3;
|
||||
igmp.type = IGMP_TYPE_REPORT_V3;
|
||||
@@ -375,6 +374,15 @@ bbl_encode_packet_igmp (bbl_session_s *session)
|
||||
}
|
||||
break;
|
||||
}
|
||||
if(group->state == IGMP_GROUP_JOINING) {
|
||||
if(!group->robustness_count) {
|
||||
group->state = IGMP_GROUP_ACTIVE;
|
||||
}
|
||||
} else if(group->state == IGMP_GROUP_LEAVING) {
|
||||
if(!group->robustness_count) {
|
||||
group->state = IGMP_GROUP_IDLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!group) {
|
||||
|
||||
Reference in New Issue
Block a user