summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cleopatre/application/igmp_snoopd/inc/internal.h5
-rw-r--r--cleopatre/application/igmp_snoopd/src/igmp_common.c19
-rw-r--r--cleopatre/application/igmp_snoopd/src/igmp_v1_v2.c2
-rw-r--r--cleopatre/application/igmp_snoopd/src/igmp_v3.c12
4 files changed, 18 insertions, 20 deletions
diff --git a/cleopatre/application/igmp_snoopd/inc/internal.h b/cleopatre/application/igmp_snoopd/inc/internal.h
index 28ecbb77c4..e59fd5168f 100644
--- a/cleopatre/application/igmp_snoopd/inc/internal.h
+++ b/cleopatre/application/igmp_snoopd/inc/internal.h
@@ -157,12 +157,13 @@ void update_computed_metrics (struct igmp_metrics *metrics);
/**
* Update some timers and timestamps in the group and member.
* They are used to keep track of (in)activity.
+ * \param ctx The context.
* \param grp The group.
* \param member The member.
- * \param ctx The context.
*/
void
-update_timers (struct group *grp, struct group_member *member, const struct context *ctx);
+update_timers (const struct context *ctx, struct group *grp,
+ struct group_member *member);
/**
* Update timer_querier_presence.
diff --git a/cleopatre/application/igmp_snoopd/src/igmp_common.c b/cleopatre/application/igmp_snoopd/src/igmp_common.c
index 65dffe4364..43e218d36e 100644
--- a/cleopatre/application/igmp_snoopd/src/igmp_common.c
+++ b/cleopatre/application/igmp_snoopd/src/igmp_common.c
@@ -134,7 +134,8 @@ init_metrics (struct igmp_metrics *metrics)
}
void
-update_timers (struct group *grp, struct group_member *member, const struct context *ctx)
+update_timers (const struct context *ctx, struct group *grp,
+ struct group_member *member)
{
member->group_membership_timer_end =
ctx->ref_time + ctx->metrics.group_membership_interval;
@@ -197,21 +198,18 @@ update_timer_membership_timeout (struct context *ctx)
/**
* Determine the Group Compatibility Mode of the group.
+ * \param ctx The context.
* \param grp The group.
- * \param querier_present Whether there is a querier or not.
- * \param now The time now.
* \return GROUP_COMPAT_MODE_IGMP_V2, if the group is in v2 compatibility mode.
* GROUP_COMPAT_MODE_IGMP_V3, if the group is in v3 compatibility mode.
*/
static group_compatibility_mode_t
-group_compat_mode (const struct group *grp,
- bool querier_present,
- time_t now)
+group_compat_mode (const struct context *ctx, const struct group *grp)
{
- if (querier_present)
+ if (ctx->is_querier_present)
{
if ((grp->v2_host_present_timer_end == 0)
- || (now > grp->v2_host_present_timer_end))
+ || (ctx->now > grp->v2_host_present_timer_end))
{
return GROUP_COMPAT_MODE_IGMP_V3;
}
@@ -223,7 +221,7 @@ group_compat_mode (const struct group *grp,
else
{
if ((grp->last_v2_report_time == 0)
- || (now > (grp->last_v2_report_time +
+ || (ctx->now > (grp->last_v2_report_time +
NO_QUERIER_OLDER_HOST_PRESENT_INTERVAL)))
{
@@ -262,8 +260,7 @@ check_membership_timeout (struct context *ctx)
{
del_group (grp);
}
- else if (group_compat_mode (grp, ctx->is_querier_present,
- ctx->ref_time) == GROUP_COMPAT_MODE_IGMP_V3)
+ else if (group_compat_mode (ctx, grp) == GROUP_COMPAT_MODE_IGMP_V3)
{
/* We only look for inactive members if the group is in V3 compat
* mode.
diff --git a/cleopatre/application/igmp_snoopd/src/igmp_v1_v2.c b/cleopatre/application/igmp_snoopd/src/igmp_v1_v2.c
index ee3c28e5a8..d95509967d 100644
--- a/cleopatre/application/igmp_snoopd/src/igmp_v1_v2.c
+++ b/cleopatre/application/igmp_snoopd/src/igmp_v1_v2.c
@@ -117,7 +117,7 @@ process_v2_report (struct context *ctx,
struct group_member *member;
find_or_add (&ctx->groups_head, &grp, igmp_header->group, &member, host_eth_addr);
- update_timers (grp, member, ctx);
+ update_timers (ctx, grp, member);
grp->v2_host_present_timer_end =
ctx->ref_time + ctx->metrics.older_host_present_interval;
diff --git a/cleopatre/application/igmp_snoopd/src/igmp_v3.c b/cleopatre/application/igmp_snoopd/src/igmp_v3.c
index b9fc807544..46879b238b 100644
--- a/cleopatre/application/igmp_snoopd/src/igmp_v3.c
+++ b/cleopatre/application/igmp_snoopd/src/igmp_v3.c
@@ -299,7 +299,7 @@ process_v3_is_in (struct context *ctx,
struct group_member *member;
find_or_add (&ctx->groups_head, &grp, multicast_addr, &member, eth_addr);
- update_timers (grp, member, ctx);
+ update_timers (ctx, grp, member);
/* We don't know if this is an answer to
* - a Group-and-Source-Specific Query, so we should only add the sources
@@ -346,7 +346,7 @@ process_v3_is_ex (struct context *ctx,
struct group_member *member;
find_or_add (&ctx->groups_head, &grp, multicast_addr, &member, eth_addr);
- update_timers (grp, member, ctx);
+ update_timers (ctx, grp, member);
member->filter_mode = FILTER_MODE_EXCLUDE;
group_member_set_sources (member, sources, nsrcs);
@@ -400,7 +400,7 @@ process_v3_to_in (struct context *ctx,
}
}
- update_timers (grp, member, ctx);
+ update_timers (ctx, grp, member);
member->filter_mode = FILTER_MODE_INCLUDE;
group_member_set_sources (member, sources, nsrcs);
@@ -427,7 +427,7 @@ process_v3_to_ex (struct context *ctx,
struct group_member *member;
find_or_add (&ctx->groups_head, &grp, multicast_addr, &member, eth_addr);
- update_timers (grp, member, ctx);
+ update_timers (ctx, grp, member);
member->filter_mode = FILTER_MODE_EXCLUDE;
group_member_set_sources (member, sources, nsrcs);
@@ -452,7 +452,7 @@ process_v3_allow (struct context *ctx,
struct group_member *member;
find_or_add (&ctx->groups_head, &grp, multicast_addr, &member, eth_addr);
- update_timers (grp, member, ctx);
+ update_timers (ctx, grp, member);
switch (member->filter_mode)
{
@@ -508,7 +508,7 @@ process_v3_block (struct context *ctx,
return;
}
- update_timers (grp, member, ctx);
+ update_timers (ctx, grp, member);
switch (member->filter_mode)
{