Установка номера исходящего порта сокета в ядре Linux
Я пытаюсь интегрировать многопутевой TCP ( https://www.multipath-tcp.org/) в проект, и я хотел бы изменить исходный код, чтобы вручную выбрать порт исходящего сокета для нового подпотока mptcp так, чтобы Я могу определить пакеты, входящие и выходящие в моем приложении.
Адрес создается с помощью:
inet_create(sock_net(meta_sk), &sock, IPPROTO_TCP, 1);
и связаны:
sock.ops->bind(&sock, (struct sockaddr *)&loc_in, sizeof(struct sockaddr_in));
а затем подключен:
sock.ops->connect(&sock, (struct sockaddr *)&rem_in,
sizeof(struct sockaddr_in), O_NONBLOCK);
У меня такой вопрос: как я могу вручную установить исходящий порт сокета на уровне ядра и / или где указан порт в этой последовательности вызовов, чтобы я мог его изменить?
1 ответ
Решение
Вы бы установили исходящий порт в loc_in
структура, которую вы используете для bind()
разъем для локального адаптера / интерфейса, например:
struct sockaddr_in loc_in;
loc_in.sin_family = AF_INET;
// desired port...
loc_in.sin_port = htons(...);
// IP of desired adapter to connect() from...
loc_in.sin_addr.s_addr = inet_addr("...");