Hello <div>I used gdb serial debug gpxe1.0.1 in my board lan rtl8111b. I used undionly for boot file . After PXE ,Ctrl_B break in the gpxe shell ,used autoboot for debug.In the debugger ,I set some breakpoints, such as dhcp_tx, dhcp_rx_offer, ipv4_tx. It could break in dhcp_tx after dhcp net0(XXX).</div>
<div><font class="Apple-style-span" face="'Times New Roman'" size="4"><span class="Apple-style-span" style="font-size: 16px; line-height: 24px;">Debug info:</span></font></div><div><font class="Apple-style-span" face="'Times New Roman'" size="4"><span class="Apple-style-span" style="font-size: 16px; line-height: 24px;"><div>
Breakpoint 5, dhcp_tx (dhcp=0x152c4) at net/udp/dhcp.c:1208</div><div>1208<span class="Apple-tab-span" style="white-space:pre">        </span>static int dhcp_tx ( struct dhcp_session *dhcp ) {</div><div>(gdb) n</div><div>1213<span class="Apple-tab-span" style="white-space:pre">                        </span>.netdev = dhcp->netdev,</div>
<div>(gdb) n</div><div>1216<span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><div>(gdb) n</div><div>1218<span class="Apple-tab-span" style="white-space:pre">                </span>uint8_t msgtype = dhcp->state->tx_msgtype;</div>
<div>(gdb) n</div><div>1225<span class="Apple-tab-span" style="white-space:pre">                </span>start_timer ( &dhcp->timer );</div><div>(gdb) p msgtype</div><div>$3 = 1 '\001'</div><div>(gdb) n</div><div>1228<span class="Apple-tab-span" style="white-space:pre">                </span>iobuf = xfer_alloc_iob ( &dhcp->xfer, DHCP_MIN_LEN );</div>
<div>(gdb) n</div><div>1229<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ! iobuf )</div><div>(gdb) n</div><div>1233<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = dhcp_create_request ( &dhcppkt, dhcp->netdev, msgtype,</div>
<div>(gdb) n</div><div>dhcp_create_request (dhcppkt=0x36120, netdev=0x151a4, msgtype=1, ciaddr=..., </div><div> data=0x15bf8, max_len=552) at net/udp/dhcp.c:1109</div><div>1109<span class="Apple-tab-span" style="white-space:pre">                                </span> struct in_addr ciaddr, void *data, size_t max_len ) {</div>
<div>(gdb) n</div><div>1120<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = dhcp_create_packet ( dhcppkt, netdev, msgtype,</div><div>(gdb) n</div><div>1130<span class="Apple-tab-span" style="white-space:pre">                </span>dhcppkt->dhcphdr->ciaddr = ciaddr;</div>
<div>(gdb) n</div><div>1135<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_EB_ENCAP, dhcp_features,</div><div>(gdb) n</div><div>1143<span class="Apple-tab-span" style="white-space:pre">                </span>fetch_setting ( &netdev->settings.settings, &busid_setting, &dhcp_desc,</div>
<div>(gdb) n</div><div>1145<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_EB_BUS_ID, &dhcp_desc,</div><div>(gdb) n</div><div>1155<span class="Apple-tab-span" style="white-space:pre">                </span>client_id.ll_proto = ntohs ( netdev->ll_protocol->ll_proto );</div>
</div><div><div>(gdb) n</div><div>1156<span class="Apple-tab-span" style="white-space:pre">                </span>ll_addr_len = netdev->ll_protocol->ll_addr_len;</div><div>(gdb) n</div><div>1158<span class="Apple-tab-span" style="white-space:pre">                </span>memcpy ( client_id.ll_addr, netdev->ll_addr, ll_addr_len );</div>
</div><div><div>(gdb) n</div><div>1159<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_CLIENT_ID, &client_id,</div></div><div><div>(gdb) n</div><div>1167<span class="Apple-tab-span" style="white-space:pre">                </span>client_uuid.type = DHCP_CLIENT_UUID_TYPE;</div>
<div>(gdb) n</div><div>1168<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( len = fetch_uuid_setting ( NULL, &uuid_setting,</div></div><div><div>(gdb) n</div><div>1170<span class="Apple-tab-span" style="white-space:pre">                        </span>if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_CLIENT_UUID,</div>
<div>(gdb) n</div><div>1180<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( len = fetch_setting_len ( NULL, &user_class_setting ) ) >= 0 ) {</div><div>(gdb) n</div><div>1194<span class="Apple-tab-span" style="white-space:pre">        </span>}</div>
<div>(gdb) n</div><div>dhcp_tx (dhcp=0x152c4) at net/udp/dhcp.c:1242</div><div>1242<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = dhcp->state->tx ( dhcp, &dhcppkt, &peer ) ) != 0 ) {</div>
<div>(gdb) n</div><div>1249<span class="Apple-tab-span" style="white-space:pre">                </span>iob_put ( iobuf, dhcppkt.len );</div><div>(gdb) n</div><div>1250<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = xfer_deliver_iob_meta ( &dhcp->xfer, iob_disown ( iobuf ),</div>
<div>(gdb) n</div><div><br></div><div>Breakpoint 4, ipv4_tx (iobuf=0x15e20, tcpip_protocol=0x150b8, st_src=0x152e8, </div><div> st_dest=0x144d8, netdev=0x151a4, trans_csum=0x15bf6) at net/ipv4.c:306</div><div>306<span class="Apple-tab-span" style="white-space:pre">                        </span> uint16_t *trans_csum ) {</div>
<div>(gdb) n</div><div>307<span class="Apple-tab-span" style="white-space:pre">                </span>struct iphdr *iphdr = iob_push ( iobuf, sizeof ( *iphdr ) );</div><div>(gdb) n</div><div>316<span class="Apple-tab-span" style="white-space:pre">                </span>memset ( iphdr, 0, sizeof ( *iphdr ) );</div>
<div>(gdb) n</div><div>317<span class="Apple-tab-span" style="white-space:pre">                </span>iphdr->verhdrlen = ( IP_VER | ( sizeof ( *iphdr ) / 4 ) );</div></div><div><div>(gdb) n</div><div>318<span class="Apple-tab-span" style="white-space:pre">                </span>iphdr->service = IP_TOS;</div>
<div>(gdb) n</div><div>319<span class="Apple-tab-span" style="white-space:pre">                </span>iphdr->len = htons ( iob_len ( iobuf ) );<span class="Apple-tab-span" style="white-space:pre">        </span></div><div>(gdb) n</div><div>
320<span class="Apple-tab-span" style="white-space:pre">                </span>iphdr->ident = htons ( ++next_ident );</div><div>(gdb) n</div><div>321<span class="Apple-tab-span" style="white-space:pre">                </span>iphdr->ttl = IP_TTL;</div>
<div>(gdb) n</div><div>322<span class="Apple-tab-span" style="white-space:pre">                </span>iphdr->protocol = tcpip_protocol->tcpip_proto;</div><div>(gdb) n</div><div>323<span class="Apple-tab-span" style="white-space:pre">                </span>iphdr->dest = sin_dest->sin_addr;</div>
<div>(gdb) n</div><div>326<span class="Apple-tab-span" style="white-space:pre">                </span>next_hop = iphdr->dest;</div><div>(gdb) n</div><div>327<span class="Apple-tab-span" style="white-space:pre">                </span>if ( sin_src )</div>
<div>(gdb) n</div><div>328<span class="Apple-tab-span" style="white-space:pre">                        </span>iphdr->src = sin_src->sin_addr;</div></div><div><div>(gdb) n</div><div>329<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( next_hop.s_addr != INADDR_BROADCAST ) &&</div>
<div>(gdb) n</div><div>335<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ! netdev ) {</div><div>(gdb) n</div><div>342<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = ipv4_ll_addr ( next_hop, iphdr->src, netdev,</div>
<div>(gdb) n</div><div>350<span class="Apple-tab-span" style="white-space:pre">                </span>if ( trans_csum )</div><div>(gdb) n</div><div>351<span class="Apple-tab-span" style="white-space:pre">                        </span>*trans_csum = ipv4_pshdr_chksum ( iobuf, *trans_csum );</div>
<div>(gdb) n</div><div>352<span class="Apple-tab-span" style="white-space:pre">                </span>iphdr->chksum = tcpip_chksum ( iphdr, sizeof ( *iphdr ) );</div></div><div><div>(gdb) n</div><div>361<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = net_tx ( iobuf, netdev, &ipv4_protocol, ll_dest ) ) != 0 ) {</div>
<div>(gdb) n</div><div>net_tx (iobuf=0x15e20, netdev=0x151a4, net_protocol=0x14d9c, ll_dest=0x36084)</div><div> at net/netdevice.c:540</div><div>540<span class="Apple-tab-span" style="white-space:pre">                </span> struct net_protocol *net_protocol, const void *ll_dest ) {</div>
<div>(gdb) n</div><div>541<span class="Apple-tab-span" style="white-space:pre">                </span>struct ll_protocol *ll_protocol = netdev->ll_protocol;</div><div>(gdb) n</div><div>549<span class="Apple-tab-span" style="white-space:pre">                </span>netdev_poll ( netdev );</div>
<div>(gdb) n</div><div>552<span class="Apple-tab-span" style="white-space:pre">                </span>if ( ( rc = ll_protocol->push ( netdev, iobuf, ll_dest, netdev->ll_addr,</div><div>(gdb) n</div><div>eth_push (netdev=0x151a4, iobuf=0x15e20, ll_dest=0x36084, ll_source=0x151d8, </div>
<div> net_proto=8) at net/ethernet.c:55</div><div>55<span class="Apple-tab-span" style="white-space:pre">                        </span> const void *ll_source, uint16_t net_proto ) {</div><div>(gdb) n</div><div>56<span class="Apple-tab-span" style="white-space:pre">                </span>struct ethhdr *ethhdr = iob_push ( iobuf, sizeof ( *ethhdr ) );</div>
<div>(gdb) n</div><div>59<span class="Apple-tab-span" style="white-space:pre">                </span>memcpy ( ethhdr->h_dest, ll_dest, ETH_ALEN );</div><div>(gdb) n</div><div>60<span class="Apple-tab-span" style="white-space:pre">                </span>memcpy ( ethhdr->h_source, ll_source, ETH_ALEN );</div>
<div>(gdb) n</div><div>61<span class="Apple-tab-span" style="white-space:pre">                </span>ethhdr->h_protocol = net_proto;</div><div>(gdb) n</div><div>64<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>
(gdb) n</div><div>net_tx (iobuf=0x15e20, netdev=0x151a4, net_protocol=0x14d9c, ll_dest=0x36084)</div><div> at net/netdevice.c:559</div><div>559<span class="Apple-tab-span" style="white-space:pre">                </span>return netdev_tx ( netdev, iobuf );</div>
<div>(gdb) n</div><div>560<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>(gdb) n</div><div>ipv4_tx (iobuf=0x15e20, tcpip_protocol=<value optimized out>, </div><div> st_src=<value optimized out>, st_dest=0x144d8, netdev=0x151a4, </div>
<div> trans_csum=0x15bf6) at net/ipv4.c:372</div><div>372<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>(gdb) n</div><div>tcpip_tx (iobuf=<value optimized out>, tcpip_protocol=<value optimized out>, </div>
<div> st_src=<value optimized out>, st_dest=0x144d8, netdev=0x151a4, </div><div> trans_csum=0x15bf6) at net/tcpip.c:80</div><div>80<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>(gdb) n</div>
<div>udp_xfer_deliver_iob (xfer=0x15bf0, iobuf=0x15e20, meta=<value optimized out>)</div><div> at net/udp.c:409</div><div>409<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>(gdb) n</div><div>
xfer_deliver_iob_meta (xfer=<value optimized out>, </div><div> iobuf=<value optimized out>, meta=<value optimized out>) at core/xfer.c:162</div><div>162<span class="Apple-tab-span" style="white-space:pre">                </span>xfer_put ( dest );</div>
<div>(gdb) n</div><div>164<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>(gdb) n</div><div>dhcp_tx (dhcp=0x152c4) at net/udp/dhcp.c:1258</div><div>1258<span class="Apple-tab-span" style="white-space:pre">                </span>free_iob ( iobuf );</div>
<div>(gdb) n</div><div>1260<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>(gdb) n</div><div>dhcp_timer_expired (timer=<value optimized out>, fail=<value optimized out>)</div><div> at net/udp/dhcp.c:1364</div>
<div>1364<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>(gdb) n</div><div>retry_step (process=<value optimized out>) at net/retry.c:181</div><div>181<span class="Apple-tab-span" style="white-space:pre">                </span>list_for_each_entry_safe ( timer, tmp, &timers, list ) {</div>
<div>(gdb) n</div><div>186<span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>(gdb) n</div><div>monojob_wait (string=<value optimized out>) at core/monojob.c:76</div><div>76<span class="Apple-tab-span" style="white-space:pre">                        </span>if ( iskey() ) {</div>
<div>(gdb) n</div><div>87<span class="Apple-tab-span" style="white-space:pre">                        </span>elapsed = ( currticks() - last_progress_dot );</div><div>(gdb) n</div><div>88<span class="Apple-tab-span" style="white-space:pre">                        </span>if ( elapsed >= TICKS_PER_SEC ) {</div>
<div>(gdb) n</div><div>74<span class="Apple-tab-span" style="white-space:pre">                </span>while ( monojob_rc == -EINPROGRESS ) {</div><div>(gdb) n</div><div>75<span class="Apple-tab-span" style="white-space:pre">                        </span>step();</div>
<div>(gdb) c</div><div>Continuing.</div></div><div>Only break in xx_tx,but not break in xx_rx. I used wireshark in the server to moniter, found 4 times dhcp disocver and dhcp offer, and then timeout. Those debug infos are enough. Give some ideas for help me, thanks.</div>
</span></font></div><div><font class="Apple-style-span" face="'Times New Roman'" size="4"><span class="Apple-style-span" style="font-size: 16px; line-height: 24px; "><br></span></font></div><div><br><div class="gmail_quote">
在 2010年8月12日 下午5:15,kun zhu <span dir="ltr"><<a href="mailto:bozer1228@gmail.com">bozer1228@gmail.com</a>></span>写道:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Hello once more<br></div></blockquote><div><div></div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><br>
</div><div class="gmail_quote">2010/7/29 Thomas Miletich <span dir="ltr"><<a href="mailto:thomas.miletich@gmail.com" target="_blank">thomas.miletich@gmail.com</a>></span><div><div></div><div><br>
<blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex" class="gmail_quote">Hello once more<br>after reading your mail again I noticed that you say DHCP and TFTP<br>work is done, and then gPXE starts. Does that mean you're using<br>
'undionly.kpxe'? If that's the case we will have to look in a<br>different direction to find the problem.<br><br>--<br><font color="#888888">Thomas<br></font>
<div>
<div></div>
<div><br>On Thu, Jul 29, 2010 at 11:50 AM, Thomas Miletich<br><<a href="mailto:thomas.miletich@gmail.com" target="_blank">thomas.miletich@gmail.com</a>> wrote:<br>> Hello<br>> from a quick comparison between the gPXE and linux driver I can't see<br>
> any differences in the handling of 8111B specific things. As the<br>> non-variant-specific code in the r8169 driver is well tested I don't<br>> know what could be the problem.<br>><br>> To give us an idea about the problem we need more information from the driver.<br>
><br>> If you have another computer and a serial cable you can enable serial<br>> console output by editing 'src/config/console.h'.<br>> In this file please replace "//#define CONSOLE_SERIAL" with<br>
> "#define CONSOLE_SERIAL".<br>><br>> You can enable debugging output from the driver by building gPXE with<br>> this command:<br>><br>> make bin/r8169.dsk DEBUG=r8169<br>><br>> (adjust 'bin/r8169.dsk' to the image type you're using)<br>
><br>> Now capture the output from gPXE on the other computer using some<br>> terminal program(default settings are 115200 8N1)<br>> Please send us the capture so we can look into the problem.<br>><br>> --<br>
> Thomas<br>><br>> On Thu, Jul 29, 2010 at 10:26 AM, 朱堃 <<a href="mailto:bozer1228@gmail.com" target="_blank">bozer1228@gmail.com</a>> wrote:<br>>> I have a motherboard with onboard LAN RTL8111B.This device is work well in<br>
>> windows xp. I run it with gPXE . I get error. I run Wireshark to monitor<br>>> network in the server, DHCP ,TFTP work done, gPXE start work. In network<br>>> moniter , it show repeat arp request and reply. In gpxe , i found netdevice<br>
>> can transmit packet, but can't not receive packet.gPXE is not support<br>>> RTL8111B?<br>>><br>>> _______________________________________________<br>>> gPXE-devel mailing list<br>>> <a href="mailto:gPXE-devel@etherboot.org" target="_blank">gPXE-devel@etherboot.org</a><br>
>> <a href="http://etherboot.org/mailman/listinfo/gpxe-devel" target="_blank">http://etherboot.org/mailman/listinfo/gpxe-devel</a><br>>><br>>><br>><br></div></div></blockquote></div></div></div><br>
</blockquote></div></div></div><br>
</blockquote></div><br></div>