У меня примерно так:
Код
lwip_init();
//add dm9000 interface
if(netif_add(&dm9000_if, &ipaddr, &netmask, &gw, NULL, dm9000_init, ip_input) != NULL)
{
netif_set_default(&dm9000_if);
netif_set_up(&dm9000_if); // new step from lwip 1.0.0
pcbc = udp_new();
udp_pcbs = pcbc;
pcbd = udp_new();
pcbc->next = pcbd;
udp_recv(pcbc, rcv_pcbc, NULL);
udp_bind(pcbc, &ipaddr, CMDPORT);
udp_recv(pcbd, rcv_pcbd, NULL);
udp_bind(pcbd, &ipaddr, DATAPORT);
}
- задаются callback для двух портов для работы по UDP
При необходимости можно использовать
Код
udp_connect(pcbd, &connIP, DATAPORT);
это позволяет отвечать по указанному порту только на запросы от конкретного IP вплоть до udp_disconnect.
Иначе приходят пакеты с любых адресов.
Там, вроде, есть более высокоуровневые команды, но у меня стояла задача укромсать стек до минимального размера, так что я там все поубивал.