Предоставленные вами ссылки содержат фактический исходный код TcpNewReno, но они относятся к версии 3.18. Текущая версия 3.30.1. Итак, код, который вы нашли, устарел. Если вы используете последнюю версию ns-3 (которую я рекомендую), то TcpNewReno
реализуется в ./src/internet/model/tcp-congestion-ops.cc
. Если вы посмотрите на документацию API TcpNewReno
, вы найдете ссылки на исходный код для каждого члена / функции. Документация по API обязательна.
Протокол по умолчанию - TcpNewReno
, поэтому устанавливать его не нужно. Вы можете проверить значение по умолчанию двумя способами:
В документации по модели TCP сказано, что "поддерживается несколько алгоритмов управления перегрузкой, с NewReno по умолчанию" в ns-3 TCP section.
Вы можете убедиться, что по умолчанию TCP SocketType
установлен как TcpNewReno
в ./src/internet/model/tcp-l4-protocol.cc
в GetTypeId
function.
При этом, если вы хотите изменить значение по умолчанию, вы можете сделать это, вызвав Config::SetDefault
в главной функции вашего скрипта следующим образом
Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno"));
Продолжение
Если мне нужно отредактировать алгоритм вычисления CWND в TCPNewReno, где мне нужно внести изменения?
Если вы хотите создать новый алгоритм управления перегрузкой, я предлагаю вам НЕ изменять существующий код TcpNewReno
. Вместо этого создайте подкласс TcpNewReno. Определите и объявите этот подкласс в новых файлах ./src/internet/model/tcp-placeholder.{h,cc}
. Затем вам нужно добавить эти новые файлы в ./src/internet/wscript
. После этого эти новые файлы должны скомпилироваться при сборке с ./waf
. Опять же, чтобы фактически использовать этот новый алгоритм управления перегрузкой, вам нужно сделать Config::SetDefault
вызов выше.
Поскольку позже, после разработки, мне нужно получить измененный исходный код TCPNewReno и поместите это в фактическое устройство. Как я могу это сделать?
Это, вероятно, не происходит. Хотя ns-3 пытается имитировать c реальных реализаций того, как они работают, код, который вы пишете в ns-3 , почти наверняка не будет работать как есть на любой операционной системе , Если вы хотите протестировать новый алгоритм управления перегрузкой на реальных устройствах, вам нужно научиться программировать это устройство специально.
В зависимости от того, что вы делаете, вам может пригодиться Network Simulation Cradle .