Module: kamailio Branch: master Commit: b00190ff6927d5ddfcc0ed78a0eb701627eaadbb URL: https://github.com/kamailio/kamailio/commit/b00190ff6927d5ddfcc0ed78a0eb701627eaadbb
Author: Supreeth Herle <[email protected]> Committer: Daniel-Constantin Mierla <[email protected]> Date: 2023-11-30T10:18:47+01:00 ims_qos: option to use received ip, port and proto from via - can help with Rx_AAR_Register when EPC is behind a NAT - there could be an Rx AAR failure due to wrong IP address in Framed IP address field of Rx AAR message when EPC is behind a NAT --- Modified: src/modules/ims_qos/ims_qos_mod.c Modified: src/modules/ims_qos/ims_qos_mod.h --- Diff: https://github.com/kamailio/kamailio/commit/b00190ff6927d5ddfcc0ed78a0eb701627eaadbb.diff Patch: https://github.com/kamailio/kamailio/commit/b00190ff6927d5ddfcc0ed78a0eb701627eaadbb.patch --- diff --git a/src/modules/ims_qos/ims_qos_mod.c b/src/modules/ims_qos/ims_qos_mod.c index 82057650274..eaa323dcd5b 100644 --- a/src/modules/ims_qos/ims_qos_mod.c +++ b/src/modules/ims_qos/ims_qos_mod.c @@ -166,6 +166,8 @@ int omit_flow_ports = 0; int rs_default_bandwidth = 0; int rr_default_bandwidth = 0; +ims_qos_params_t _imsqos_params = {.recv_mode = 0}; + /* commands wrappers and fixups */ static int w_rx_aar(struct sip_msg *msg, char *route, char *dir, char *id, int id_type, int cfg_type); @@ -253,7 +255,7 @@ static param_export_t params[] = {{"rx_dest_realm", PARAM_STR, &rx_dest_realm}, ®ex_sdp_ip_prefix_to_maintain_in_fd}, {"include_rtcp_fd", INT_PARAM, &include_rtcp_fd}, {"suspend_transaction", INT_PARAM, &_ims_qos_suspend_transaction}, - {0, 0, 0}}; + {"recv_mode", PARAM_INT, &_imsqos_params.recv_mode}, {0, 0, 0}}; /** module exports */ @@ -1463,19 +1465,30 @@ static int w_rx_aar_register( goto error; } - //we use the received IP address for the framed_ip_address - recv_ip.s = ip_addr2a(&msg->rcv.src_ip); - recv_ip.len = strlen(ip_addr2a(&msg->rcv.src_ip)); + char buff[IP_ADDR_MAX_STR_SIZE]; + if(_imsqos_params.recv_mode == 0) { + //we use the received IP address for the framed_ip_address + recv_ip.s = ip_addr2a(&msg->rcv.src_ip); + recv_ip.len = strlen(ip_addr2a(&msg->rcv.src_ip)); + + recv_port = msg->rcv.src_port; + recv_proto = msg->rcv.proto; + } else { + memset(&recv_ip, 0, sizeof(str)); + memcpy(&buff, vb->host.s, vb->host.len); + buff[vb->host.len] = 0; + recv_ip.s = buff; + recv_ip.len = strlen(buff); + recv_port = via_port; + recv_proto = via_proto; + } ip_version = check_ip_version(recv_ip); if(!ip_version) { LM_ERR("check_ip_version returned 0 \n"); goto error; } - recv_port = msg->rcv.src_port; - recv_proto = msg->rcv.proto; - LM_DBG("Message received IP address is: [%.*s]\n", recv_ip.len, recv_ip.s); LM_DBG("Message via is [%d://%.*s:%d]\n", vb->proto, vb->host.len, vb->host.s, via_port); diff --git a/src/modules/ims_qos/ims_qos_mod.h b/src/modules/ims_qos/ims_qos_mod.h index 55a5a9bb356..fe061ec9a92 100644 --- a/src/modules/ims_qos/ims_qos_mod.h +++ b/src/modules/ims_qos/ims_qos_mod.h @@ -49,6 +49,11 @@ #define MOD_NAME "ims_qos" +typedef struct ims_qos_params +{ + int recv_mode; +} ims_qos_params_t; + /** callback functions */ struct AAAMessage; _______________________________________________ Kamailio (SER) - Development Mailing List To unsubscribe send an email to [email protected]
