multicast still broken.

Jean-Marie SULMONT (jms@aracnet.com)
Wed, 11 Feb 1998 04:42:55 +0000


This is a multi-part message in MIME format.
--------------5D7BC72A5F8CB1AF44D74AC3
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi
Does anyone know when multicast IPV4 will be
fixed in 2.1.?

So far, the attached patch that I've had from
A.N.Kuznetsov (kuznet@ms2.inr.ac.ru) has to
be applied. Would be nice if checked in 2.1

Thanks.

--------------5D7BC72A5F8CB1AF44D74AC3
Content-Type: text/plain; charset=us-ascii; name="multicast.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="multicast.patch"

*** net/ipv4/ip_output.c.BUG Sun Jan 18 12:28:34 1998
--- net/ipv4/ip_output.c Fri Jan 30 16:25:00 1998
*************** int ip_mc_output(struct sk_buff *skb)
*** 241,246 ****
--- 241,247 ----
#endif

skb->dev = dev;
+ skb->protocol = __constant_htons(ETH_P_IP);

/*
* Multicasts are looped back for other local users
*** net/ipv4/route.c.BUG Mon Jan 12 15:28:28 1998
--- net/ipv4/route.c Fri Jan 30 16:25:49 1998
***************
*** 87,94 ****

#define RTprint(a...) printk(KERN_DEBUG a)

static struct timer_list rt_flush_timer =
! { NULL, NULL, 0, 0L, NULL };
static struct timer_list rt_periodic_timer =
{ NULL, NULL, 0, 0L, NULL };

--- 87,96 ----

#define RTprint(a...) printk(KERN_DEBUG a)

+ static void rt_run_flush(unsigned long dummy);
+
static struct timer_list rt_flush_timer =
! { NULL, NULL, 0, 0L, rt_run_flush };
static struct timer_list rt_periodic_timer =
{ NULL, NULL, 0, 0L, NULL };

*************** static void rt_run_flush(unsigned long d
*** 303,324 ****

void rt_cache_flush(int delay)
{
start_bh_atomic();
! if (delay && rt_flush_timer.function &&
! rt_flush_timer.expires - jiffies < delay) {
! end_bh_atomic();
! return;
! }
! if (rt_flush_timer.function) {
! del_timer(&rt_flush_timer);
! rt_flush_timer.function = NULL;
}
! if (delay == 0) {
end_bh_atomic();
rt_run_flush(0);
return;
}
! rt_flush_timer.function = rt_run_flush;
rt_flush_timer.expires = jiffies + delay;
add_timer(&rt_flush_timer);
end_bh_atomic();
--- 305,338 ----

void rt_cache_flush(int delay)
{
+ static unsigned long deadline = 0;
+
start_bh_atomic();
!
! if (del_timer(&rt_flush_timer) && delay > 0 && deadline) {
! long tmo = (long)(deadline - rt_flush_timer.expires);
!
! /* If flush timer is already running
! and flush request is not immediate (delay > 0):
!
! if deadline is not achieved, prolongate timer to "dealy",
! otherwise fire it at deadline time.
! */
!
! if (delay > tmo)
! delay = tmo;
}
!
! if (delay <= 0) {
! deadline = 0;
end_bh_atomic();
rt_run_flush(0);
return;
}
!
! if (deadline == 0)
! deadline = jiffies + RT_FLUSH_DELAY*2;
!
rt_flush_timer.expires = jiffies + delay;
add_timer(&rt_flush_timer);
end_bh_atomic();

--------------5D7BC72A5F8CB1AF44D74AC3--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu