IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/07/23
~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Leopold
Most2
Nausicaa
Ruskoye_911
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
orignal думаю пришло время для андроида по умолчанию публиковать D
Vort orignal: теперь keepalive вообще не шлются. так как попали в else ветку: github.com/PurpleI2P/i2pd/blob/4aa631c33f7db3e75979a3e21da3597ebd83bc6b/libi2pd/SSU2.cpp#L1002
Vort предпоследний коммит исправить будет, скорее всего, не сложно, поэтому сразу напишу о следующей проблеме:
Vort исправление сессий к интродьюсерам - это только половина решения проблем с NAT
Vort если теперь установка связи с U узлом будет работать нормально, то надо бы чтобы и данные передавались надёжно
Vort не хотелось бы получить увеличение количества сессий к U узлам только чтобы затем обнаружить, что эти сессии ломаются через 20 секунд неактивности
Vort однако полноценное исрпавление работы с NAT, на мой взгляд, связано с кое какой проблемой:
Vort для сессий к интродьюсерам KeepAlive выполняет двойную функцию: 1. спасает сессию от закрытия по IdleTimeout. 2. спасает порт на NAT устройстве от удаления
Vort проблема же в том, что для всех остальных сессий с U узлом спасать порт от удаления нужно, а вот спасать сессию от закрытия по IdleTimeout - не нужно
Vort как разделить эти функции - не знаю. хотелось бы надеяться, что для этого не придётся создавать SSU3
orignal да согласен счас поправлю keep alive'
orignal поправил
Vort orignal: остались у меня ещё некоторые сомнения по этому коду. или я что-то не понимаю, или баг
orignal ну объясни
orignal там эже 3 строчки ))
Vort из RI интродьюсер удаляет какая строчка? вот эта? i2p::context.RemoveSSU2Introducer (it, v4);
orignal если сессия протухла
Vort то есть, это примерно после 60 минут должно происходить?
orignal ой да ты прав
orignal счас
Vort я запутался :(
orignal да баг это да
orignal через 60 минут надо удалять
Vort а, ну да, критерий протухания теперь не годится для удаления из RI
orignal но в списке сидит до 80
Vort (я пока что отойду)
orignal поправил
Vort поставил последний коммит тестироваться в виртуалке
orignal я тоже
orignal у меня винда восьмерка там
Vort теперь по поводу проблемы номер два. я думаю, что нужен ещё один тип KeepAlive, отправка и приём которого _не_ обновляет m_LastActivityTimestamp
Vort если есть варианты решения проблемы без такого изменения, интересно о них узнать
orignal а почему без обновления?
orignal я понимаю ты пытаешься отловить смену порту
orignal *порта
Vort "<~orignal> а почему без обновления?" чтобы обычные (не интродьюсерные) сессии имели возможность отвалиться по неактивности. при постоянной посылке KeepAlive #2
Vort для интродьюсеров же ничего менять не надо - туда должны идти KeepAlive #1 (те, что сейчас)
orignal а ну это можно
orignal но я думаю надо делать это только если мы firewalled
orignal для OK смена порта не происходит
Vort "<~orignal> но я думаю надо делать это только если мы firewalled" если хоть один U узел в сессии есть, да
Vort вот только не знаю, кто должен отправлять KeepAlive #2 если оба узла U
Vort можно конечно в две стороны, но как-то неаккуратно
Vort ну точнее U узел должен всегда отправлять (если я правильно понимаю механизм)
Vort даже если сессия была входящая
Vort если R и R - никто не отправяет. если U и R (или R и U) - отправляет U. если U и U - или кто-то один отправляет или оба (хз как лучше)
Vort меня больше беспокоит, как это вписать в уже существующий SSU2
Vort если вписать можно, то остальное уже детали
orignal у тебя вопрос как узнать как они соединяеются?
Vort у меня два вопроса - 1. как конкретно сделать необновляющий активность KeepAlive #2
Vort 2. если оба узла U, то надо ли слать KeepAlive #2 в оба направления или только одного достаточно (и какого)
orignal ну 1 довольно легко
orignal сохраняешь старое значение отправляешь возвращешь старое на место
orignal оба надо потому что оба могут порт сменить
Vort а разве NAT грохнет порт если чисто входящие будут?
Vort там разве что вопрос потерь пакетов будет правда
Vort исходящие никуда не денутся (не потеряются)
Vort а вот входящий может не дойти - тогда проблемка
Vort в общем, два направления - надёжнее
Vort можно сделать пока что так, а потом подумать, можно ли "соптимизировать" одно направление
Vort ну это я про вариант U - U конечно же говорю
Vort "<~orignal> сохраняешь старое значение отправляешь возвращешь старое на место" а как различать KeepAlive первого типа и второго? первый же тоже очень важен, просто поменять поведение первого нельзя
orignal параметр сделать
Vort куда? сейчас же шлётся eSSU2BlkPadding. разве ему можно что-то ещё прикрутить? или речь о другом уровне?
orignal в метод SendKeepAlive
orignal сохраняешь m_LastActivityTimestamp в начале
orignal и возращаешь обртано после отправки
orignal он protected
Vort это только отправка
Vort на стороне приёма тоже надо делать "необновление"
orignal а с получением никак не различить
orignal только если отдельный блок вводить
Vort хотя если U будет рвать (типа он порядочный), то может и сойдёт
Vort как промежуточный вариант нормально
Vort а вообще новый блок или новое что-то_ещё - да, надо
Vort так это довольно лёгкое исправление выходит
Vort пусть и с компромиссами
orignal именно так достаточно ввести новый блок KeepAlive
orignal в который еще и некоторые данные можно впихнуть
Vort ну как я понял, сейчас можно обойтись без ввода нового блока. а в будущем... будет видно
orignal проблема только в том что согласовать с idk это будет невозможно
Vort надо "оживить" U узлы для начала. а потом можно "полировать" решение
orignal он будет беконечно сопли жевать
orignal час прошел все пашет
Vort ага, вижу 6 keeaplive шлётся за раз
Vort теперь осталось ещё отметку в 80 минут пройти без багов
orignal я до этого не дошел ))
Vort подозреваю, что таки баг :(
Vort интродьюсеры, выбранные на 60й минуте, на 80й минуте куда-то потерялись
Vort и выбрались новые
Vort хм. мой узел с кодом 2 закрыл к ним соединения
Vort ага. потому что до этого были выбраны другие интродьюсеры
Vort странно
orignal но потом появились?
orignal просиходит ротация
Vort попробую объяснить. приблизительно вот так получилось:
Vort первая партия интродьюсеров проработала с 0 до 80 секунд
Vort вторая партия - с 60 до 80 секунд
Vort третья начала работу с 80 секунд
Vort я ожидал, что будут перекрывающиеся диапазоны по 80 сек
Vort а получился один 80, а один, короткий, 20
Vort ой, не секунд, минут
Vort в общем, не понятно, почему вторая партия выкинулась раньше времени
Vort хотя кажется догадываюсь
Vort отсчёт 80 минут идёт с создания сессии, а не с выбора сессии интродьюсером
Vort я правда так и не понял, какая разница, насколько старая сессия
orignal надо посмотерть в код
Vort то есть, как я понимаю, надо хранить не только время создания сессии, но и время выбора её интродьюсером
orignal не уверен
Vort и отсчитывать 60 и 80 минут от времени выбора
orignal возможно что да
orignal или просто как я там кое где делаю менять время создания
weko Зачем вообще эти 20 минут
Vort weko: чтобы дать время информации расползтись по сети
weko Так пишется ли в RI время истечения интродьюсера?
Vort пишется +80
Vort а меняется интродьюсер в RI через 60
weko Так а зачем тогда эти 20 минут? Они бесполезны
Vort остальные 20 минут получается двойной набор интродьюсеров
Vort старые доделывают свою работу, но уже подключены и новые
weko [15:12:39] <Vort> остальные 20 минут получается двойной набор интродьюсеров
weko Проще просто количество увеличить
weko И/или длительность
Vort нет, надо плавно вывести из работы интродьюсеры, заканчивающие свой срок
weko Каждый пир должен сам видеть что иетродьюсер сдох
weko Потому что он знает время своё и время истечения
Vort видимо, это нужно для того, чтобы не забивать место в RI почти-истёкшими интродьюсерами
weko А значит знает что использование закончившихся интродьюсеров смысла не имеет
weko И кто именно закончился
weko Ясно, спасибо
weko Надо поменять тогда названия, а то не понятно нифига
Vort по сути, и то и то - сроки годности, да. только разные
weko EXPIRATION -> DURATION (фактически сколько длиться) (хотя можно и оставить)
weko DURATION -> PUBLIC_TIME (сколько времени публикуется)
Vort срок годности для обслуживания и срок годности для анонсирования
weko Ай блять перепутал
weko Не понятно короче и нужно переименовать
Vort в i2p вообще с терминологией дела не очень
weko Да тут термины не нужны специальные
weko Нужно просто называть вещи как есть
Vort ну вот я когда разбирался с i2p, меня сильно запутал термин "destination". будет ли это кто-то менять? ))
weko Вот например для SSU2_KEEP_ALIVE_INTERVAL_VARIANCE нужно добавить "MINUS_ONE" если оно работает так как вы сказали
weko Или исправить код чтобы работало как написано
Vort эту 4ку можно интерпретировать, как возможность существования 4 разных значений - 15, 16, 17, 18
Vort так что четвёрка тут есть :))
weko А в комментариях написано "in seconds"
weko Секунд тут нет
weko [15:30:10] <Vort> ну вот я когда разбирался с i2p, меня сильно запутал термин "destination". будет ли это кто-то менять? ))
weko Нет. А зачем? Тут как раз понятно всё
weko Вот туннели бывают разные. Вот это путаница
Vort "А зачем?" я эту сущность понимаю как просто адрес. этот адрес может быть как источником данных (source), так и назначением (destination)
Vort почему тогда не source ?
weko Так destination может быть как источником так и получателем
weko По сути это и есть просто адрес
weko Ну только "рабочий"
Vort "Вот туннели бывают разные" - там другая путаница - количество туннелей и количество хопов. и то и то - количество
weko [15:36:08] <Vort> "Вот туннели бывают разные" - там другая путаница - количество туннелей и количество хопов. и то и то - количество
weko И что? По названию параметров всё понятно
weko Количество хопов к тому же вообще именуется "длинна"
Vort что ж тут понятного? длина списка с туннелями, допустим
weko Длина
Vort и почему нельзя сказать "количество хопов"?
Vort просто потому что "традиция"? )
weko [15:37:46] <Vort> что ж тут понятного? длина списка с туннелями, допустим
weko Список у тебя только в вебконсоли. А это надстройка над i2pd и i2pdclient
Vort в памяти i2pd полагаю тоже список. ну или массив. и у них есть длина
weko Vort: список программный - там уже программисткий термин
weko Не людской
weko :))
Vort может, кому-то прям сразу понятно, за всех говорить не могу. но меня путает до сих пор
weko У меня никогда такого вопроса не возникало
Vort вспомнил более точно, что меня запутало в термине "destination": я сразу стал искать, где же соответствующий ему "source". и удивился, когда не нашёл
weko а с чего вдруг должен быть ?
weko ну точнее его может не быть в коде или в используемой терминологии
weko но фактически то он есть
Vort "<weko> а с чего вдруг должен быть ?" по той же причине, по которой у палки должно быть два конца. если есть конечная точка, значит есть и начальная. ну должна быть по логике
weko так она то есть
Vort значит это просто точка, без указания того, конечная или начальная
Vort ну это я не к тому говорю, чтобы что-то сейчас менять
Vort просто для понимания ситуации
weko <Vort> значит это просто точка, без указания того, конечная или начальная
weko я же наоборот написал
Vort может, я что-то не так понимаю? source на одном компе = destination на другом
Vort то есть, он как бы есть, но является той же самой сущностью по сути
weko ну так
weko а я о чём?
Vort почему тогда "наоборот"? сущность то одна и та же
weko тут всё нормально по терминологии. не правильно что I2NP туннели путаются с IP туннелями
weko <Vort> почему тогда "наоборот"? сущность то одна и та же
weko ничего не понимаю. я написал что source не обязано быть написано на каждом углу
weko и это не значит что его нету
Vort как противоположности тому, что понимается под destination, - нету
weko и с чего ты решил что этого не существует?
Vort "I2NP туннели путаются с IP туннелями": IP туннель это что? port map ?
weko данные же не из пустоты отправляются
Vort "данные же не из пустоты отправляются" - из такого же "destination". разве нет?
weko Vort: IP туннель это тот что ты создаёшь когда настраиваешь туннель в конфиге
weko <Vort> "данные же не из пустоты отправляются" - из такого же "destination". разве нет?
weko ну как ты сам сказал это и есть таже самая сущность что и source
Vort так это не "нормально по терминологии"
Vort про IP туннель согласен - есть такая проблема
Vort я вообще думал, что tunnels.conf так называется из-за того, что там можно указать количество туннелей :)
Vort хотя не очень то я и думал об этом если честно )
Vort в веб консоли кстати написано "I2P tunnels"
Vort а не "IP tunnels"
weko <Vort> в веб консоли кстати написано "I2P tunnels"
weko это вообще не туда ни сюда
Vort так что хз что там имелось в виду. я больше запоминаю пункты меню по их расположению, так как смысл можно не пытаться понять )
weko имелось ввиду "тяп ляп и в продакш"
weko продакшн
Vort так в java i2p не лучше. по крайней мере, в документации
Vort или там точно то же?
weko я откуда знаю
Vort я подозреваю, что часть путаницы i2pd унаследована из java, а часть - придумана самостоятельно :))
weko это же всё вопрос реализации
weko в данном моменте документацию жаба-ш2з можно послать в известное место
Vort термины - это ещё и вопрос документации
Vort если в документации есть термин, то выдумывать свой аналог - это как раз и есть путаница
weko нет
weko так как в вопросе не касающихся протокола i2p документация не компетента
weko и является просто рассказом "а у нас вот так"
Vort стабильность иногда важнее точности. так что тут не однозначно
Vort это важно, чтобы юзерам java не пришлось выучивать новые термины при переходе на i2pd
Vort ну и вообще чтобы можно было общаться, понимая друг друга
weko надо ещё горшок поставить
user Нашел недоработку в алгоритме работы роутера. Если в конфиге добавить в доверенные только один RI, чтобы выходить в сеть через него, то через некоторое время этот RI удаляется из нетдб (вероятно как устаревший) и наш роутер повисает в �
user Нужно бы придумать какой-нибудь механизм защиты от таких ситуаций
Vort полагаю, это редко используемая опция. то, что оно хоть как-то работает - это уже достижение
weko у тебя кодировка поехала
user Проблема не критичная, но важная.
Vort некоторые опции вообще не работают и кто их будет чинить - неизвестно
weko кракозябры
Vort это просто UTF8 символ напополам перекусило
Vort тоже где-то баг :)
user У роутера кроме веб-морды, есть еще интрфейсы для получения данных о текущем состоянии?
user Вроде информации о туннелях, транзите, tcsr.
weko I2Pcontrol
orignal 20 минут нужно потому что netdb не сразу обновляется
orignal чтобы моглти подключиться те у кого в базе старый
weko просто тогда верно говорить что интродьюсер 80 минут а не 60
orignal ну я сделал как дед сказал
user В i2pcontrol есть запрос на tcsr? Не могу найти. Искал здесь: geti2p.net/en/docs/api/i2pcontrol
orignal у нас могут быть свои команды
orignal i2p.router.net.tunnels.successrate"
orignal у нас
orignal ты читай наши отличия
user Да, сейчас гляну, спасибо