@@ -183,17 +183,32 @@ static int rx_st40p_rtp_ready(void* priv) {
183183 }
184184 }
185185
186+ /* per-port sequence tracking */
186187 if (ctx -> last_seq_valid [s_port ]) {
187188 uint16_t expected = (uint16_t )(ctx -> last_seq [s_port ] + 1 );
188189 if (expected != seq_number ) {
189- frame_info -> seq_discont = true;
190+ frame_info -> port_seq_discont [ s_port ] = true;
190191 if (mt_seq16_greater (seq_number , expected ))
191- frame_info -> seq_lost += (uint16_t )(seq_number - expected );
192+ frame_info -> port_seq_lost [ s_port ] += (uint16_t )(seq_number - expected );
192193 }
193194 }
194195 ctx -> last_seq [s_port ] = seq_number ;
195196 ctx -> last_seq_valid [s_port ] = true;
196197
198+ /* session-level sequence tracking (merged across all ports) */
199+ if (ctx -> session_last_seq_valid ) {
200+ uint16_t expected = (uint16_t )(ctx -> session_last_seq + 1 );
201+ if (expected != seq_number && mt_seq16_greater (seq_number , ctx -> session_last_seq )) {
202+ frame_info -> seq_discont = true;
203+ frame_info -> seq_lost += (uint16_t )(seq_number - expected );
204+ }
205+ }
206+ if (!ctx -> session_last_seq_valid ||
207+ mt_seq16_greater (seq_number , ctx -> session_last_seq )) {
208+ ctx -> session_last_seq = seq_number ;
209+ ctx -> session_last_seq_valid = true;
210+ }
211+
197212 frame_info -> pkts_total ++ ;
198213 frame_info -> pkts_recv [s_port ]++ ;
199214
0 commit comments