Skip to content

Built-in TCP/IP: issue with setting local LAN DNS #3160

@scaprile

Description

@scaprile

mg_sendnsreq() assumes a connection can be immediately used after calling mg_connect (does not wait for a CONNECT event), so when "connecting" to a local DNS, ARP lookup is triggered but mg_send() is called right away, failing, and calling mg_error() to close the connection

Timeline:

mg_connect
    mg_resolve
        mg_sendnsreq
            mg_connect
                mg_resolve
                    mg_connect_resolved
-------------------------------------------------------------- remote DNS
                        mac_resolved
                            MG_EV_CONNECT
            dnsc->c->pfn <- dns_cb
            mg_dns_send
                mg_send
-------------------------------------------------------------- local DNS
                        arp_lookup
            dnsc->c->pfn <- dns_cb
            mg_dns_send
                mg_send ! fails because we are still resolving
... ARP response arrives
    mac_resolved
        MG_EV_CONNECT

Local DNS verbose log:

28e5dc4 3 net.c:176:mg_connect          5 -1 udp://time.google.com:123
28e5dc4 3 net.c:176:mg_connect          6 -1 udp://192.168.69.2:53
28e5dc4 3 net_builtin.c:1138:mg_connect 6 192.168.69.88:42829 -> 192.168.69.2:53
28e5dc4 3 net_builtin.c:1149:mg_connect 6 ARP lookup...
28e5dc4 4 net_builtin.c:184:settmout    6 2 -> 28e5e27
28e5dc4 4 dns.c:260:mg_sendnsreq        5 resolving time.google.com @ udp://192.168.69.2:53, txnid 1
28e5dc4 4 net_builtin.c:1249:mg_send    still resolving...
28e5dc4 1 event.c:31:mg_error           6 -1 DNS send
28e5dc4 4 net_builtin.c:1219:mg_mgr_pol 6 .. tChrC 0 0
28e5dc4 1 event.c:31:mg_error           5 -1 DNS error
28e5dc4 3 net.c:148:mg_close_conn       6 -1 closed
28e5dc4 4 net_builtin.c:1219:mg_mgr_pol 5 .. tchRC 0 0
28e5dc4 3 net.c:148:mg_close_conn       5 -1 closed

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions