Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Связывание в структуре nichstack socket'ов и физ Ethernet
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
xxxmatrixxx
Здравствуйте,
возник еще один вопрос при разборе стэка TCP/IP под NIOS2 (nichestack)

у меня в модуле будет реализовано 2 Ethernet, по коду, кажется, у меня все нормально проинициализируется(т.е. под каждый выделится стэк, проинициализированы будут для каждого dma каналы, mac и ip адреса...)

Я создал 2 задачи, каждая из которых будет работать с каждым Ethernet... обмен осуществляю через сокеты...
я по коду примера и по описанию не увидел, где и как конкретный сокет(может и задача) привязана к конкретному Ethernet...

вот так провожу инициализацию

CODE
alt_iniche_init();
netmain();

/* Wait for the network stack to be ready before proceeding.
* iniche_net_ready indicates that TCP/IP stack is ready, and IP address is obtained.
*/
while (!iniche_net_ready)
TK_SLEEP(1);


вот так выделяю задачи под каждый ethernet
CODE
/запуск задачи для работы по 1му Ethernet
TK_OBJECT(to_ssstask_e1);
TK_ENTRY(Socket_E1);

struct inet_taskinfo ssstask_e1 = {
&to_ssstask_e1,
"socket_E1",
Socket_E1,
4,
APP_STACK_SIZE,
};

//запуск задачи для работы по 2му Ethernet
TK_OBJECT(to_ssstask_e2);
TK_ENTRY(Socket_E2);

struct inet_taskinfo ssstask_e2 = {
&to_ssstask_e2,
"socket_E2",
Socket_E2,
5,
APP_STACK_SIZE,
};


Так как связывается сокет(или задача) с конкретным ethernet? надо ли мне указывать что-то явно в задаче или при работе с сокетами, чтобы проц знал, куда посылает и откуда принимает данные?
xxxmatrixxx
Решил эту проблему следующим образом, может кому понадобится....

NicheStack запихивает все устройства в массив структур alt_tse_iniche_dev_driver_data tse_iniche_dev_driver_data[MAXNETS];

т.к. ip определяется на сетевом уровне, а мы шагаем от канального уровня, то привязка должна быть такого вида:
CODE
addr.sin_addr.s_addr = tse_iniche_dev_driver_data[current_index_of_ethernet].p_dev->p_net->n_ipaddr;
current_index_of_ethernet ++;


переменную current_index_of_ethernet я сделал глобальной и увеличиваю счетчик, как только привязал к сокету...

главное не забыть подключить соответствующие хэдеры для определения типов, а данный массив импортировать через extern...



если у кого были другие варианты решения, буду очень благодарен, если поделитесь...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.