
Марк ☢
29.03.2017
19:20:12
Из терминала нельзя вычитать один ппп пакет тогда
Как узнать сколько байт читать из терминала ?

Vladislav
29.03.2017
19:20:32
можно

Марк ☢
29.03.2017
19:20:44
Через разгребание каждого пакета и вычисление длины ?

Google

Марк ☢
29.03.2017
19:20:56
Как в pptp ?
Нуэтопиздецвобще

Vladislav
29.03.2017
19:21:05
весь фрейм, дисциплина гарантирует один фрейм на одно чтение
и на запись
либо все либо ничего

Марк ☢
29.03.2017
19:21:20
И давно это появилось ?
Когда я смотрел не было этого

Vladislav
29.03.2017
19:21:29
всегда

Марк ☢
29.03.2017
19:21:45
Как называется константы которыми это можно включить ?

Vladislav
29.03.2017
19:22:12
кудат не туда смотрел, pppsync.c
реализация дисциплины

Марк ☢
29.03.2017
19:22:24
Я прям даже в рассылку писал
Мне ответили что знают про этот прекол и делать не будут. Потому что ппп маст дай

Google

Vladislav
29.03.2017
19:22:41
ну чувак, оно с рождения есть

Марк ☢
29.03.2017
19:22:52
Ну нет же

Vladislav
29.03.2017
19:22:58
может ты про что-то другое говоришь?

Deniska
29.03.2017
19:23:05
в общем какого либо совета я видимо так и не вижу
жаль


Марк ☢
29.03.2017
19:23:08
Щас попробую найти
ug here:
https://github.com/torvalds/linux/blob/9a3c4145af32125c5ee39c0272662b47307a8323/drivers/net/ppp/ppp_synctty.c#L604
In short, when entire packet cannot be written to terminal, piece of
packet will be written, and second piece will be thrown away.
Next, see http://sourceforge.net/p/pptpclient/git/ci/master/tree/pptp_gre.c
line 249
/* in synchronous mode there are no hdlc control characters nor checksum
* bytes. Find end of packet with the length information in the PPP packet
*/
if ( syncppp ){
while ( start + 8 < end) {
len = ntoh16(*(short int *)(buffer + start + 6)) + 4;
/* note: the buffer may contain an incomplete packet at the end
* this packet will be read again at the next read() */
if ( start + len <= end)
if ((status = cb (cl, buffer + start, len)) < 0)
return status; /* error-check */
start += len;
}
return 0;
}
So, they assume that when /dev/ptsxxx is set to PPP_SYNC line
discipline, /dev/ptmx (opened previously) will be CONTINUOUS stream of
PPP packets.
Next, they extract length of each PPP packet via specific offset that
is the same for all PPP control packets and IPv4 packets!
This is a hack, but it works! until kernel decides to write big bunch
of data into terminal :(.
One way to trigger that - is to make "ping -s 6500". Kerne will split
this one big ICMP to many MTU-bounded packets and tries to write each
one to terminal.
On some packet, this will fail since terminal buffer is 65536 (I
guess). Next, entire sync-operation will FAIL..... If We just increase
buffer - this will not help
since this will be race-condition: if reader of master side of
terminal will be slow, problem will appear again.
What I want:
1. printk() if that happen
2. check if sending is possible before sending to terminal (i.e. check
space in buffer before write)
3. Another decision - is to send second part of packet when terminal
buffer drain.
The most part of my misunderstanding - is "What is SYNC serial
device?". man pppd:
sync Use synchronous HDLC serial encoding instead of asynchronous.
The device used by pppd with this option must have sync support.
Currently supports Microgate SyncLink adapters under Linux and FreeBSD
2.2.8 and later.
what is "sync support" ?! Linux's /dev/ptsxxx support PPP_SYNC line
discipline (do not return error) but really does not (always) work.
P.S. It will be nice if you forward my letter to someone, who can also
help me in that question. Thanks.


Vladislav
29.03.2017
19:25:45
с sync_ppp кароч hdlc фрейминг не нужен, но оно криво работает с пэйлоадом больше, чем 1500 + 200чототам

Марк ☢
29.03.2017
19:26:49
Это кстати мое письмо

Vladislav
29.03.2017
19:27:09
да, но пробема преувеличена
нахрена писать целый пакет в 65535 байт, если стек его побил по mtu

Марк ☢
29.03.2017
19:27:43
Нифига. Если пакеты будут приходить из ядра в юзерспейс очень быстро, то пяка проявляется
А очень быстро это если ядро фрагментировало по мту
В томто и прекол

Vladislav
29.03.2017
19:28:23
на mtu > 1500 проявляется. sstp поддерживает до 4091

Марк ☢
29.03.2017
19:28:34
Да ну нет же
На мту 1500 проявляется же
Если слать большой айпи пакет
Оно фрагментирует на куски по 1500. И пепяка

Google

Vladislav
29.03.2017
19:29:53
ну нет же, т.к стек отфрагментирует и в pppsync валяться уже фрагменты с ff03 префиксом
у меня работало. но до mtu 1700, дальше начинали валиться куски

Марк ☢
29.03.2017
19:30:49
Правильно
Читай письмо
Дело не в мту

Vladislav
29.03.2017
19:31:07
там чушь

Марк ☢
29.03.2017
19:31:07
А в размере отправляемого программой пакета
Мту у меня всегда и везде 1500 или меньше

Vladislav
29.03.2017
19:31:30
одна из причин - в pppsync гвоздями прибито 1500 mtu, которое не меняется

Марк ☢
29.03.2017
19:31:43
Да ну жованный крот же

Vladislav
29.03.2017
19:32:42
линус пишет о попытке запихать в syncppp fd слишком большой пакет
что его не разбить

Марк ☢
29.03.2017
19:33:03
Нет не так
Он сувает первый пакет в терминал
Потом второй

Vladislav
29.03.2017
19:33:26
в sstp такого нет, там каждый ppp пакет меньше будет. точнее должен

Марк ☢
29.03.2017
19:33:44
И вот линукс не проверяет, можно ли всунуть текущий пакет в терминал целиком

Vladislav
29.03.2017
19:33:49
гм
погоди, перечитаю

Pável
29.03.2017
19:34:40

Google

Pável
29.03.2017
19:35:03
Может, оно не даёт всюду лезть?

Марк ☢
29.03.2017
19:35:06

Pável
29.03.2017
19:36:16
Да, оно

Vladislav
29.03.2017
19:36:24
момент про размер буфера я упустил. да, если оно не было выбрано ppp драйвером, то будет ошибка. если перед повторной попыткой записи очередного фрагмента прошло значительное фремя, дефрагментатор сфейлится

Марк ☢
29.03.2017
19:36:54

Vladislav
29.03.2017
19:37:04
крч. оно работает, работает быстро, но с ограничениями

Марк ☢
29.03.2017
19:37:13
Да

Vladislav
29.03.2017
19:37:16
в итоге я все равно переделал на async

Admin
ERROR: S client not available

Марк ☢
29.03.2017
19:37:23
А у тебя есть сырцы на гитхабе ?

Vladislav
29.03.2017
19:37:37
велосипедисты :)
есть, но там древняя версия с кривой sync обработкой
залью async, покажу

