lwip-users
[Top][All Lists]
Advanced

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

Re: [lwip-users] lwip 1.3 UDP - DNS strange behaviour


From: Sergio Sider
Subject: Re: [lwip-users] lwip 1.3 UDP - DNS strange behaviour
Date: Tue, 20 Jan 2009 18:17:40 -0200

Hi Jonathan,

Yes, DNS_DEBUG was on. THe log I pasted in the previous message had
all dns.c messages.

I am using lwip "ported" by LuminaryMicro, and CodeSourcery (GCC)

#define SYS_LIGHTWEIGHT_PROT            1           // default is 0
#define NO_SYS                          1           // default is 0

On interesting fact: A custom UDP message I send on the beggining was
not transmitted also although the program thought it was. After a few
seconds, the udp messages started to work. But DNS donĀ“t, but that's
because of the timeout that never occurs, so there is no retry.

Regards,
Sergio.


On Tue, Jan 20, 2009 at 5:45 PM, Jonathan Larmour <address@hidden> wrote:
> Sergio Sider wrote:
>> Hi All,
>> I turned on several DEBUG messages and waited for netif_is_up before
>> call dns_gethostbyname, but the problem is present.
>> I tried calling dns_gethostbyname 5 seconds AFTER the network
>> interface is up and it worked, but I recall that in the past I still
>> had problems sometimes, even with the delay.
>> When using DHCP, there is no problem, even if I call dns_gethostbyname
>> immediately after receiving the designated IP.
>>
>>
>> Here are the logs of my application:
>
> Can you enable DNS_DEBUG in lwipopts.h?
>
> Are you using the tcpip thread? If you are unsure, then you can answer with
> how you are initialising lwIP,and what value NO_SYS has in your lwipopts.h.
>
> Jifl
>
>> ================ without the explicit delay===================
>> - No timeout occurs and the callback is never called
>> - the dns UDP packet is not really sent, although the messages told me so
>>
>>
>>
>> Powering SD-CARD socket
>> Initialing I2C
>> Initializing RTC Chip
>> Loading config from E2PROM
>> Configuring Systick
>> Initializing Filesystem
>> PRE-Loading ini defaults
>> Trying to load IDC.INI
>> Parsing inifile
>> Inifile read ok!
>> IDC.INI read!
>> Openning IDC_CHAM.TXT for check
>> Size = 2079296, 32489 records
>> Verifying last 50 calls
>> Openning IDC_AGEN.TXT for check
>> Size = 98397, 1131 records
>> End of file checking
>> Mac Address = 00:1a:b6:00:03:b7
>> initialing tcp/ip stack (IPADDR_USE_STATIC)
>> dns_init: initializing
>> udp_bind(ipaddr = 0.0.0.0, port = 0)
>> udp_bind: bound to 0.0.0.0, port 4096
>> netif_set_ipaddr: netif address being changed
>> netif: IP address of interface lm set to 192.168.0.180
>> netif: netmask of interface lm set to 255.255.255.0
>> netif: GW address of interface lm set to 192.168.0.2
>> netif: added interface lm IP addr 192.168.0.180 netmask 255.255.255.0
>> gw 192.168.0.2
>> netif: setting default interface lm
>> find_entry: found empty entry 0
>> find_entry: selecting empty entry 0
>> etharp_request: sending ARP request.
>> etharp_raw: sending raw ARP packet.
>> initializing http server
>> tcp_bind: bind to port 4321
>> Setting UART2 for IDC serial
>> Entering cooperative multitasking loop
>> SNTP: ip address defined and interface is up!
>> IP:    192.168.0.180
>> MASK:  255.255.255.0
>> GW:    192.168.0.2
>> DNS1:  200.30.0.97
>> DNS2:  200.204.0.10
>> gethostbyname for host time.nist.gov
>> dns_enqueue: "time.nist.gov": use DNS entry 0
>> dns_send: dns_servers[0] "time.nist.gov": request
>> udp_connect: connected to 200.30.0.97,port 53
>> udp_send
>> udp_send: added header in given pbuf 200015f8
>> udp_send: sending datagram of length 39
>> udp_send: UDP packet length 39
>> inet_chksum_pseudo(): checksumming pbuf 200015f8 (has next 0)
>> inet_chksum_pseudo(): pbuf chain lwip_chksum()=12c5
>> udp_send: UDP checksum 0xed3a
>> udp_send: ip_output_if (,,,,IP_PROTO_UDP,)
>> ip_output_if: lm0
>> IP header:
>> +-------------------------------+
>> | 4 | 5 |  0x00 |        59     | (v, hl, tos, len)
>> +-------------------------------+
>> |        0      |000|       0   | (id, flags, offset)
>> +-------------------------------+
>> |  255  |   17  |    0x31d6     | (ttl, proto, chksum)
>> +-------------------------------+
>> |  192  |  168  |    0  |  180  | (src)
>> +-------------------------------+
>> |  200  |   30  |    0  |   97  | (dest)
>> +-------------------------------+
>> netif->output()find_entry: found empty entry 1
>> find_entry: selecting empty entry 1
>> etharp_request: sending ARP request.
>> etharp_raw: sending raw ARP packet.
>> etharp_query: queued packet 200015f8 on ARP entry 1
>> Initial response = -14
>> [fa]IDCPC found on serial-port!
>> [80][ea]IDCPC ready for lines 1-4
>> udp_bind(ipaddr = 0.0.0.0, port = 0)
>> udp_bind: bound to 0.0.0.0, port 4097
>> udp_connect: connected to 192.168.0.255,port 1234
>> udp_send
>> udp_send: added header in given pbuf 200016cc
>> udp_send: sending datagram of length 86
>> udp_send: UDP packet length 86
>> inet_chksum_pseudo(): checksumming pbuf 200016cc (has next 0)
>> inet_chksum_pseudo(): pbuf chain lwip_chksum()=d5e7
>> udp_send: UDP checksum 0x2a18
>> udp_send: ip_output_if (,,,,IP_PROTO_UDP,)
>> ip_output_if: lm0
>> IP header:
>> +-------------------------------+
>> | 4 | 5 |  0x00 |       106     | (v, hl, tos, len)
>> +-------------------------------+
>> |        1      |000|       0   | (id, flags, offset)
>> +-------------------------------+
>> |  255  |   17  |    0x387e     | (ttl, proto, chksum)
>> +-------------------------------+
>> |  192  |  168  |    0  |  180  | (src)
>> +-------------------------------+
>> |  192  |  168  |    0  |  255  | (dest)
>> +-------------------------------+
>> netif->output()etharp_send_ip: sending packet 200016cc
>> Sending BROADCAST ( 78) [01|0|  |  |                         |
>> |192.168.000.180               | ]
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> etharp_timer
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> etharp_timer
>> etharp_timer: expired pending entry 0.
>> etharp_timer: expired pending entry 1.
>> etharp_timer: freeing entry 1, packet queue 2000821c.
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> ...
>>
>>
>>
>> ================ with explicit 5 seconds delay===================
>> WORKED
>>
>>
>>
>> Powering SD-CARD socket
>> Initialing I2C
>> Initializing RTC Chip
>> Loading config from E2PROM
>> Configuring Systick
>> Initializing Filesystem
>> PRE-Loading ini defaults
>> Trying to load IDC.INI
>> Parsing inifile
>> Inifile read ok!
>> IDC.INI read!
>> Openning IDC_CHAM.TXT for check
>> Size = 2079296, 32489 records
>> Verifying last 50 calls
>> Openning IDC_AGEN.TXT for check
>> Size = 98397, 1131 records
>> End of file checking
>> Mac Address = 00:1a:b6:00:03:b7
>> initialing tcp/ip stack (IPADDR_USE_STATIC)
>> dns_init: initializing
>> udp_bind(ipaddr = 0.0.0.0, port = 0)
>> udp_bind: bound to 0.0.0.0, port 4096
>> netif_set_ipaddr: netif address being changed
>> netif: IP address of interface lm set to 192.168.0.180
>> netif: netmask of interface lm set to 255.255.255.0
>> netif: GW address of interface lm set to 192.168.0.2
>> netif: added interface lm IP addr 192.168.0.180 netmask 255.255.255.0
>> gw 192.168.0.2
>> netif: setting default interface lm
>> find_entry: found empty entry 0
>> find_entry: selecting empty entry 0
>> etharp_request: sending ARP request.
>> etharp_raw: sending raw ARP packet.
>> initializing http server
>> tcp_bind: bind to port 4321
>> Setting UART2 for IDC serial
>> Entering cooperative multitasking loop
>> SNTP: ip address defined and interface is up!
>> IP:    192.168.0.180
>> MASK:  255.255.255.0
>> GW:    192.168.0.2
>> DNS1:  200.30.0.97
>> DNS2:  200.204.0.10
>> [fa]IDCPC found on serial-port!
>> [80][ea]IDCPC ready for lines 1-4
>> udp_bind(ipaddr = 0.0.0.0, port = 0)
>> udp_bind: bound to 0.0.0.0, port 4097
>> udp_connect: connected to 192.168.0.255,port 1234
>> udp_send
>> udp_send: added header in given pbuf 200015f8
>> udp_send: sending datagram of length 86
>> udp_send: UDP packet length 86
>> inet_chksum_pseudo(): checksumming pbuf 200015f8 (has next 0)
>> inet_chksum_pseudo(): pbuf chain lwip_chksum()=d5e7
>> udp_send: UDP checksum 0x2a18
>> udp_send: ip_output_if (,,,,IP_PROTO_UDP,)
>> ip_output_if: lm0
>> IP header:
>> +-------------------------------+
>> | 4 | 5 |  0x00 |       106     | (v, hl, tos, len)
>> +-------------------------------+
>> |        0      |000|       0   | (id, flags, offset)
>> +-------------------------------+
>> |  255  |   17  |    0x387f     | (ttl, proto, chksum)
>> +-------------------------------+
>> |  192  |  168  |    0  |  180  | (src)
>> +-------------------------------+
>> |  192  |  168  |    0  |  255  | (dest)
>> +-------------------------------+
>> netif->output()etharp_send_ip: sending packet 200015f8
>> Sending BROADCAST ( 78) [01|0|  |  |                         |
>> |192.168.000.180               | ]
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> tcp_slowtmr: no active pcbs
>> etharp_timer
>> gethostbyname for host time.nist.gov
>> dns_enqueue: "time.nist.gov": use DNS entry 0
>> dns_send: dns_servers[0] "time.nist.gov": request
>> udp_connect: connected to 200.30.0.97,port 53
>> udp_send
>> udp_send: added header in given pbuf 200015f8
>> udp_send: sending datagram of length 39
>> udp_send: UDP packet length 39
>> inet_chksum_pseudo(): checksumming pbuf 200015f8 (has next 0)
>> inet_chksum_pseudo(): pbuf chain lwip_chksum()=12c5
>> udp_send: UDP checksum 0xed3a
>> udp_send: ip_output_if (,,,,IP_PROTO_UDP,)
>> ip_output_if: lm0
>> IP header:
>> +-------------------------------+
>> | 4 | 5 |  0x00 |        59     | (v, hl, tos, len)
>> +-------------------------------+
>> |        1      |000|       0   | (id, flags, offset)
>> +-------------------------------+
>> |  255  |   17  |    0x31d5     | (ttl, proto, chksum)
>> +-------------------------------+
>> |  192  |  168  |    0  |  180  | (src)
>> +-------------------------------+
>> |  200  |   30  |    0  |   97  | (dest)
>> +-------------------------------+
>> netif->output()find_entry: found empty entry 1
>> find_entry: selecting empty entry 1
>> etharp_request: sending ARP request.
>> etharp_raw: sending raw ARP packet.
>> etharp_query: queued packet 200015f8 on ARP entry 1
>> Initial response = -14
>> update_arp_entry()
>> update_arp_entry: 192.168.0.2 - 00:1b:2f:e6:74:a4
>> find_entry: found matching pending entry 1
>> update_arp_entry: updating stable entry 1
>> etharp_send_ip: sending packet 20001668
>> etharp_arp_input: incoming ARP reply
>> dhcp_arp_reply()
>> ip_input: iphdr->dest 0xb400a8c0 netif->ip_addr 0xb400a8c0 (0xa8c0,
>> 0xa8c0, 0xb4000000)
>> ip_input: packet accepted on interface lm
>> ip_input:
>> IP header:
>> +-------------------------------+
>> | 4 | 5 |  0x00 |       153     | (v, hl, tos, len)
>> +-------------------------------+
>> |    59434      |010|       0   | (id, flags, offset)
>> +-------------------------------+
>> |  247  |   17  |    0x114d     | (ttl, proto, chksum)
>> +-------------------------------+
>> |  200  |   30  |    0  |   97  | (src)
>> +-------------------------------+
>> |  192  |  168  |    0  |  180  | (dest)
>> +-------------------------------+
>> ip_input: p->len 153 p->tot_len 153
>> udp_input: received datagram of length 133
>> UDP header:
>> +-------------------------------+
>> |        53     |      4096     | (src port, dest port)
>> +-------------------------------+
>> |       133     |     0xbb0a    | (len, chksum)
>> +-------------------------------+
>> udp (192.168.0.180, 4096) <-- (200.30.0.97, 53)
>> pcb (0.0.0.0, 4096) --- (200.30.0.97, 53)
>> udp_input: calculating checksum
>> inet_chksum_pseudo(): checksumming pbuf 20009c14 (has next 0)
>> inet_chksum_pseudo(): pbuf chain lwip_chksum()=ffff
>> dns_recv: "time.nist.gov": response = 192.43.244.18
>> Found ip of host time.nist.gov = 192.43.244.18
>>
>>
>>
>> Any idea ? Could by ARP related?
>>
>> Thanks,
>> Sergio
>>
>>
>>
>>
>>
>>
>>
>>
>> On Mon, Jan 19, 2009 at 5:04 PM, Jonathan Larmour <address@hidden> wrote:
>>> Rejean Groleau wrote:
>>>> Hi Sergio,
>>>>
>>>> I had the same problem a while back. My problem was two-fold:
>>>>
>>>> First, I did not have enough pbufs (PBUF_POOL_SIZE and MEMP_NUM_PBUF)
>>>> to do everything I was doing at startup. Once I got the LWIP_DEBUGF
>>>> and LWIP_PLATFORM_DIAG macros properly implemented, I was able to see
>>>> the errors coming from the dns_send() function.
>>> That should have timed out eventually though, right? Just checking there
>>> isn't a real bug in the lwIP DNS code here - it shoudl be able to cope with
>>> running out of pbufs.
>>>
>>>> Then, I was not waiting for the interface to be up and initialized before
>>>> calling dns_gethostbyname(). This was solved by calling netif_is_up().
>>> Again, did it time out eventually? Or it should have worked shortly after
>>> the interface was up, even if that wasn't straight away.
>>>
>>> Jifl
>>> --
>>> eCosCentric Limited      http://www.eCosCentric.com/     The eCos experts
>>> Barnwell House, Barnwell Drive, Cambridge, UK.       Tel: +44 1223 245571
>>> Registered in England and Wales: Reg No 4422071.
>>> ------["Si fractum non sit, noli id reficere"]------       Opinions==mine
>>>
>>>
>>> _______________________________________________
>>> lwip-users mailing list
>>> address@hidden
>>> http://lists.nongnu.org/mailman/listinfo/lwip-users
>>
>>
>> _______________________________________________
>> lwip-users mailing list
>> address@hidden
>> http://lists.nongnu.org/mailman/listinfo/lwip-users
>
>
> --
> eCosCentric Limited      http://www.eCosCentric.com/     The eCos experts
> Barnwell House, Barnwell Drive, Cambridge, UK.       Tel: +44 1223 245571
> Registered in England and Wales: Reg No 4422071.
> ------["Si fractum non sit, noli id reficere"]------       Opinions==mine
>
>
> _______________________________________________
> lwip-users mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/lwip-users
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]