@@ -72,7 +72,7 @@ TcpFlow::TcpFlow(Id a_id, FlowFourTuple a_four_tuple, bool a_ecn_capable,
7272 }
7373}
7474
75- std::shared_ptr<Packet> TcpFlow::create_data_packet (
75+ PacketPtr TcpFlow::create_data_packet (
7676 PacketInfo info, std::shared_ptr<IHost> sender,
7777 std::shared_ptr<IHost> receiver) {
7878 auto packet = std::make_shared<Packet>();
@@ -82,7 +82,7 @@ std::shared_ptr<Packet> TcpFlow::create_data_packet(
8282 packet->flags .set_flag (m_packet_type_label, PacketType::DATA )
8383 .log_err_if_not_present (" Failed to set packet type (DATA)" );
8484
85- set_avg_rtt_if_present (* packet);
85+ set_avg_rtt_if_present (packet);
8686
8787 packet->data_id = std::move (info.id );
8888 packet->sender_id = sender->get_id ();
@@ -94,7 +94,7 @@ std::shared_ptr<Packet> TcpFlow::create_data_packet(
9494 std::shared_ptr<TcpFlow> flow = shared_from_this ();
9595
9696 packet->callback = [flow, delivery_callback = info.callback ](
97- const Packet& delivered_packet) {
97+ PacketPtr delivered_packet) {
9898 flow->process_data_packet (delivered_packet, delivery_callback);
9999 };
100100 packet->generated_time = info.generated_time ;
@@ -107,15 +107,15 @@ std::shared_ptr<Packet> TcpFlow::create_data_packet(
107107 return packet;
108108}
109109
110- void TcpFlow::set_avg_rtt_if_present (Packet& packet) {
110+ void TcpFlow::set_avg_rtt_if_present (PacketPtr packet) {
111111 std::optional<TimeNs> avg_rtt = m_context.rtt_statistics .get_mean ();
112112 if (avg_rtt.has_value ()) {
113- set_avg_rtt_flag (packet. flags , avg_rtt.value ())
113+ set_avg_rtt_flag (packet-> flags , avg_rtt.value ())
114114 .log_err_if_not_present (" Failed to set average RTT" );
115115 }
116116}
117117
118- void TcpFlow::send_data_packet (std::shared_ptr<Packet> data) {
118+ void TcpFlow::send_data_packet (PacketPtr data) {
119119 TimeNs now = Scheduler::get_instance ().get_current_time ();
120120
121121 Scheduler::get_instance ().add (
@@ -127,13 +127,13 @@ void TcpFlow::send_data_packet(std::shared_ptr<Packet> data) {
127127 m_context.sender ->enqueue_packet (data);
128128}
129129
130- void TcpFlow::process_data_packet (const Packet& data,
130+ void TcpFlow::process_data_packet (PacketPtr data,
131131 const PacketCallback& callback) {
132- m_packet_reordering.add_record (data. packet_num );
132+ m_packet_reordering.add_record (data-> packet_num );
133133 m_metrics.packet_reordering ->add_record (
134134 Scheduler::get_instance ().get_current_time (),
135135 m_packet_reordering.value ());
136- auto ack = std::make_shared<Packet>(data);
136+ auto ack = std::make_shared<Packet>(* data);
137137 ack->sender_id = IdWithHash (m_context.receiver ->get_id ());
138138 ack->sender_port = m_context.receiver_port ;
139139 ack->receiver_id = IdWithHash (m_context.sender ->get_id ());
@@ -146,42 +146,42 @@ void TcpFlow::process_data_packet(const Packet& data,
146146 fmt::format (" Flow {}: could not set type label to ack packet {}" ,
147147 m_id, ack->to_string ()));
148148 }
149- SizeByte data_packet_size = data. size ;
149+ SizeByte data_packet_size = data-> size ;
150150
151151 std::shared_ptr<TcpFlow> flow = shared_from_this ();
152152 ack->callback = [flow, callback,
153- data_packet_size](const Packet& delivered_ack) {
153+ data_packet_size](PacketPtr delivered_ack) {
154154 flow->process_ack (delivered_ack, data_packet_size, callback);
155155 };
156156
157157 m_context.receiver ->enqueue_packet (std::move (ack));
158158}
159159
160- void TcpFlow::process_ack (const Packet& ack, SizeByte data_packet_size,
160+ void TcpFlow::process_ack (PacketPtr ack, SizeByte data_packet_size,
161161 PacketCallback callback) {
162162 TimeNs now = Scheduler::get_instance ().get_current_time ();
163163
164- TimeNs rtt = now - ack. sent_time ;
164+ TimeNs rtt = now - ack-> sent_time ;
165165
166166 m_context.rtt_statistics .add_record (rtt);
167167
168168 m_metrics.rtt ->add_record (now, rtt.value ());
169169
170170 update_rto_on_ack ();
171171
172- if (!m_ack_monitor.confirm_one (ack. packet_num )) {
172+ if (!m_ack_monitor.confirm_one (ack-> packet_num )) {
173173 LOG_WARN (
174174 fmt::format (" Flow {} got ack {} that confirms nothing; ignored" ,
175- m_id, ack. to_string ()));
175+ m_id, ack-> to_string ()));
176176 return ;
177177 }
178178 m_context.last_ack_receive_time = now;
179179
180180 m_context.delivered_size += data_packet_size;
181181
182182 SpeedGbps delivery_rate =
183- (m_context.delivered_size - ack. delivered_data_size_at_origin ) /
184- (now - ack. generated_time );
183+ (m_context.delivered_size - ack-> delivered_data_size_at_origin ) /
184+ (now - ack-> generated_time );
185185
186186 m_metrics.delivery_rate ->add_record (now, delivery_rate.value ());
187187 m_context.delivery_rate_statistics .add_record (delivery_rate);
@@ -196,7 +196,7 @@ void TcpFlow::update_rto_on_ack() {
196196 m_rto.is_steady = true ;
197197}
198198
199- void TcpFlow::on_timeout (std::shared_ptr<Packet> data) {
199+ void TcpFlow::on_timeout (PacketPtr data) {
200200 if (m_ack_monitor.is_confirmed (data->packet_num )) {
201201 LOG_INFO (fmt::format (
202202 " Flow {}: packet {} is confirmed when timeout reached; no retransmit" ,
@@ -213,7 +213,7 @@ void TcpFlow::update_rto_on_timeout() {
213213 }
214214}
215215
216- void TcpFlow::retransmit_packet (std::shared_ptr<Packet> data) {
216+ void TcpFlow::retransmit_packet (PacketPtr data) {
217217 m_context.retransmit_size += data->size ;
218218 send_data_packet (data);
219219}
0 commit comments