Разделение / фрагментация пакетов данных вручную в ContikiOS - PullRequest
0 голосов
/ 31 мая 2019

У меня есть приложение TSCH, работающее с использованием Contiki-NG.Хотя на уровне 6LowPAN ContikiOS обеспечивает фрагментацию пакетов UDP, тем не менее, это вызывает некоторое странное поведение, поэтому в моем приложении мы отключили его.Без этого сенсорный узел повышает надежность приема пакетов.Однако это создает новую проблему, т. Е. Если пакет UDP длиннее, чем требуется, 6LowPAN просто отбрасывает пакет.

Чтобы преодолеть это, я хочу разделить пакеты данных на более мелкие порции, если они длиннее определенного размера, а затем отправить эти порции по одному.Может ли кто-нибудь показать мне правильное направление, предоставив некоторые фрагменты кода о том, как этого добиться?

Я призываю следующее при отправке данных прикладного уровня.

int simple_udp_sendto(struct simple_udp_connection *c,
                      const void *data, uint16_t datalen,
                      const uip_ipaddr_t *to);

и используем как:

simple_udp_sendto(&udp_conn, &data_packet, sizeof(PacketHeader) + data_packet.packet_header.length, dst);

Здесь _packet данных должен быть разделен и отправлен один за другим, если он больше, чем, скажем, 80 байтов.

Все пакеты после разделения теперь будут отправляться правильно, без потери 6LowPAN.

Все указатели и / или фрагменты кода будут великолепны!

...