Марк ☢
29.03.2017
19:38:15
И да. Я подумывал о декапсулчторе ппп в юзерспейсе. В сстп используется полтора вида фреймов

Vladislav
29.03.2017
19:38:39

Марк ☢
29.03.2017
19:38:47
Дак да

Vladislav
29.03.2017
19:38:52
он в tun пихает

Google

Марк ☢
29.03.2017
19:38:56
Ну
Именно

Vladislav
29.03.2017
19:39:12
и какое ж он говно внутри

Марк ☢
29.03.2017
19:39:15
А чо. Сжатия не надо. Авторизация ? Гм.

Vladislav
29.03.2017
19:39:18
(кстати)

Марк ☢
29.03.2017
19:39:19
Да ты знатно упоролся кстати. Глобально.

Vladislav
29.03.2017
19:41:13
:)
wireshark как раз и патчил пока этим занимался. томушта собирать его невыносимо
а про кроскомпиляцию они там не слышали
проще и быстрее было хакнуть в 4 байта

Марк ☢
29.03.2017
19:43:50
Наркоман. Точно.

Vladislav
29.03.2017
19:46:57
https://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html

Марк ☢
29.03.2017
19:47:52
Да вы все тут наркоманы в хлам упоротые
Хотя. Щас говорят вайн в виндозной убунте запустили
И тащатся

Vladislav
29.03.2017
19:49:23
было бы от чего. там в этой "убунте" почти весь сетевой стек вырезан. с вытекающими
и пинг от рута, т.к рав сокеты на винде требуют доп привелегий

Марк ☢
29.03.2017
19:52:47
А кстати, это не годный ли способ писать трояны ? Каспер поди не умеет в анализ позиксвызовов
Как там это вобще работает

Vladislav
29.03.2017
19:53:05
посикс не при чем
Эта группа больше не существует