|
|
  |
lwIP при наличии двух каналов связи, установка приоритета, есть LAN и модем(ppp): использовать LAN, если он подключен |
|
|
|
Dec 27 2017, 13:56
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Ruslan1 @ Dec 27 2017, 14:26)  Вопрос: как красиво (просто, надежно) сделать автоматический переход на приоритетный канал общения? Я бы сделал некую программную прослойку, через которую производилось бы "общение" других частей проекта. А уже эта "прослойка" сама переключала бы канал обмена в зависимости от ситуации. Т.е. прозрачно для кода. Эта прослойка может быть еще одной задачей в рамках ОС со своими правилами и алгоритмами поведения в случае сбоев и обрывов. Главное ограничение такой модели построения проекта: никто не должен пытаться напрямую общаться по конкретным канала связи, минуя эту прослойку! В терминах ООП это называется "инкапсуляция".
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Dec 29 2017, 16:24
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(scifi @ Dec 27 2017, 16:23)  Там есть функция netif_set_default(), она как раз для этого. Спасибо, значит только через нее. Собственно, она сейчас и используется для полного переключения всего трафика модем/езернет. То есть всегда использую текущий дефолтный интерфейс. Но вот как использовать недефолтный? Как сказать lwip, что я хочу чтобы это конкретное соединение установилось именно через ethernet, а не через дефолтовый канал? Согласно описанию того же netif_set_default(), где-то существует возможность задать " specific route", но вот что-то я совсем туплю, не могу понять как это сделать: Цитата Set a network interface as the default network interface (used to output all packets for which no specific route is found
|
|
|
|
|
Dec 29 2017, 17:17
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Ruslan1 @ Dec 29 2017, 19:24)  Согласно описанию того же netif_set_default(), где-то существует возможность задать "specific route", но вот что-то я совсем туплю, не могу понять как это сделать Здрассте. "Specific route" - это когда адресат входит в диапазон адресов какого-то интерфейса (типа 192.168.0.x, как часто бывает). Всё остальное идёт в default interface, потому что куда ещё? У взрослых стеков есть статические маршруты, но в lwip этого нет, насколько я знаю. Кстати, приделать сбоку обработку доп. маршрутов должно быть совсем не сложно. UPD: заглянул в lwip-2, там есть LWIP_HOOK_IP4_ROUTE() как раз для этого.
|
|
|
|
|
Dec 29 2017, 19:45
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(scifi @ Dec 29 2017, 19:17)  Здрассте. "Specific route" - это когда адресат входит в диапазон адресов какого-то интерфейса (типа 192.168.0.x, как часто бывает). Всё остальное идёт в default interface, потому что куда ещё? У взрослых стеков есть статические маршруты, но в lwip этого нет, насколько я знаю. Кстати, приделать сбоку обработку доп. маршрутов должно быть совсем не сложно. UPD: заглянул в lwip-2, там есть LWIP_HOOK_IP4_ROUTE() как раз для этого. Извините за примитивные вопросы и спасибо за ответы  реальные ситуации: #1: Подключена локалка, прибору присвоен (через DHCP) IP 192.***. В это же время, работает модем (ppp) и прибор имеет IP 10.*** Мне нужно понять, доступен ли интернет через локалку, для чего пробую пинговать что-нибудь (ну, например, 8.8.8.8). Обязательно ли для этого действа переключить интерфейс в дефолтовый езернет? Получается, что обязательно? #2: Прибору дана команда валить по UDP данные. Кабель воткнут, данные бегут. Но соединение с интернетом нет, и достигнуть нужного для отсылки данных ftp через локалку невозможно. Подключается модем, устанавливается соединение, дефолтовым становится ppp, и соединение с ftp работает. Но, как я понимаю, в это время в ppp также пойдут и все UDP пакеты, так как это дефолтовый интерфейс? Получается что да, все UDP пакеты польются тоже в ppp ?
|
|
|
|
|
Dec 29 2017, 21:04
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Ruslan1 @ Dec 29 2017, 22:45)  #1: Подключена локалка, прибору присвоен (через DHCP) IP 192.***. В это же время, работает модем (ppp) и прибор имеет IP 10.*** Мне нужно понять, доступен ли интернет через локалку, для чего пробую пинговать что-нибудь (ну, например, 8.8.8.8). Обязательно ли для этого действа переключить интерфейс в дефолтовый езернет? Получается, что обязательно? Не обязательно, если прикрутите LWIP_HOOK_IP4_ROUTE(). Он есть в lwip-2, не знаю за предыдущие версии, но приделать тривиально, всего пара строчек. Этот крючок может направлять 8.8.8.8 (его и только его, если нужно) на нужный интерфейс. Цитата(Ruslan1 @ Dec 29 2017, 22:45)  #2: Прибору дана команда валить по UDP данные. Кабель воткнут, данные бегут. Но соединение с интернетом нет, и достигнуть нужного для отсылки данных ftp через локалку невозможно. Подключается модем, устанавливается соединение, дефолтовым становится ppp, и соединение с ftp работает. Но, как я понимаю, в это время в ppp также пойдут и все UDP пакеты, так как это дефолтовый интерфейс? Получается что да, все UDP пакеты польются тоже в ppp ? Именно так. Опять же, своя обработка маршрутизации поможет это решить. Но для начала почитайте немного про азы. IP, адресация, подсети, сетевые маски, шлюзы. Там всё крайне просто, а без этого элементарного знания ничего толкового не сделаете.
|
|
|
|
|
Dec 30 2017, 13:33
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Ruslan1 @ Dec 29 2017, 22:45)  ... #1: Подключена локалка... Обязательно ли для этого действа переключить интерфейс в дефолтовый езернет? Получается, что обязательно?
#2: ...так как это дефолтовый интерфейс? Получается что да, все UDP пакеты польются тоже в ppp ? 5 копеек: если рассматривать стэк без механизации маршрутиризации - то у вас на хосте (stm) есть два канала связи. Ситуация распадается на: - перенаправлять пакеты в рукопашную -- по определённому правилу(тип пакета, наличие коннекта, другие условия) перенаправлять или дропить пакеты. - заюзать, что нить готовое -- (как уже прозвучало выше) lwip-2 то что нужно копать на этот предмет в первую очередь как то так (круглый)
Сообщение отредактировал kolobok0 - Dec 30 2017, 13:34
|
|
|
|
|
Dec 30 2017, 17:10
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(scifi @ Dec 29 2017, 23:04)  Но для начала почитайте немного про азы. IP, адресация, подсети, сетевые маски, шлюзы. Там всё крайне просто, а без этого элементарного знания ничего толкового не сделаете. спасибо за обстоятельный и понятный ответ. К сожалению моего понимания того как работают " IP, адресация, подсети, сетевые маски, шлюзы" оказалось недостаточно для того, чтобы понять: 1) что именно в lwIP называется "specific route". 2) что "У взрослых стеков есть статические маршруты, но в lwip этого нет" 3) нужно смотреть LWIP_HOOK_IP4_ROUTE и lwip-2 Еще раз спасибо, теперь стало значительно понятнее куда именно копать. вроде бы текущий релиз "lwIP 2.0.2" ? Или пока что преждевременно переползать на 2.0.x ? (Сейчас в проекте используется 1.4.1) Цитата(kolobok0 @ Dec 30 2017, 15:33)  Ситуация распадается на: - перенаправлять пакеты в рукопашную -- по определённому правилу(тип пакета, наличие коннекта, другие условия) перенаправлять или дропить пакеты. - заюзать, что нить готовое -- (как уже прозвучало выше) lwip-2 то что нужно копать на этот предмет в первую очередь Да, именно так и я вижу проблему и пути решения. спасибо за детализацию. Upd: Хм, у себя в lwIP 1.4.1 тоже нашел LWIP_HOOK_IP4_ROUTE. Буду смотреть. Цитата * LWIP_HOOK_IP4_ROUTE(dest): * - called from ip_route() (IPv4) * - dest: destination IPv4 address * Returns the destination netif or NULL if no destination netif is found. In * that case, ip_route() continues as normal Ну и да, опять посмотрю "азы". Мало ли что я уже забыл за давностью востребованности информации (это только один из многих вопросов, вот и получается, что углубляюсь только по нужде. Очень мешает, что в сутках так мало часов).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|