Date: Tue, 8 Jun 2004 10:57:14 +0700 From: Charlie Root <root@swp.bspu.secna.ru> To: archie@freebsd.org, bp@freebsd.org Cc: freebsd-net@freebsd.org Subject: ng_ether(4) panic with ef(4) Message-ID: <20040608035714.GA867@swp.bspu.secna.ru>
next in thread | raw e-mail | index | archive | help
helo. if if_ef.ko was loaded before ng_ether.ko or if i have "device ef" in kernel and ng_ether.ko loaded as module then IPXrouted panic my kernel for 15-30 seconds after boot. ~# kldstat Id Refs Address Size Name 1 37 0xc0400000 34c150 kernel 2 1 0xc074d000 5e40 vesa.ko 3 1 0xc0753000 2d0c if_ef.ko 4 2 0xc0756000 1ac7c miibus.ko 5 1 0xc0771000 b2b4 if_fxp.ko 6 2 0xc077d000 1e58c snd_pcm.ko 7 1 0xc079c000 67d8 snd_es137x.ko 8 1 0xc07a3000 b8b4 random.ko 9 1 0xc07af000 51b48 acpi.ko 10 1 0xc0801000 7d40 fdc.ko 11 1 0xc0809000 3bcc speaker.ko 12 1 0xc1d81000 c7000 vinum.ko 13 2 0xc1eea000 5000 procfs.ko 14 2 0xc1eef000 6000 pseudofs.ko 15 1 0xc1efb000 6000 linprocfs.ko 16 4 0xc1f01000 19000 linux.ko 17 1 0xc1f27000 4000 sysvmsg.ko 18 1 0xc1f2f000 5000 sysvsem.ko 19 1 0xc1f34000 4000 sysvshm.ko 20 1 0xc1f52000 17000 ipl.ko 21 1 0xc1faa000 2f000 nfsclient.ko 22 1 0xc2013000 1b000 nfsserver.ko 23 1 0xc2054000 22000 usb.ko 24 1 0xc20b3000 2000 snake_saver.ko 25 1 0xc20f2000 9000 vmmon_up.ko 26 1 0xc20fb000 2000 vmnet.ko 27 1 0xc20fd000 4000 if_tap.ko 28 5 0xc2101000 12000 netgraph.ko 29 1 0xc2118000 4000 ng_socket.ko 30 2 0xc211d000 4000 ng_ether.ko 31 1 0xc2121000 3000 ng_tee.ko 32 1 0xc2125000 5000 ng_bridge.ko 33 1 0xc221c000 2000 rtc.ko ~# ifconfig fxp0: flags=9943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,LINK0,MULTICAST> mtu 1500 inet 212.192.2.73 netmask 0xffffffe0 broadcast 212.192.2.95 ether 00:03:47:05:6f:5b media: Ethernet autoselect (100baseTX <full-duplex>) status: active fxp0f0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ipx 10000H.347056f5b ether 00:03:47:05:6f:5b fxp0f1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ipx 10001H.347056f5b ether 00:03:47:05:6f:5b fxp0f2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ipx 10002H.347056f5b ether 00:03:47:05:6f:5b fxp0f3: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ipx 10003H.347056f5b ether 00:03:47:05:6f:5b lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 inet 10.250.0.2 netmask 0xffffffff ipx 20040605H.1H vmnet0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 ether 00:bd:a7:20:00:00 vmnet1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 ether 00:bd:b1:20:00:01 vmnet2: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 ether 00:bd:bb:20:00:02 vmnet3: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 ether 00:bd:c6:20:00:03 /usr/src/sys/i386/compile/aj_kernel# gdb -k kernel GNU gdb 5.2.1 (FreeBSD) Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-unknown-freebsd"... (no debugging symbols found)... (kgdb) file kernel.debug Reading symbols from kernel.debug...done. (kgdb) target remote /dev/uart0 Remote debugging using /dev/uart0 0xc211e5bd in ?? () warning: Unable to find dynamic linker breakpoint function. GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code. warning: shared library handler failed to enable breakpoint (kgdb) bt #0 0xc211e5bd in ?? () #1 0xc05301fe in ether_output (ifp=0x0, m=0xc16ef000, dst=0xce651b20, rt0=0x0) at ../../../net/if_ethersubr.c:303 #2 0xc0576add in ipx_outputfl (m0=0xc16ef000, ro=0x0, flags=48) at ../../../netipx/ipx_outputfl.c:134 #3 0xc0577a71 in ipx_output (ipxp=0xc200ba00, m0=0xc16ef0be) at ../../../netipx/ipx_usrreq.c:310 #4 0xc0577ec2 in ipx_send (so=0xc16e1200, flags=0, m=0xc16ef000, nam=0xc21240a0, control=0x0, td=0xc16e1200) at ../../../netipx/ipx_usrreq.c:559 #5 0xc04ff08d in sosend (so=0xc1f755a0, addr=0xc21240a0, uio=0xce651c4c, top=0xc16ef000, control=0x0, flags=4, td=0xc1d5d3c0) at ../../../kern/uipc_socket.c:715 #6 0xc05038cc in kern_sendit (td=0xc1d5d3c0, s=4, mp=0xce651cc4, flags=-1049751040, control=0xc16e1200) at ../../../kern/uipc_syscalls.c:723 #7 0xc050371e in sendit (td=0xc16e1200, s=-1049751040, mp=0xce651cc4, flags=-1049751040) at ../../../kern/uipc_syscalls.c:663 #8 0xc0503a5b in sendto (td=0xc16e1200, uap=0xc1d5d3c0) at ../../../kern/uipc_syscalls.c:784 #9 0xc060e2a0 in syscall (frame= {tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = 34, tf_esi = 34, tf_ebp = -1077940968, tf_isp = -832234124, tf_ebx = -1077941008, tf_edx = 4, tf_ecx = 1, tf_eax = 133, tf_trapno = 12, tf_err = 2, tf_eip = 671938895, tf_cs = 31, tf_eflags = 518, tf_esp = -1077941044, tf_ss = 47}) at ../../../i386/i386/trap.c:1010 ---Type <return> to continue, or q <return> to quit--- #10 0xc05fefed in Xint0x80_syscall () at {standard input}:136 #11 0x0804a9ae in ?? () #12 0x0804a60e in ?? () #13 0x0804befb in ?? () #14 0x0804a019 in ?? () #15 0x08048d22 in ?? () (kgdb) bt full #0 0xc211e5bd in ?? () No symbol table info available. #1 0xc05301fe in ether_output (ifp=0x0, m=0xc16ef000, dst=0xce651b20, rt0=0x0) at ../../../net/if_ethersubr.c:303 type = 18432 error = 0 hdrcmplt = 0 esrc = "?\002\0\0àJ" edst = "ÿÿÿÿÿÿ" rt = (struct rtentry *) 0x0 eh = (struct ether_header *) 0x0 loop_copy = 0 hlen = 22 ac = (struct arpcom *) 0xc16e1200 #2 0xc0576add in ipx_outputfl (m0=0xc16ef000, ro=0x0, flags=48) at ../../../netipx/ipx_outputfl.c:134 ipx = (struct ipx *) 0xce651b20 ifp = (struct ifnet *) 0xc16e1200 error = 13 dst = (struct sockaddr_ipx *) 0x0 ipxroute = {ro_rt = 0x0, ro_dst = {sa_len = 16 '\020', sa_family = 23 '\027', sa_data = "\0\001\0\003ÿÿÿÿÿÿ\0\0\0"}} #3 0xc0577a71 in ipx_output (ipxp=0xc200ba00, m0=0xc16ef0be) at ../../../netipx/ipx_usrreq.c:310 ipx = (struct ipx *) 0xc16ef0be so = (struct socket *) 0xc1d5d3c0 len = 64 ro = (struct route *) 0xc16e1200 m = (struct mbuf *) 0xc16ef000 mprev = (struct mbuf *) 0xc1d5d3c0 #4 0xc0577ec2 in ipx_send (so=0xc16e1200, flags=0, m=0xc16ef000, nam=0xc21240a0, control=0x0, td=0xc16e1200) at ../../../netipx/ipx_usrreq.c:559 error = 0 ipxp = (struct ipxpcb *) 0xc200ba00 laddr = {x_net = {c_net = "\0\0\0", s_net = {0, 0}}, x_host = { c_host = "\0\0\0\0\0", s_host = {0, 0, 0}}, x_port = 21252} #5 0xc04ff08d in sosend (so=0xc1f755a0, addr=0xc21240a0, uio=0xce651c4c, top=0xc16ef000, control=0x0, flags=4, td=0xc1d5d3c0) at ../../../kern/uipc_socket.c:715 mp = (struct mbuf **) 0xc16ef000 m = (struct mbuf *) 0xc200ba00 space = 0 len = -1049694208 resid = 0 clen = -1040139776 error = 0 dontroute = 1 mlen = 208 atomic = 1 cow_send = 0 #6 0xc05038cc in kern_sendit (td=0xc1d5d3c0, s=4, mp=0xce651cc4, flags=-1049751040, control=0xc16e1200) at ../../../kern/uipc_syscalls.c:723 auio = {uio_iov = 0xce651cbc, uio_iovcnt = 1, uio_offset = 34, uio_resid = 0, uio_segflg = UIO_USERSPACE, uio_rw = UIO_WRITE, uio_td = 0xc1d5d3c0} iov = (struct iovec *) 0xc1d5d3c0 so = (struct socket *) 0xc1f755a0 i = -1042951232 len = 34 error = 22 ktriov = (struct iovec *) 0x0 ktruio = {uio_iov = 0x0, uio_iovcnt = -832234408, uio_offset = -4582091130731257156, uio_resid = 0, uio_segflg = 3227917479, uio_rw = 265, uio_td = 0xc21240a0} #7 0xc050371e in sendit (td=0xc16e1200, s=-1049751040, mp=0xce651cc4, flags=-1049751040) at ../../../kern/uipc_syscalls.c:663 control = (struct mbuf *) 0x0 to = (struct sockaddr *) 0xc21240a0 error = 0 #8 0xc0503a5b in sendto (td=0xc16e1200, uap=0xc1d5d3c0) at ../../../kern/uipc_syscalls.c:784 msg = {msg_name = 0xc21240a0, msg_namelen = 16, msg_iov = 0xce651cbc, msg_iovlen = 1, msg_control = 0x0, msg_controllen = 3254741312, msg_flags = 0} aiov = {iov_base = 0x804f8e0, iov_len = 0} error = -1049751040 #9 0xc060e2a0 in syscall (frame= {tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = 34, tf_esi = 34, tf_ebp = -1077940968, tf_isp = -832234124, tf_ebx = -1077941008, tf_edx = 4, tf_ecx = 1, tf_eax = 133, tf_trapno = 12, tf_err = 2, tf_eip = 671938895, tf_cs = 31, tf_eflags = 518, tf_esp = -1077941044, tf_ss = 47}) at ../../../i386/i386/trap.c:1010 params = 0xbfbfecd0 "\004" callp = (struct sysent *) 0xc068a868 td = (struct thread *) 0xc1d5d3c0 p = (struct proc *) 0xce651cc4 orig_tf_eflags = 518 sticks = 0 error = 0 narg = 6 args = {4, 134543550, 34, 4, -1077941008, 16, 0, 1} code = 133 #10 0xc05fefed in Xint0x80_syscall () at {standard input}:136 No locals. #11 0x0804a9ae in ?? () No symbol table info available. ---Type <return> to continue, or q <return> to quit--- #12 0x0804a60e in ?? () No symbol table info available. #13 0x0804befb in ?? () No symbol table info available. #14 0x0804a019 in ?? () No symbol table info available. #15 0x08048d22 in ?? () No symbol table info available. (kgdb) up #1 0xc05301fe in ether_output (ifp=0x0, m=0xc16ef000, dst=0xce651b20, rt0=0x0) at ../../../net/if_ethersubr.c:303 303 if ((error = (*ng_ether_output_p)(ifp, &m)) != 0) { (kgdb) list 298 } 299 } 300 301 /* Handle ng_ether(4) processing, if any */ 302 if (ng_ether_output_p != NULL) { 303 if ((error = (*ng_ether_output_p)(ifp, &m)) != 0) { 304 bad: if (m != NULL) 305 m_freem(m); 306 return (error); 307 } (kgdb) p ifp $1 = (struct ifnet *) 0x0 (kgdb) up #2 0xc0576add in ipx_outputfl (m0=0xc16ef000, ro=0x0, flags=48) at ../../../netipx/ipx_outputfl.c:134 134 error = (*ifp->if_output)(ifp, m0, (kgdb) p ifp $2 = (struct ifnet *) 0xc16e1200 (kgdb) list 129 if (htons(ipx->ipx_len) <= ifp->if_mtu) { 130 ipxstat.ipxs_localout++; 131 if (ipx_copy_output) { 132 ipx_watch_output(m0, ifp); 133 } 134 error = (*ifp->if_output)(ifp, m0, 135 (struct sockaddr *)dst, ro->ro_rt); 136 goto done; 137 } else { 138 ipxstat.ipxs_mtutoosmall++; (kgdb) quit this hack prevent panic index: sys/netgraph/ng_ether.c =================================================================== RCS file: /usr/cvs/freebsd/ncvs/src/sys/netgraph/ng_ether.c,v retrieving revision 1.27 diff -u -r1.27 ng_ether.c --- sys/netgraph/ng_ether.c 31 Oct 2003 18:32:11 -0000 1.27 +++ sys/netgraph/ng_ether.c 6 Jun 2004 14:00:25 -0000 @@ -269,9 +269,36 @@ static int ng_ether_output(struct ifnet *ifp, struct mbuf **mp) { - const node_p node = IFP2NG(ifp); - const priv_p priv = NG_NODE_PRIVATE(node); + const node_p node; + const priv_p priv; int error = 0; + + if (!ifp) { + printf("%s(): ifp = 0\n", __func__); + return (EINVAL); + } + if (!(node = IFP2NG(ifp))) { + printf( "%s(): IFP2NG(ifp:%p) = 0 \\\n" + "\t{ if_xname = \"%s\", if_dname = \"%s\", " + "if_index = %d }\n", + __func__, + ifp, + ifp->if_xname, + ifp->if_dname, + ifp->if_index); + return (EINVAL); + } + if (!(priv = NG_NODE_PRIVATE(node))) { + printf( "%s(): NG_NODE_PRIVATE(IFP2NG(ifp:%p):%p) = 0 \\\n" + "\t{ if_xname = \"%s\", if_dname = \"%s\", " + "if_index = %d }\n", + __func__, + ifp, node, + ifp->if_xname, + ifp->if_dname, + ifp->if_index); + return (EINVAL); + } /* If "upper" hook not connected, let packet continue */ if (priv->upper == NULL) messages on console... ng_ether_output(): IFP2NG(ifp:0xc16e1200) = 0 \ { if_xname = "fxp0f3", if_dname = "ef", if_index = 5 } ng_ether_output(): IFP2NG(ifp:0xc16e1400) = 0 \ { if_xname = "fxp0f2", if_dname = "ef", if_index = 4 } ng_ether_output(): IFP2NG(ifp:0xc16e1600) = 0 \ { if_xname = "fxp0f1", if_dname = "ef", if_index = 3 } ng_ether_output(): IFP2NG(ifp:0xc16e1800) = 0 \ { if_xname = "fxp0f0", if_dname = "ef", if_index = 2 } dmesg & netgraph start script here... http://bspu.secna.ru/~swp/freebsd/panic/panic.1 /swp
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040608035714.GA867>