Skip to content

Instantly share code, notes, and snippets.

@meteozond
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save meteozond/9506571 to your computer and use it in GitHub Desktop.
Save meteozond/9506571 to your computer and use it in GitHub Desktop.
1 Основная задача:
1.1 Обеспечить доступ к seq/ack номерам сокета из userspace
1.2 Чтение seq/ack номеров заданного сокета
1.3 Изменение seq/ack номеров заданного сокета
2 Исполнение
2.1 Модуль ядра Linux
2.2 Интерфейс, один или несколько по согласованию:
2.2.1 echo/cat /proc
2.2.2 sysctl -w
2.2.2 cli-утилита
3 Совместимость
3.1 Linux
3.1.1.Debian
3.1.1.1 Sqeezy
3.1.1.2 Wheezy
3.1.1.3 Sid
3.1.2.Ubuntu
3.1.2.1 Raring Ringtail
3.1.2.2 Saucy Salamande
3.1.2.3 Trusty Tahr
3.2 IPv4
3.3 IPv6
4 Особые требования
4.1 Должна происходить именно замена seq/ack значений, а не их подмена на лету
4.2 Фоновая работа модуля не должна оказывать влияние на производительность системы
5 Входные данные
5.1 Для идентификации сокета (здесь и далее socket_id) допускается использование
5.1.1 client_ip:client_port
5.1.2 inode
5.2 seq - в режиме изменения значений
5.3 ack - в режиме изменения значений
6 Выходные данные
6.1 seq - в режиме чтения значений
6.2 ack - в режиме чтения значений
6.3 Сообщение об ошибке
6.3.1 Если заданного сокета нет
6.3.1 Если не удалось произвести изменения
7. Допустимые сценацрии
7.1 cli-утилита
7.1.1 Получение данных
> ./sockseq [ID]
< [seq] [ack]
7.1.2 Запись данных
> ./sockseq [ID] [seq] [ack]
< return 0
7.1.3 Ошибки
7.1.3.1 Нет сокета
> ./sockseq [ID]
< return 1; Socket doesn't exist
7.1.3.2 Не удалось внести изменения
> ./sockseq [ID] [seq] [ack]
< return 2; Replacement failed [причина]
7.2 cat/echo /proc - требует согласования
7.2.1 Получение данных
> cat /proc/sockseq/[ID]
< [seq] [ack]
7.2.2 Запись данных
> echo [seq] [ack] > /proc/sockseq/[ID]
< return 0
7.2.3 Необходимо согласовать формат вывода ошибок
7.3 sysctl - требует согласования
7.3.1 Получение данных
> sysctl -w sockseq.get=“ID=[ip:port]”
< [seq] [ack]
7.3.2 Запись данных
> sysctl -w sockseq.set=“ID=[ip:port] seq=[seq] ack=[ack]”
< return 0
7.3.3 Необходимо согласовать формат вывода ошибок
8 Справочная информация
8.1 Модуль будет являться частью механизма миграции соединений между хостами, так же известного как: Connection(или Socket, Stream) Handoff(или Transfer,Pass,Migrate,Repair,Move) или Split tcp.
8.2 Даная задача решается в рамках следующих сторонних проектов sock_forge, Sockmi, Migsock, Mtcp, Tcpha, Sockman, Tcpcp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment