|
Свой стек PPP |
|
|
|
Oct 1 2008, 12:54
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Долго искал, где создать тему, так и не нашёл. Разместил здесь, т.к. в конечном счёте, PPP необходим для GPRS. Если есть более подходящая ветка, прошу перенести. Собственно сам вопрос. Рассчитываю CRC PPP фрейма. И CRC не совпадает. Делаю Следующее: Сначало приходит стандартный LCP пакет: ~ }#А!}!}#} }9}"}&} }*} } }'}"}(}"}%}&ЂA}!в}#}%В#}%чи~ После преоброзования 7D, выделяем тело: C0,21,1,3,0,19,2,6,0,A,0,0,7,2,8,2,5,6,80,41,1,E2,3,5,C2,23,5,F7,E8,
Функуия для расчёта CRC: uint16 crc16_ppp(uint8 *buf,uint32 len) { uint32 i; uint8 j; uint16 crc=0x2E93; //В CRC побывало уже 0xFF и 0x03 for (i=0;i<len;i++) { crc^=(uint16)buf[i]<<8; for(j=0;j<8;j++) crc=crc&0x8000 ? (crc << 1)^0x1021 : crc<<1; } return crc; } Получаю CRC: EB1C Инвертирую CRC: 14E3 и оно не совпадает с F7E8. Что я делаю не так? Через CRC надо пропускать байты уже преобразованные через 7D, или абсолютно каждый байт между ~~? Если у кого есть исxодники PPP, можете помочь страждущему? P.S. Т.к. есть большое желание узнать, как вся эта кухня работает, не предлагать взять готовый стек PPP и TCP/IP
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Oct 13 2008, 07:08
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Пишу под платформу ARM9. Компилятор RVDS. Впрочем на С нет большой разницы, под какую платформу эти исходники потом компилировать. Разве что, общение с портом надо будет подправлять в зависимости от платформы и среды. У кого драйвер, у кого прерывание. Цель проекта: детально разобратся с PPP, TCP/IP стеком, сделать полноценную рабочую версию, что называется, не хуже чем у других. Но сколько бы я не писал, постоянно получается, какая-то ГРОМОЗДКАЯ “писанина”, хоть и рабочая, но ОЧЕНЬ НЕ ОПТИМАЛЬНАЯ. Я сейчас реализовал приём PPP фрэймов, и протокол LCP. Выкладываю исходник. Предлагаю общественным путём доработать их. Голая критика, без своих ВАРИАНТОВ, не ПРИВЕТСТВУЕТСЯ, ибо не несёт ни какой ценности. To west329_: Что вы имели в виду под фразой:”потом подправляеш входящий пакет и отсылаеш его ему обратно”. В виде чего отсылать и что подправлять? Мне например нужен протокол PAP. Отсылать пакет ASK или что другое?
Прикрепленные файлы
App.rar ( 5.81 килобайт )
Кол-во скачиваний: 59
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Oct 13 2008, 08:40
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Цитата(Beginning @ Oct 13 2008, 10:08)  Пишу под платформу ARM9. Компилятор RVDS. Впрочем на С нет большой разницы, под какую платформу эти исходники потом компилировать. Разве что, общение с портом надо будет подправлять в зависимости от платформы и среды. У кого драйвер, у кого прерывание. Цель проекта: детально разобратся с PPP, TCP/IP стеком, сделать полноценную рабочую версию, что называется, не хуже чем у других. Но сколько бы я не писал, постоянно получается, какая-то ГРОМОЗДКАЯ ”писанина”, хоть и рабочая, но ОЧЕНЬ НЕ ОПТИМАЛЬНАЯ. Я сейчас реализовал приём PPP фрэймов, и протокол LCP. Выкладываю исходник. Предлагаю общественным путём доработать их. Голая критика, без своих ВАРИАНТОВ, не ПРИВЕТСТВУЕТСЯ, ибо не несёт ни какой ценности. To west329_: Что вы имели в виду под фразой:”потом подправляеш входящий пакет и отсылаеш его ему обратно”. В виде чего отсылать и что подправлять? Мне например нужен протокол PAP. Отсылать пакет ASK или что другое? Так как я работаю с 8 битным контроллером то у меня нету разделения на RX TX буффера, и для экономии я корректирую входящий пакет и отправляю ему обратно. Получается такой алгоритм: 1) Присылает сервер строку Код FF03 C021 01 03 0019 0206000A0000 0702 0802 0506AEA88890 0305C22305 887A 0305C22305 тут CHAP, требуем РAP, я делаю так -коректируем Тип пакета, Configure-Request -корекируем Длина поля «Информация пакета»; -данные пишу FF03 C021 01 00 0008 0304C023 98DC -отпавляем серверу 2) он присылает с огласие Код FF03 C021 02 03 0008 0304C023 26FE 3) опять присылает Код FF03 C021 01 03 0018 0206000A0000 0702 0802 0506D85BBC5C 0304C023 A797 отвергем всё кроме РАР -коректируем Тип пакета, Configure-Request -корекируем Длина поля «Информация пакета»; -данные пишу Код FF03 C021 04 03 0014 050600000000 0206000A0000 0702 0802 701A -отпавляем серверу 4) присылает Код FF03 C021 01 05 0008 0304C023 3B2C если ещё интересно напишу ещё ? P.S. Сам хочу реализовать TCP протокол, но пока ещё не выходит, с удовольствим поддержу автора.
Сообщение отредактировал west329_ - Oct 13 2008, 08:48
|
|
|
|
|
Oct 13 2008, 11:00
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 27-11-07
Из: Пермь
Пользователь №: 32 732

|
Цитата(Beginning @ Oct 9 2008, 17:29)  ... Мне не нужны все предложенные настройки. Вместо протокола CHAP нужен PAP. Следуя алгоритму, я посылаю пакет NAK. Что написано про него в описании: Пакет LCP типа Configure-Nak используется для сигнализации о том, что по крайней мере один из параметров, заявленных в пакете Configure-Request, не принят сервером РРР. При этом сервер должен указать, какой именно параметр не принят, и предложить альтернативное значение этого параметра в поле Опции этого пакета.... Ключевое слово сдесь сервер. Вы как-бы не имеете право посылать NAK, т.к. являетесь ведомым в этой сессии. Чтобы отвергнуть предложенные сервером настройки надо послать ему пакет Config-Reject.
|
|
|
|
|
Oct 13 2008, 13:04
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Спасибо. Качаю.
Вообщем стадия согласования параметров прохожу удачно. Дале по протоколу PAP я должен передать серверу login и passward. Насколько я понял в GPRS нету login и passward PPP коннекта. Поэтому посылаю строку: FF,3,C0,23,1,2,0,6,0,0,56,24 Ff,3 – константы С023 – PAP 1 – reqwest 2 – это id моих посылаемых пакетов. Насколько я понял, начальное значение могу взять любое, а потом инкрементировать? Или как-то подругому. 6 –длина 0 – pasward 0 0 – login 0 56,24 – CRC Вобщем посылаю это, и ничего. Сервер ничего не отвечает. Что не по протоколу?
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Oct 13 2008, 13:24
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Насколько я понял есть пароль к PPP соединению, а есть к TCP/IP или как его там, короче тот что к шлюзу на официальных сайтах указан. У меня например "wap","wap". Но это пока предположение, т.к. я не приступил к изученю TCP. В любом случае если пароль неправильный, так хоть о данном факте должен сообщить сервер. А тут вообще ничего. Что касается отладки через комп. Тоже вариант. Но по ниму надо было идти изначально. Но стоя в начали пути на распути, я выбрал вариант с изучением документации, реализации на контроллере и анализом трафика. Поэтому переключение на первый вариант, сейчас будет накладно.
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Oct 13 2008, 13:54
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Послал: FF,3,C0,23,1,5,0,6,0,0,91,4, Получилась точная копия как в документе 1.doc Т.к. id=5 и CRC совпало. Так вот, "теже яйца вид слева".
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Oct 14 2008, 06:44
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 27-11-07
Из: Пермь
Пользователь №: 32 732

|
Цитата(Beginning @ Oct 13 2008, 19:37)  Моя логика была следующей: раз этот пакет - мой запрос, то и id я должен выдовать свой. Логика абсолютно правильная  . Проблема точно не в этом.
Сообщение отредактировал lolful - Oct 14 2008, 06:46
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|