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

 
 
> LwIP факт отправки UDP пакета
Real_Bastard
сообщение Dec 9 2013, 00:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 7-11-06
Из: Санкт-Петербург
Пользователь №: 22 041



Отсылаю больщой объем данных по UDP. Пакетами по 1000 байт. Не могу понять, как определить, готов стек к приему нового пакета или нет. Сейчас похоже слишком часто вызываю udp_send() и поэтому каждый второй пакет не доходит. Задержка помогает, но не всегда.
Код
while (1)
      {
        /* check if any packet received */
        if (ETH_CheckFrameReceived())
        {
          /* process received ethernet packet */
          LwIP_Pkt_Handle();
        }
        /* handle periodic timers for LwIP */
        LwIP_Periodic_Handle(LocalTime);
            get_new_data(data);  //получаю данные
            //delay(); //Задержка
        /* allocate pbuf from pool*/
            p = pbuf_alloc(PBUF_TRANSPORT, 1000, PBUF_POOL);
        if (p != NULL ) {
            /* copy data to pbuf */
            pbuf_take(p, (char*) data, 1000);
            /* send udp data */
            udp_send(upcb, p);
            /* free pbuf */
            pbuf_free(p);
        }
      }
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Dec 9 2013, 06:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



факта отсылки пакета нет и быть не может.
Единственное что вы можете получить это то что на него выделен буфер и он добавлен в очередь отправки, а отправка произойдет во время обработки основной функции стэка. А также учитывая что UDP пакетный, а не потоковый, напихав много пакетов уходить они будут по очереди с каждым новым вызовом этой функции
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 9 2013, 07:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Dec 9 2013, 10:33) *
факта отсылки пакета нет и быть не может.

Неправда. Я специально проследил порядок выполнения udp_send(). Он ведёт прямиком к netif->linkoutput, то есть непосредственно к функции отправки пакета драйвером. Естественно, при условии, что arp уже сделал свои дела. Понятно, что драйвер может буферизировать пакеты перед отправкой, но не обязательно. У меня, к примеру, не буферизирует, а сразу отправляет.
Go to the top of the page
 
+Quote Post
TU-104
сообщение Apr 14 2016, 11:25
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 10-12-08
Пользователь №: 42 354



Цитата(scifi @ Dec 9 2013, 12:57) *
Неправда. Я специально проследил порядок выполнения udp_send(). Он ведёт прямиком к netif->linkoutput, то есть непосредственно к функции отправки пакета драйвером. Естественно, при условии, что arp уже сделал свои дела. Понятно, что драйвер может буферизировать пакеты перед отправкой, но не обязательно. У меня, к примеру, не буферизирует, а сразу отправляет.

а всё-таки, только так? Вызвать udp_send и проверять по коду ошибки? Может, есть какой-то флаг готовности?
Посмотрел свой low_level_output, проверка есть: пытается распихать в пакет по буферам DMA и при невозможности возвращает ошибку. Конкретно в моём примере выделено 4 буфера размером 1524 байта. Значит, больше никак не узнать, только проверять есть ли место.
Может кто разбирался, еще вопросик: эти 4 буфера под 4 ЛЮБЫХ пакета? 4 пакета по 1500 байт, или 4 пакета по 100 байт...

Сообщение отредактировал TU-104 - Apr 14 2016, 12:34
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 14 2016, 13:16
Сообщение #5


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(TU-104 @ Apr 14 2016, 14:25) *
а всё-таки, только так?... эти 4 буфера под 4 ЛЮБЫХ пакета? 4 пакета по 1500 байт, или 4 пакета по 100 байт...


согласно RFC функция передачи юдп гарантирует отправку. Т.е. если вам вернули код ошибки ОК - то пакет гарантировано дошёл до трансформатора
Вашего передатчика. Так по стандарту.

Буфера - тут такое дело. По идее размеры резервирования прописываются в конфигураторе(как тут уже прозвучало). Т.е. зарезервируете 4 по 1000 = будет всего 4 кила.

С буферами в основном засада на приёме. Выделять память в драйвере - накладно очень. Но можно а) использовать заголовки ПДП старые
б) делать резервирование таких блоков - для драйвера.

(круглый)
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 14 2016, 13:21
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(kolobok0 @ Apr 14 2016, 16:16) *
согласно RFC функция передачи юдп гарантирует отправку. Т.е. если вам вернули код ошибки ОК - то пакет гарантировано дошёл до трансформатора
Вашего передатчика. Так по стандарту.

Ну-ну. Осталось понять, читал ли аффтар кода эти стандарты. Угадайте, каковы шансы? biggrin.gif
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 14 2016, 13:30
Сообщение #7


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(scifi @ Apr 14 2016, 16:21) *
..Осталось понять...


когда писал - хотел дать мысль, что реализация реализацией, но существует стандарт пользовательского(с точки зрения стэка) интерфейса.
А прочтёт если захочет по уму, от печки.

ну где то так
(круглый)
ЗЫ
Элемент иронии если только чуть-чуть sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Real_Bastard   LwIP факт отправки UDP пакета   Dec 9 2013, 00:10
- - scifi   Я бы проверял возвращаемое значение функции udp_se...   Dec 9 2013, 06:07
|- - TU-104   Цитата(kolobok0 @ Apr 14 2016, 18:16) сог...   Apr 15 2016, 05:06
|- - kolobok0   Цитата(TU-104 @ Apr 15 2016, 08:06) ...   Apr 15 2016, 08:49
- - Real_Bastard   Цитата(scifi @ Dec 9 2013, 10:07) Я бы пр...   Dec 9 2013, 08:53
|- - megajohn   "буферизируются или нет", это называются...   Dec 9 2013, 09:38
- - Real_Bastard   Ну приемное приложение у меня самописное и корявое...   Dec 9 2013, 09:53
|- - Golikov A.   Цитата(Real_Bastard @ Dec 9 2013, 13:53) ...   Dec 9 2013, 10:26
- - Golikov A.   блокирующий и не блокирующий - это разве не к опер...   Dec 9 2013, 09:56
|- - megajohn   [quote name='Golikov A.' date='Dec 9 2...   Dec 9 2013, 10:14
- - Real_Bastard   Цитата(megajohn @ Dec 9 2013, 14:14) ...   Dec 9 2013, 11:05
|- - megajohn   Цитата(Real_Bastard @ Dec 9 2013, 15:05) ...   Dec 9 2013, 12:04
- - Golikov A.   то есть задача стоит как ограничить свои данные на...   Dec 9 2013, 13:00
- - scifi   Цитата(megajohn @ Dec 9 2013, 13:38) ...   Dec 9 2013, 14:15
- - Real_Bastard   Запустил шарк. 45 000 пакетов принято. А счетчик п...   Dec 9 2013, 15:33
|- - scifi   Цитата(Real_Bastard @ Dec 9 2013, 19:33) ...   Dec 9 2013, 17:33
- - Real_Bastard   Цитата(scifi @ Dec 9 2013, 21:33) весьма ...   Dec 9 2013, 23:00
- - sergey sva   Если это видео может как то сжимать его перед отпр...   Dec 12 2013, 12:51
- - Real_Bastard   Цитата(sergey sva @ Dec 12 2013, 16:51) Е...   Dec 13 2013, 09:00


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 12:58
Рейтинг@Mail.ru


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