@@ -278,13 +278,16 @@ gtpc_pkt_put_mei(pkt_buffer_t *pbuff, uint64_t mei)
278
278
}
279
279
280
280
static int
281
- gtpc_pkt_put_cause (pkt_buffer_t * pbuff , uint8_t cause )
281
+ gtpc_pkt_put_cause (pkt_buffer_t * pbuff , uint8_t cause , gtp_teid_t * teid )
282
282
{
283
283
gtp_ie_cause_t * ie ;
284
284
285
285
if (gtpc_pkt_put_ie (pbuff , GTP_IE_CAUSE_TYPE , sizeof (gtp_ie_cause_t )) < 0 )
286
286
return 1 ;
287
287
288
+ /* a tx pkt */
289
+ teid -> session -> w -> cause_stats .tx [cause ].count ++ ;
290
+
288
291
ie = (gtp_ie_cause_t * ) pbuff -> data ;
289
292
ie -> value = cause ;
290
293
pkt_buffer_put_data (pbuff , sizeof (gtp_ie_cause_t ));
@@ -580,7 +583,7 @@ gtpc_pkt_put_bearer_context(pkt_buffer_t *pbuff, gtp_session_t *s, gtp_teid_t *t
580
583
pkt_buffer_put_data (pbuff , sizeof (gtp_ie_bearer_context_t ));
581
584
582
585
err = err ? : gtpc_pkt_put_eps_bearer_id (pbuff , apn -> eps_bearer_id );
583
- err = err ? : gtpc_pkt_put_cause (pbuff , GTP_CAUSE_REQUEST_ACCEPTED );
586
+ err = err ? : gtpc_pkt_put_cause (pbuff , GTP_CAUSE_REQUEST_ACCEPTED , teid );
584
587
err = err ? : gtpc_pkt_put_f_teid (pbuff , teid , 2 , GTP_TEID_INTERFACE_TYPE_SGW_GTPU );
585
588
err = err ? : gtpc_pkt_put_charging_id (pbuff , s -> charging_id );
586
589
if (err )
@@ -602,6 +605,9 @@ gtpc_build_header(pkt_buffer_t *pbuff, gtp_teid_t *teid, uint8_t type)
602
605
{
603
606
gtp_hdr_t * h = (gtp_hdr_t * ) pbuff -> head ;
604
607
608
+ /* a tx pkt */
609
+ teid -> session -> w -> msg_stats .tx [type ].count ++ ;
610
+
605
611
h -> version = 2 ;
606
612
h -> type = type ;
607
613
h -> teid_presence = 1 ;
@@ -625,7 +631,7 @@ gtpc_build_create_session_response(pkt_buffer_t *pbuff, gtp_session_t *s, gtp_te
625
631
gtpc_build_header (pbuff , teid , GTP_CREATE_SESSION_RESPONSE_TYPE );
626
632
627
633
/* Put IE */
628
- err = err ? : gtpc_pkt_put_cause (pbuff , GTP_CAUSE_REQUEST_ACCEPTED );
634
+ err = err ? : gtpc_pkt_put_cause (pbuff , GTP_CAUSE_REQUEST_ACCEPTED , teid );
629
635
err = err ? : gtpc_pkt_put_recovery (pbuff );
630
636
err = err ? : gtpc_pkt_put_indication (pbuff , apn -> indication_flags );
631
637
err = err ? : gtpc_pkt_put_pco (pbuff , apn -> pco , ipcp );
@@ -656,7 +662,7 @@ gtpc_build_change_notification_response(pkt_buffer_t *pbuff, gtp_session_t *s, g
656
662
/* Put IE */
657
663
err = err ? : gtpc_pkt_put_imsi (pbuff , s -> conn -> imsi );
658
664
err = err ? : gtpc_pkt_put_mei (pbuff , s -> mei );
659
- err = err ? : gtpc_pkt_put_cause (pbuff , GTP_CAUSE_REQUEST_ACCEPTED );
665
+ err = err ? : gtpc_pkt_put_cause (pbuff , GTP_CAUSE_REQUEST_ACCEPTED , teid );
660
666
if (err ) {
661
667
log_message (LOG_INFO , "%s(): Error building PKT !?"
662
668
, __FUNCTION__ );
@@ -678,7 +684,7 @@ gtpc_build_errmsg(pkt_buffer_t *pbuff, gtp_teid_t *teid, uint8_t type, uint8_t c
678
684
gtpc_build_header (pbuff , teid , type );
679
685
680
686
/* Put IE */
681
- err = err ? : gtpc_pkt_put_cause (pbuff , cause );
687
+ err = err ? : gtpc_pkt_put_cause (pbuff , cause , teid );
682
688
err = err ? : gtpc_pkt_put_recovery (pbuff );
683
689
if (err )
684
690
return -1 ;
@@ -705,7 +711,7 @@ gtpc_build_delete_bearer_request(pkt_buffer_t *pbuff, gtp_teid_t *teid, uint8_t
705
711
/* Put IE */
706
712
err = err ? : gtpc_pkt_put_eps_bearer_id (pbuff , bearer_id );
707
713
if (cause )
708
- err = err ? : gtpc_pkt_put_cause (pbuff , cause );
714
+ err = err ? : gtpc_pkt_put_cause (pbuff , cause , teid );
709
715
if (err )
710
716
return -1 ;
711
717
@@ -879,6 +885,9 @@ gtpc_echo_request_hdl(gtp_server_worker_t *w, struct sockaddr_storage *addr)
879
885
880
886
h -> type = GTP_ECHO_RESPONSE_TYPE ;
881
887
888
+ /* it does not use gtpc_build_header(), so count from here */
889
+ w -> msg_stats .tx [h -> type ].count ++ ;
890
+
882
891
return 0 ;
883
892
}
884
893
@@ -1109,6 +1118,8 @@ gtpc_delete_session_request_hdl(gtp_server_worker_t *w, struct sockaddr_storage
1109
1118
goto end ;
1110
1119
}
1111
1120
1121
+ log_message (LOG_INFO , "Delete-Session-Req:={F-TEID:0x%.8x}" , ntohl (teid -> peer_teid -> id ));
1122
+
1112
1123
msg_ie = gtp_msg_ie_get (msg , GTP_IE_F_TEID_TYPE );
1113
1124
if (!msg_ie ) {
1114
1125
log_message (LOG_INFO , "%s(): no F_TEID IE present. ignoring..."
@@ -1279,10 +1290,13 @@ gtpc_router_handle(gtp_server_worker_t *w, struct sockaddr_storage *addr)
1279
1290
{
1280
1291
gtp_hdr_t * gtph = (gtp_hdr_t * ) w -> pbuff -> head ;
1281
1292
1282
- if (* (gtpc_msg_hdl [gtph -> type ].hdl ))
1293
+ if (* (gtpc_msg_hdl [gtph -> type ].hdl )) {
1294
+ w -> msg_stats .rx [gtph -> type ].count ++ ;
1283
1295
return (* (gtpc_msg_hdl [gtph -> type ].hdl )) (w , addr );
1296
+ }
1284
1297
1285
1298
/* In router mode, silently ignore message we do not support */
1299
+ w -> msg_stats .rx [gtph -> type ].unsupported ++ ;
1286
1300
return -1 ;
1287
1301
}
1288
1302
@@ -1303,6 +1317,8 @@ gtpu_echo_request_hdl(gtp_server_worker_t *w, struct sockaddr_storage *addr)
1303
1317
pkt_buffer_set_end_pointer (w -> pbuff , gtp1_get_header_len (h ));
1304
1318
pkt_buffer_set_data_pointer (w -> pbuff , gtp1_get_header_len (h ));
1305
1319
1320
+ w -> msg_stats .tx [h -> type ].count ++ ;
1321
+
1306
1322
gtp1_ie_add_tail (w -> pbuff , sizeof (gtp1_ie_recovery_t ));
1307
1323
rec = (gtp1_ie_recovery_t * ) w -> pbuff -> data ;
1308
1324
rec -> type = GTP1_IE_RECOVERY_TYPE ;
@@ -1342,13 +1358,16 @@ gtpu_router_handle(gtp_server_worker_t *w, struct sockaddr_storage *addr)
1342
1358
if (len < 0 )
1343
1359
return -1 ;
1344
1360
1345
- if (* (gtpu_msg_hdl [gtph -> type ].hdl ))
1361
+ if (* (gtpu_msg_hdl [gtph -> type ].hdl )) {
1362
+ w -> msg_stats .rx [gtph -> type ].count ++ ;
1346
1363
return (* (gtpu_msg_hdl [gtph -> type ].hdl )) (w , addr );
1364
+ }
1347
1365
1348
1366
/* Not supported */
1349
1367
log_message (LOG_INFO , "%s(): GTP-U/path-mgt msg_type:0x%.2x from %s not supported..."
1350
1368
, __FUNCTION__
1351
1369
, gtph -> type
1352
1370
, inet_sockaddrtos (addr ));
1371
+ w -> msg_stats .rx [gtph -> type ].unsupported ++ ;
1353
1372
return -1 ;
1354
1373
}
0 commit comments