Перейти к содержанию
    

LwIP: Eth + GPRS(PPP)

Есть устройство, на борту Ethernet и GSM модуль.

Протоколы (в том числе и PPP для работы GPRS) обеспечивает стек LwIP. И есть одна странность:

 

После поднятия PPP стек начинает отправлять данные по TCP соединению, поднятому по интерфейсу Eth, но в PPP протокол. Соответственно исходящие пакеты уходят не в Ethernet интерфейс а в GSM модуль. Как такое вообще возможно? Как пофиксить или хотя бы по-дебажить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде бы функция ip_route() в файле ip.c этим занимается. Смотрите, почему не в туда отправляет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кажется, разобрался. с помощью ip_route проверяются оба интерфейса на предмет предчастности к ip адресу доставки. Если адрес не подходит к интерфейсу, выбирается дефолтный интерфейс. Зачем то в LwIP после поднятия PPP он делается дефолтным. До его поднятия пакеты уходят куда надо, а после начинается такая вот фигня

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если адрес не подходит к интерфейсу, выбирается дефолтный интерфейс.

Интересно, как может получиться так, что IP адрес не подходит к интерфейсу во время TCP-сессии? У вас что-то сломалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, как может получиться так, что IP адрес не подходит к интерфейсу во время TCP-сессии? У вас что-то сломалось.

да вот так: на интерфейсе айпи 192.168.15.20 а сессия поднялась с адреса 123.123.123.123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...с адреса 123.123.123.123

 

уж очень смахивает на дурдом в коде...

мусор - не похож, 4 байта подряд...

обнуляют обычно нулями...

края на затирку вроде как не 7Bh...

 

имхо = ищите ляпы в коде...

(круглый)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

уж очень смахивает на дурдом в коде...

мусор - не похож, 4 байта подряд...

обнуляют обычно нулями...

края на затирку вроде как не 7Bh...

 

имхо = ищите ляпы в коде...

(круглый)

мда. похоже неудачный пример привел. ок

на Eth интерфейсе 172.31.74.11 (маска 255.255.255.0), а пакет уходит на 172.31.68.231, при этом на GSM интерфейсе 172.16.0.31

Ни тот, ни другой IP не входит в диапазон адреса получателя, соответственно LwIP использует дефолтный интерфейс.

 

мусор в коде то у кого? у меня или у LwIP?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мусор в коде то у кого? у меня или у LwIP?

Не надо грязи.

Вообще-то обычно вполне разумно устанавливать ppp интерфейсом по умолчанию. Если вам это не подходит, есть функция netif_set_default().

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не надо грязи.

Вообще-то обычно вполне разумно устанавливать ppp интерфейсом по умолчанию. Если вам это не подходит, есть функция netif_set_default().

В моем случае разумней дефолтным интерфейсом использовать Ethernet (что в коде и делается, однако после поднятия PPP - он переназначается дефолтным), потому как GPRS является резервным каналом.

С помощью netif_set_default можно конечно снова переназначить Ethernet дефолтным. Просто мне не совсем понятно зачем PPP переназначается принудительно, да происходит это не сразу после поднятия PPP (во всяком случае после вызова колбэк-функции по его поднятию, поэтому не ясно когда стоит сново назначить дефолтным Ethernet)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто мне не совсем понятно зачем PPP переназначается принудительно, да происходит это не сразу после поднятия PPP (во всяком случае после вызова колбэк-функции по его поднятию, поэтому не ясно когда стоит сново назначить дефолтным Ethernet)

Можно тупо влезть в код lwip и закомментировать соответствующую строку, если это не выведено наружу в виде настройки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно тупо влезть в код lwip и закомментировать соответствующую строку, если это не выведено наружу в виде настройки.

это то да)

но может есть более изящный способ, в смысле, может есть какая то настроечка) вдруг кто сталкивался с подобныи эффектом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то обычно вполне разумно устанавливать ppp интерфейсом по умолчанию.
Простите, что вмешиваюсь, но в каких случаях и какие это может дать преимущества? Мне, как и k000858, кажется, что логичнее держать интерфейсом по умолчанию eth с бесплатным трафиком, чем ppp с платным.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вообще, мне кажется, было бы логичнее отправлять ответы на запросы в тот интерфейс, в по какому они были получены. Иначе это уже какой то маршрутизатор. Может есть какая то настроечка для LwIP ?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вообще, мне кажется, было бы логичнее отправлять ответы на запросы в тот интерфейс, в по какому они были получены.

Логичнее, конечно. Но для этого нужно делать привязку пакетов к TCP-сессиям - лишний геморрой. К тому же пакет, открывающий новую TCP-сессию, куда слать? В общем, не надо вот это вот, потому что уже не совсем lightweight будет этот ip.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...