Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4af8def authored by Daniel Borkmann's avatar Daniel Borkmann Committed by David S. Miller
Browse files

net: ipv6: mld: introduce mld_{gq, ifc, dad}_stop_timer functions



We already have mld_{gq,ifc,dad}_start_timer() functions, so introduce
mld_{gq,ifc,dad}_stop_timer() functions to reduce code size and make it
more readable.

Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
Acked-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2b7c121f
Loading
Loading
Loading
Loading
+25 −16
Original line number Diff line number Diff line
@@ -1006,6 +1006,13 @@ static void mld_gq_start_timer(struct inet6_dev *idev)
		in6_dev_hold(idev);
}

static void mld_gq_stop_timer(struct inet6_dev *idev)
{
	idev->mc_gq_running = 0;
	if (del_timer(&idev->mc_gq_timer))
		__in6_dev_put(idev);
}

static void mld_ifc_start_timer(struct inet6_dev *idev, unsigned long delay)
{
	unsigned long tv = net_random() % delay;
@@ -1014,6 +1021,13 @@ static void mld_ifc_start_timer(struct inet6_dev *idev, unsigned long delay)
		in6_dev_hold(idev);
}

static void mld_ifc_stop_timer(struct inet6_dev *idev)
{
	idev->mc_ifc_count = 0;
	if (del_timer(&idev->mc_ifc_timer))
		__in6_dev_put(idev);
}

static void mld_dad_start_timer(struct inet6_dev *idev, unsigned long delay)
{
	unsigned long tv = net_random() % delay;
@@ -1022,6 +1036,12 @@ static void mld_dad_start_timer(struct inet6_dev *idev, unsigned long delay)
		in6_dev_hold(idev);
}

static void mld_dad_stop_timer(struct inet6_dev *idev)
{
	if (del_timer(&idev->mc_dad_timer))
		__in6_dev_put(idev);
}

/*
 *	IGMP handling (alias multicast ICMPv6 messages)
 */
@@ -1234,15 +1254,9 @@ static int mld_process_v1(struct inet6_dev *idev, struct mld_msg *mld,
	mld_set_v1_mode(idev);

	/* cancel MLDv2 report timer */
	idev->mc_gq_running = 0;
	if (del_timer(&idev->mc_gq_timer))
		__in6_dev_put(idev);

	mld_gq_stop_timer(idev);
	/* cancel the interface change timer */
	idev->mc_ifc_count = 0;
	if (del_timer(&idev->mc_ifc_timer))
		__in6_dev_put(idev);

	mld_ifc_stop_timer(idev);
	/* clear deleted report items */
	mld_clear_delrec(idev);

@@ -2434,14 +2448,9 @@ void ipv6_mc_down(struct inet6_dev *idev)
	/* Withdraw multicast list */

	read_lock_bh(&idev->lock);
	idev->mc_ifc_count = 0;
	if (del_timer(&idev->mc_ifc_timer))
		__in6_dev_put(idev);
	idev->mc_gq_running = 0;
	if (del_timer(&idev->mc_gq_timer))
		__in6_dev_put(idev);
	if (del_timer(&idev->mc_dad_timer))
		__in6_dev_put(idev);
	mld_ifc_stop_timer(idev);
	mld_gq_stop_timer(idev);
	mld_dad_stop_timer(idev);

	for (i = idev->mc_list; i; i=i->next)
		igmp6_group_dropped(i);