Установка номера исходящего порта сокета в ядре 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("...");
Другие вопросы по тегам