LINUX.ORG.RU

Простая и лёгкая реализация UDP/IP для микроконтроллеров

 , ,


11

1

Ориентирована на применение в системах, где микроконтроллер выступает в роли UDP сервера, с которым извне устанавливает «соединение» клиент (да, само по себе UDP соединений не имеет, я знаю):

  • Библиотека полностью событийно-ориентирована.
  • Не надо писать никаких структур состояния приложения.
  • Нет сокетов – только коллбэки на событие прихода пакета.
  • Всего 890 строчек кода.
  • Поддерживается ARP ответ, ICMP ответ, UDP.
  • Имеет ARP таблицу, заполняемую от входящих IP пакетов. При отправке IP пакета, если MAC адрес не найден, то библиотека шлёт IP с широковещательным MAC.

Не поддерживаются:

  • ARP запросы;
  • ICMP запросы;
  • маршрутизация;
  • DHCP;
  • DNS.

>>> Подробности

★★★★★

Проверено: Harald ()

Ответ на: комментарий от abondarev

да, сравнивал

Именно в адрес uIP и направлено «Не надо писать никаких структур состяния приложения»)

А еще я с uIP, сделав все по инструкциям из мануалов, столкнулся с проблемами с endianess при работе ARP. Это меня настолько огорчило, что я и начал писать этот свой код

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 4)

Спасибо! Годно и нужно!

Вопрос - писалось для своих личных нужд или по работе? Какое, если не секрет, в итоге было целевое приложение/применение?

reprimand ★★★★★ ()

Щикарно!

Еще бы ты добавил полноценные сокеты...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от reprimand

для своего проекта, который располагается как раз по https://github.com/nort-cnc-control - своя система управления чпу-фрезерным станком.

Сейчас основной целевой платформой, на которой я его запускаю, является stm32f302

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)

Как раз недавно своё наколхозили, подобное сабжу. На пару месяцев бы раньше. Хотя что такое килострочка, так, фигня, но отладка это время

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от KivApple

DHCP имхо очень не хватает…

DHCP простой, в минимальном варианте дописать совсем несложно, если ресурсы МК позволяют.

Stanson ★★★★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Допили =)

Понадобится - допилю разумеется.

Stanson ★★★★★ ()
Ответ на: комментарий от anonymous

Чутка пожирнее, но оттуда например можно DHCP уволочь.

Stanson ★★★★★ ()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ну так он и не для безопасности писался. А для того, чтобы влезть в милиписечный контроллер, который будет сидеть в каком-нибудь влане где никаким ping of death взяться просто неоткуда.

Безопасность вполне можно переложить на другие железки. Или просто отключить приём.

У меня вот есть код bit-bang ethernet’а на PIC18. Он ваще пипец какой защищённый. Принципиально не существует никакой атаки, которая могла бы привести к нарушению работы девайса. Вот только он ничего кроме посылки UDP пакетов не умеет.

Stanson ★★★★★ ()
Ответ на: комментарий от Stanson

Ну вы тогда сразу пишите, в самом начале README, что в реальном мире это вообще нельзя использовать. Нигде, никак, ни при каких условиях. Потому что такой код взорвётся даже просто от битого пакета.

anonymous ()
Ответ на: комментарий от anonymous

Это не моя игрушка. Но с предложением о предупреждении в README согласен.

А вообще это же маст для всякой подобной фигни. Более того, даже штуки намного серёзнее, типа IP-камер, всякого IoT’а и прочего голой жопой в интернет выставляют только полные идиоты.

Stanson ★★★★★ ()
Ответ на: комментарий от Stanson

Более того, даже штуки намного серёзнее, типа IP-камер, всякого IoT’а и прочего голой жопой в интернет выставляют только полные идиоты.

Ты где-то по пути перепутал причину со следствием. «IP-камеры и всякий IoT» нельзя выставлять голожой жопой в интернет именно потому, что код в них написан вот так. Потому что авторы этого кода просто не задумывались о том, что прилетающие из сети данные могут быть невалидными по какой-либо причине (от сбоя с другой стороны до целенаправленной атаки).

«Давайте поставим за роутер/файрволл» не является решением проблемы потому, что код для этих роутеров и файрволлов пишут такие же люди, и проблемы там часто возникают те же самые. И в ядрах ОС тоже.

Ещё пугает то, что большие фанаты православной сишечки обычно не очень понимают что вообще они делают и какие это может иметь последствия.

<на этой ноте можно начать срач>

anonymous ()
Ответ на: комментарий от hateyoufeel

пока не планирую. А есть какой-то юзкейс, когда для микроконтроллера ipv6 нужен?

ipv6 он же для того, чтобы глобально маршрутизировать каждый девайс, нужен.

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Потому что в серьезных вещах это не используется. Единственное место DHCP - wifi раздавать. Да и то, не всегда это нужно, чаще удобней статический адрес прописывать.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Потому что в серьезных вещах это не используется

вовсю используется

cvs-255 ★★★★★ ()
Ответ на: комментарий от cvs-255

ipv6 он же для того, чтобы глобально маршрутизировать каждый девайс, нужен.

Нет. IPv6 нужен чтобы похоронить костыли IPv4. Куча контор, например, сделали внутренние сети ipv6-only и радуются жизни.

hateyoufeel ★★★★★ ()
Ответ на: комментарий от hateyoufeel

Нет. IPv6 нужен чтобы похоронить костыли IPv4

например?

Речь, напомню, идет про локалку

cvs-255 ★★★★★ ()
Последнее исправление: cvs-255 (всего исправлений: 1)

А где unit тесты? Для каких микроконтроллеров? Как портировать для других? Документация где, хотя бы doxygen?

В чём преимущества по сравнению с FreeRTOS TCP/IP или LWIP?

SL_RU ★★★ ()
Последнее исправление: SL_RU (всего исправлений: 1)
Ответ на: комментарий от SL_RU

Для каких микроконтроллеров? Как портировать для других?

код платформонезависим, по сути это набор парсеров пакетов

В чём преимущества по сравнению с FreeRTOS TCP/IP или LWIP?

в размере и простоте

cvs-255 ★★★★★ ()
Ответ на: комментарий от deity

Конечно! Мы бы его в отдельный проект выделили. И смотрели бы что будет. Благо, Эдичка деньги не любит. Он сам говорил, что готов за 500 баксов в месяц работать.

hateyoufeel ★★★★★ ()
Ответ на: комментарий от cvs-255

документация по использованию приведена в readme

Нет там никакого описания использования! Там говорится, что вы должны реализовать 2 коллбэка. Зачем и что они должны делать - непонятно.

из readme:

This is small and simple event-based UPD/IP library

Если уж в названии приложения опечатки, то в код даже страшно заглядывать! Нет ни документации, ни примеров использования!

sigurd ★★★★ ()
Последнее исправление: sigurd (всего исправлений: 2)

Годно, нужно!

C

Вдвойне годно!

MIT

Вдвойне нужно!

mord0d ★★★★★ ()
Ответ на: комментарий от anonymous

«Давайте поставим за роутер/файрволл» не является решением проблемы потому, что код для этих роутеров и файрволлов пишут такие же люди, и проблемы там часто возникают те же самые. И в ядрах ОС тоже.

Начали за здравие.

Ещё пугает то, что большие фанаты православной сишечки обычно не очень понимают что вообще они делают и какие это может иметь последствия.

Закончили за упокой.

<на этой ноте можно начать срач>

А, ну так-бы сразу и сказали.

anonymous ()

Оставлю свой хрюндель

1 годнота 2 считаю dhcp нужен но как отдельный модуль чтоб не засорять изящность 3 с-код неприемлю, это не оптимизируемо также как если все на с++ в один статический класс с одной ссылкой и инлайнами загнать в один дилер (имею ввиду только в контексте gcc, отдельный порт которого тащу arm-kgp-eabi) а для микрописечных однокристалок это и важно. 4 наезды по поводу доки - ребята, вы просто жирные коты. Там кода мышь наплакала. Разбор как проикрутить ровно 3 минуты занял. Вам вашего Эдичка бесплатно целый рабочий день с экономит, …. и

klen_s ()
Ответ на: комментарий от Eddy_Em

У меня тут как раз с пару сотен устройств, надо к сети подключить. Давай, начинай прописывать, лалка.

anonymous ()
Ответ на: комментарий от anonymous

кстати, а как ты их различаешь? если каждому прописывать уникальное имя, то это не сильно легче

cvs-255 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.