@@ -9,17 +9,20 @@ namespace sim {
99std::string NewTcpFlow::m_packet_type_label = " type" ;
1010
1111std::shared_ptr<NewTcpFlow> NewTcpFlow::create_shared (
12- Id a_id, std::shared_ptr<IHost> a_sender, std::shared_ptr<IHost> a_receiver ,
13- bool a_ecn_capable, RTO a_rto, TcpFlowMetricsFilters a_metrics_flags) {
12+ Id a_id, FlowFourTuple a_four_tuple, bool a_ecn_capable, RTO a_rto ,
13+ TcpFlowMetricsFilters a_metrics_flags) {
1414 return std::shared_ptr<NewTcpFlow>(
15- new NewTcpFlow (std::move (a_id), a_sender, a_receiver , a_ecn_capable,
15+ new NewTcpFlow (std::move (a_id), std::move (a_four_tuple) , a_ecn_capable,
1616 std::move (a_rto), std::move (a_metrics_flags)));
1717}
1818
1919void NewTcpFlow::send (std::vector<PacketInfo> packets_info) {
2020 if (packets_info.empty ()) {
2121 return ;
2222 }
23+ if (!m_context.start_time .has_value ()) {
24+ m_context.start_time = Scheduler::get_instance ().get_current_time ();
25+ }
2326 auto sender = m_context.sender ;
2427 auto receiver = m_context.receiver ;
2528 for (auto info : packets_info) {
@@ -52,11 +55,10 @@ MetricsTable NewTcpFlow::get_metrics_table() const {
5255void NewTcpFlow::write_inner_metrics (
5356 [[maybe_unused]] std::filesystem::path output_dir) const {};
5457
55- NewTcpFlow::NewTcpFlow (Id a_id, std::shared_ptr<IHost> a_sender,
56- std::shared_ptr<IHost> a_receiver, bool a_ecn_capable,
58+ NewTcpFlow::NewTcpFlow (Id a_id, FlowFourTuple a_four_tuple, bool a_ecn_capable,
5759 RTO a_rto, TcpFlowMetricsFilters a_metrics_flags)
5860 : m_id(std::move(a_id)),
59- m_context (a_sender, a_receiver ),
61+ m_context (a_four_tuple ),
6062 m_ecn_capable(a_ecn_capable),
6163 m_rto(std::move(a_rto)),
6264 m_metrics({std::make_shared<MetricsStorage>(),
@@ -86,6 +88,8 @@ Packet NewTcpFlow::create_data_packet(PacketInfo info,
8688
8789 packet.data_id = std::move (info.id );
8890 packet.source_id = sender->get_id ();
91+ packet.sender_port = m_context.sender_port ;
92+ packet.receriver_port = m_context.receriver_port ;
8993 packet.dest_id = receiver->get_id ();
9094 packet.size = info.packet_size ;
9195
@@ -134,7 +138,9 @@ void NewTcpFlow::process_data_packet(const Packet& data,
134138 m_packet_reordering.value ());
135139 Packet ack = data;
136140 ack.source_id = m_context.receiver ->get_id ();
141+ ack.sender_port = m_context.receriver_port ;
137142 ack.dest_id = m_context.sender ->get_id ();
143+ ack.receriver_port = m_context.sender_port ;
138144 ack.size = SizeByte (1 );
139145 ack.ttl = M_MAX_TTL ;
140146 ack.flags .set_flag (m_packet_type_label, PacketType::ACK )
@@ -171,6 +177,7 @@ void NewTcpFlow::process_ack(const Packet& ack, SizeByte data_packet_size,
171177 m_id, ack.to_string ()));
172178 return ;
173179 }
180+ m_context.last_ack_receive_time = now;
174181
175182 m_context.delivered_size += data_packet_size;
176183
0 commit comments