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

 
 
> несколько eth через lwIP
inventor
сообщение Mar 22 2018, 06:54
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



на контролере миландр есть 2 eth
во freertos и lwip
по отдельности работают, на каждом сделал UDP echo сервер
но если включаю сразу 2 работает только один
задачи одинаковые, видимо проблема в инициализации netif
подскажите, где ковырять.
адреса получаю по DHCP для обоих интерфесов
но попытка послать строку для эхо на один них заканчивается неудачно:

SUCCESS: Create eth5 dhcp
SUCCESS: Create eth5 task
Looking for DHCP server for eth5 please wait...
Looking for DHCP server for eth2 please wait...

bind soket to addr 192.168.0.102 OK
eth5 IP from DHCP: 192.168.0.102
eth2 IP from DHCP: 192.168.0.103


0: 933 bytes recv from (192.168.0.105) : Привет 0
Error sendto

поставил светодиод - прием пакетов на "мертвый" интерфейс есть
а передача умирает
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vadon
сообщение Jul 25 2018, 18:23
Сообщение #2


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

Группа: Свой
Сообщений: 97
Регистрация: 27-07-10
Из: харьков
Пользователь №: 58 632



Почему бы не использовать готовую функцию:
Код
/**
* @ingroup udp_raw
* Bind an UDP PCB to a specific netif.
* After calling this function, all packets received via this PCB
* are guaranteed to have come in via the specified netif, and all
* outgoing packets will go out via the specified netif.
*
* @param pcb UDP PCB to be bound.
* @param netif netif to bind udp pcb to. Can be NULL.
*
* @see udp_disconnect()
*/
void
udp_bind_netif(struct udp_pcb *pcb, const struct netif *netif)
{
  LWIP_ASSERT_CORE_LOCKED();

  if (netif != NULL) {
    pcb->netif_idx = netif_get_index(netif);
  } else {
    pcb->netif_idx = NETIF_NO_INDEX;
  }
}
Go to the top of the page
 
+Quote Post
inventor
сообщение Jul 27 2018, 07:21
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(vadon @ Jul 25 2018, 21:23) *
Почему бы не использовать готовую функцию:
Код
/**
* @ingroup udp_raw
* Bind an UDP PCB to a specific netif.
* After calling this function, all packets received via this PCB
* are guaranteed to have come in via the specified netif, and all
* outgoing packets will go out via the specified netif.
*
* @param pcb UDP PCB to be bound.
* @param netif netif to bind udp pcb to. Can be NULL.
*
* @see udp_disconnect()
*/
void
udp_bind_netif(struct udp_pcb *pcb, const struct netif *netif)
{
  LWIP_ASSERT_CORE_LOCKED();

  if (netif != NULL) {
    pcb->netif_idx = netif_get_index(netif);
  } else {
    pcb->netif_idx = NETIF_NO_INDEX;
  }
}


я использую сокеты , а не pcb
и мой вариант работает
неизвестно как это будет работать если несколько интерфейсов останутся в одной сетке
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th April 2024 - 01:49
Рейтинг@Mail.ru


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