реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F107+uIP ICMP request, непонятка с отправкой ICMP request
ksv198
сообщение Dec 19 2013, 14:31
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Доброго времени суток!

Суть проблемы: пытаюсь пропинговать с контроллера обычный комп в сети, использую uIP v 1.0
Сам стэк работает, все примеры нормально бегают, и вебсервер и телнет и.д.
Железяка пингуется со стороны компа. На компе ICMP разрешён, другие компы его пингуют.
При попытке отправить ICMP request с железяки Wireshark видит пакет, но комп не отвечает.
Вот скрин с Wireshark:
Прикрепленное изображение


Как отправляю - заполняю все поля в буфере (uip_buf) и пинаю:

uip_arp_out();
vSendMACData( uip_len ); //это функция отправки данных драйвера Ethernet для STM32F107

В Wireshark вижу, что сначала уходит ARP запрос и на него приходит нормальный ответ от компа, с МАС-ами и IP соответствующими железкам. А вот затем вижу ушедший ICMP request и.... никакого ответа.

В чём может быть засада?
Go to the top of the page
 
+Quote Post
bzx
сообщение Dec 19 2013, 16:39
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



Цитата(ksv198 @ Dec 19 2013, 18:31) *
...В чём может быть засада?

Контрольную сумму (CRC) проверьте.


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
ksv198
сообщение Dec 19 2013, 17:02
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(bzx @ Dec 19 2013, 20:39) *
Контрольную сумму (CRC) проверьте.


Да!!! Спасибо большое, 4 часа протупил, сумма в заголовке ICMP была не правильной.
Ответ пошёл.
Go to the top of the page
 
+Quote Post
Misha_Traktorist
сообщение Nov 5 2016, 17:43
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 8-01-13
Пользователь №: 75 111



Не могли бы поделиться кодом? Тоже надо сделать пинг с девайса)))
Go to the top of the page
 
+Quote Post
romas2010
сообщение Nov 6 2016, 06:54
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 25-11-11
Пользователь №: 68 515



Цитата(ksv198 @ Dec 19 2013, 20:02) *
Да!!! Спасибо большое, 4 часа протупил, сумма в заголовке ICMP была не правильной.
Ответ пошёл.


Да,в IP пакетах надо CRC всегда считать...кстати STM аппаратно считает CRC этих пакетов установкой битов в дескрипторе передачи TDES0.CIC = 3
Go to the top of the page
 
+Quote Post
Misha_Traktorist
сообщение Nov 8 2016, 13:36
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 8-01-13
Пользователь №: 75 111



Кому надо, делается это вот так:
Код
        // Составляем IP заголовок
        ICMPBUF->vhl = 0x45;
        ICMPBUF->tos = 0;
        uint16_t    len = sizeof(struct uip_icmpip_hdr);    // длина будет равна заголовку ip + icmp
        ICMPBUF->len[0] = len >> 8;
        ICMPBUF->len[1] = len & 0xff;
        uint16_t    ipid = 0;
        ICMPBUF->ipid[0] = ipid >> 8;
        ICMPBUF->ipid[1] = ipid & 0xff;
        ICMPBUF->ipoffset[0] = ICMPBUF->ipoffset[1] = 0;
        ICMPBUF->ttl = UIP_TTL;
        ICMPBUF->proto = UIP_PROTO_ICMP;
        // указываем свой ip и ip удаленного устройства.
        uip_gethostaddr(ICMPBUF->srcipaddr);
        uip_ipaddr(&ICMPBUF->destipaddr, 192,168,1,101);

        ICMPBUF->ipchksum = 0;
        ICMPBUF->ipchksum = ~(uip_ipchksum());

        ICMPBUF->type = ICMP_ECHO;
        ICMPBUF->icode = 0;
        ICMPBUF->icmpchksum = 0;
        ICMPBUF->icmpchksum = uip_chksum((uint16_t*)&ICMPBUF->type, 8);
        ICMPBUF->icmpchksum = ~((ICMPBUF->icmpchksum == 0) ? 0xffff : ICMPBUF->icmpchksum);

        printf("type %d, code %d, icmpchksum %d\r\n", ICMPBUF->type, ICMPBUF->icode, ICMPBUF->icmpchksum);

        uip_len = UIP_IPH_LEN + 8;    // длина равна заголовку ip + заголовку icmp

        uip_arp_out();
        enc28j60_send_packet((uint8_t *) uip_buf, uip_len);

Данный код подходит как для пинга внутренней сети, так и внешней.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.02435 секунд с 7
ELECTRONIX ©2004-2016