[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

i386/3645: Multicast routing broken on i386 (endian problem?)



>Number:         3645
>Category:       i386
>Synopsis:       Multicast routing broken on i386
>Confidential:   yes
>Severity:       serious
>Priority:       medium
>Responsible:    bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jan 24 07:10:01 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Karl O. Pinc <kop@meme.com>
>Release:        OpenBSD 3.3 stable as of Jan 23, 2004
>Organization:
The Meme Factory, Inc.
net
>Environment:
	System      : OpenBSD 3.3
	Architecture: OpenBSD.i386
	Machine     : i386
>Description:
Multicast routing does not seem to work, although the application
has never successfully run so I can't be sure.  I do know that
it's not a pf issue as I've tried with pf disabled.

There is definately a problem running mrinfo(8).

>How-To-Repeat:
Turn on MROUTING in kernel:
(Yes, I realize the OpenBSD team provides no support for other
than the GENERIC kernel, but a non-GENERIC kernel is required
to run mrouted (which is included in OpenBSD) so what am I
supposed to do?)

Build and install a new kernel according to afterboot(8).

Diff of config file:
--- GENERIC	Mon Mar 10 00:37:18 2003
+++ cerberus	Fri Jan 23 19:25:33 2004
@@ -8,28 +8,38 @@
 
 include "../../../conf/GENERIC"
 
-option		I386_CPU	# CPU classes; at least one is REQUIRED
-option		I486_CPU
-option		I586_CPU
+# We won't ever have less than a 686, so don't worry about the
+# lesser machines.
+#option		I386_CPU	# CPU classes; at least one is REQUIRED
+#option		I486_CPU
+#option		I586_CPU
 option		I686_CPU
-option		GPL_MATH_EMULATE	# floating point emulation.
+#option		GPL_MATH_EMULATE	# floating point emulation.
 
 option		USER_PCICONF	# user-space PCI configuration
 
 #option		VM86		# Virtual 8086 emulation
 #option		USER_LDT	# user-settable LDT; see i386_set_ldt(2)
-option		APERTURE	# in-kernel aperture driver for XFree86
+#option		APERTURE	# in-kernel aperture driver for XFree86
 
 #option		KGDB		# Remote debugger support; exclusive of DDB
 #option		"KGDB_DEVNAME=\"pccom\"",KGDBADDR=0x2f8,KGDBRATE=9600
 
-#option		DUMMY_NOPS	# speed hack; recommended
+# Live dangerously, we want the router to be fast.
+option		DUMMY_NOPS	# speed hack; recommended
 
 option		COMPAT_SVR4	# binary compatibility with SVR4
-option		COMPAT_IBCS2	# binary compatibility with SCO and ISC
+#option		COMPAT_IBCS2	# binary compatibility with SCO and ISC
 option		COMPAT_LINUX	# binary compatibility with Linux
 option		COMPAT_FREEBSD	# binary compatibility with FreeBSD
 option		COMPAT_BSDOS	# binary compatibility with BSD/OS
+
+# TIBCO randevouz software needs multicast.
+option		MROUTING	# Multicast router
 
 maxusers	32		# estimated number of users
 
Build a new system according to release(8).

Add following to /etc/rc.conf.local:
mrouted_flags=""	# for normal use: "", if activated
multicast_router=YES	# A multicast routing daemon will be run, e.g. mrouted

Reboot.

/var/log/messages then begins to accumlate lots of lines like:
Jan 23 21:59:47 cerberus mrouted[23891]: warning - received packet from 192.168.1.248 shorter (28 bytes) than hdr+data length (20+2048)
Jan 23 21:59:47 cerberus mrouted[23891]: warning - received packet from 192.168.1.19 shorter (32 bytes) than hdr+data length (24+2048)

mrinfo(8) puts 4 similar lines on the screen when run and produces
no other output.

>Fix:

According to http://www.sunmanagers.org/archives/2000/0653.html
the numbers 28 and 32 look suspiciously like a big-endian/
little-endian network to host byte order conversion problem,
although a cursory examination of mrouted/igmp.c shows that
the fixes recommended on the page _seem_ to have been applied.


>Release-Note:
>Audit-Trail:
>Unformatted: