diff --git a/openair-cn/SGW-LITE/sgw_lite_handlers.c b/openair-cn/SGW-LITE/sgw_lite_handlers.c index c0ed9a9f578df8cd38d4f5aa94d2c670897083e0..bb38ebe7b6e6b66f7cda2f64816c142e2face687 100644 --- a/openair-cn/SGW-LITE/sgw_lite_handlers.c +++ b/openair-cn/SGW-LITE/sgw_lite_handlers.c @@ -712,6 +712,42 @@ sgw_lite_handle_sgi_endpoint_updated( modify_response_p->cause = REQUEST_ACCEPTED; modify_response_p->trxn = new_bearer_ctxt_info_p->sgw_eps_bearer_context_information.trxn; #if defined (ENABLE_USE_GTPU_IN_KERNEL) + // if default bearer +#warning "TODO define constant for default eps_bearer id" + + //if ((resp_pP->eps_bearer_id == 5) && (spgw_config.pgw_config.pgw_masquerade_SGI == 0)) { + if (resp_pP->eps_bearer_id == 5) { + ret = snprintf(cmd, + 256, + "iptables -t mangle -I %s -d %u.%u.%u.%u -m mark --mark 0 -j GTPUAH --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", + (spgw_config.sgw_config.local_to_eNB) ? "INPUT":"POSTROUTING", + eps_bearer_entry_p->paa.ipv4_address[0], + eps_bearer_entry_p->paa.ipv4_address[1], + eps_bearer_entry_p->paa.ipv4_address[2], + eps_bearer_entry_p->paa.ipv4_address[3], + sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x000000FF, + (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x0000FF00) >> 8, + (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x00FF0000) >> 16, + (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0xFF000000) >> 24, + eps_bearer_entry_p->s_gw_teid_for_S1u_S12_S4_up, + eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[0], + eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[1], + eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[2], + eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[3], + eps_bearer_entry_p->enb_teid_for_S1u + ); + + if ((ret < 0) || (ret > 256)) { + SPGW_APP_ERROR("ERROR in preparing default downlink tunnel, tune string length\n"); + exit (-1); + } + //use API when prototype validated + ret = spgw_system(cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); + if (ret < 0) { + SPGW_APP_ERROR("ERROR in setting up default downlink TUNNEL\n"); + } + } + //------------------------- ret = snprintf(cmd, 256, "iptables -t mangle -I %s -d %u.%u.%u.%u -m mark --mark %u -j GTPUAH --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", @@ -745,38 +781,6 @@ sgw_lite_handle_sgi_endpoint_updated( SPGW_APP_ERROR("ERROR in setting up downlink TUNNEL\n"); } - // if default bearer -#warning "TODO define constant for default eps_bearer id" - - if ((resp_pP->eps_bearer_id == 5) && (spgw_config.pgw_config.pgw_masquerade_SGI == 0)) { - ret = snprintf(cmd, - 256, - "iptables -t mangle -A %s -d %u.%u.%u.%u -m mark --mark 0 -j GTPUAH --own-ip %u.%u.%u.%u --own-tun %u --peer-ip %u.%u.%u.%u --peer-tun %u --action add", - (spgw_config.sgw_config.local_to_eNB) ? "INPUT":"POSTROUTING", - eps_bearer_entry_p->paa.ipv4_address[0], - eps_bearer_entry_p->paa.ipv4_address[1], - eps_bearer_entry_p->paa.ipv4_address[2], - eps_bearer_entry_p->paa.ipv4_address[3], - sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x000000FF, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x0000FF00) >> 8, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0x00FF0000) >> 16, - (sgw_app.sgw_ip_address_for_S1u_S12_S4_up & 0xFF000000) >> 24, - eps_bearer_entry_p->s_gw_teid_for_S1u_S12_S4_up, - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[0], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[1], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[2], - eps_bearer_entry_p->enb_ip_address_for_S1u.address.ipv4_address[3], - eps_bearer_entry_p->enb_teid_for_S1u - ); - - if ((ret < 0) || (ret > 256)) { - SPGW_APP_ERROR("ERROR in preparing downlink tunnel, tune string length\n"); - exit (-1); - } - - //use API when prototype validated - ret = spgw_system(cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } if (iptable_uplink_remove_gtpu == FALSE) { ret = snprintf(cmd, diff --git a/openair-cn/SGW-LITE/spgw_config.c b/openair-cn/SGW-LITE/spgw_config.c index aba516e84cfdabfcd011ec84ed7e482b2287e1d5..66f5f2e560220888e53a7932fe399943bf789e52 100755 --- a/openair-cn/SGW-LITE/spgw_config.c +++ b/openair-cn/SGW-LITE/spgw_config.c @@ -262,17 +262,7 @@ int spgw_config_process(spgw_config_t* config_pP) ret = -1; } - if (config_pP->sgw_config.sgw_drop_uplink_traffic) { - if (snprintf(system_cmd, 256, - "iptables -t raw -I PREROUTING -i %s --protocol udp --destination-port 2152 -j DROP", - config_pP->sgw_config.ipv4.sgw_interface_name_for_S1u_S12_S4_up) > 0) { - SPGW_APP_INFO("Drop uplink traffic: %s\n",system_cmd); - ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Drop uplink traffic\n"); - ret = -1; - } - } + if (snprintf(system_cmd, 256, "ethtool -K %s tso off gso off gro off", @@ -285,56 +275,43 @@ int spgw_config_process(spgw_config_t* config_pP) } - // if (config_pP->pgw_config.pgw_masquerade_SGI) { - // inaddr.s_addr = config_pP->pgw_config.ipv4.pgw_ipv4_address_for_SGI; - // if (snprintf(system_cmd, 256, - // "iptables -t nat -I POSTROUTING -o %s ! --protocol sctp -j SNAT --to-source %s", - // config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI, - // inet_ntoa(inaddr)) > 0) { - // SPGW_APP_INFO("Masquerade SGI: %s\n",system_cmd); - // ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - // } else { - // SPGW_APP_ERROR("Masquerade SGI\n"); - // ret = -1; - // } - // } + #if defined (ENABLE_USE_GTPU_IN_KERNEL) if (config_pP->sgw_config.local_to_eNB) { if (snprintf(system_cmd, 256, - "iptables -I OUTPUT -t mangle -m mark ! --mark 0 ! --protocol sctp -j CONNMARK --save-mark") > 0) { + "iptables -I OUTPUT -t mangle -m mark ! --mark 0 -j CONNMARK --save-mark") > 0) { ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); } else { SPGW_APP_ERROR("Save mark\n"); ret = -1; } - if (snprintf(system_cmd, 256, - "iptables -I INPUT -t mangle -i %s ! --protocol sctp -j CONNMARK --restore-mark", - config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI) > 0) { - ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Restore mark\n"); - ret = -1; - } } else { if (snprintf(system_cmd, 256, - "iptables -I POSTROUTING -t mangle -o %s -m mark ! --mark 0 ! --protocol sctp -j CONNMARK --save-mark", + "iptables -I POSTROUTING -t mangle -o %s -m mark ! --mark 0 -j CONNMARK --save-mark", config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI) > 0) { ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); } else { SPGW_APP_ERROR("Save mark\n"); ret = -1; } - if (snprintf(system_cmd, 256, - "iptables -I PREROUTING -t mangle -i %s ! --protocol sctp -j CONNMARK --restore-mark", - config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI) > 0) { - ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Restore mark\n"); - ret = -1; - } } - + if (snprintf(system_cmd, 256, + "iptables -I INPUT -t mangle -i %s ! --protocol sctp -j CONNMARK --restore-mark", + config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI) > 0) { + ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); + } else { + SPGW_APP_ERROR("Restore mark\n"); + ret = -1; + } + if (snprintf(system_cmd, 256, + "iptables -I PREROUTING -t mangle -i %s ! --protocol sctp -j CONNMARK --restore-mark", + config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI) > 0) { + ret += spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); + } else { + SPGW_APP_ERROR("Restore mark\n"); + ret = -1; + } #endif return ret; @@ -617,25 +594,6 @@ int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP) SPGW_APP_ERROR("Add route: for %s\n", astring); } - - if (config_pP->sgw_config.sgw_drop_downlink_traffic) { - if (snprintf(system_cmd, 128, - "iptables -t filter -I FORWARD -d %s/%s -j DROP", - astring, atoken2) > 0) { - spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Drop downlink traffic\n"); - } - - if (snprintf(system_cmd, 128, - "iptables -t filter -I OUTPUT -d %s/%s -j DROP", - astring, atoken2) > 0) { - spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__); - } else { - SPGW_APP_ERROR("Drop downlink traffic\n"); - } - } - #endif prefix_mask = atoi(atoken2); @@ -667,10 +625,11 @@ int spgw_config_init(char* lib_config_file_name_pP, spgw_config_t* config_pP) in_addr_var.s_addr = config_pP->pgw_config.ipv4.pgw_ipv4_address_for_SGI; if (snprintf(system_cmd, 256, - "iptables -t nat -I POSTROUTING -s %s/%s -o %s ! --protocol sctp -j SNAT --to-source %s", + //"iptables -t nat -I POSTROUTING -s %s/%s -o %s ! --protocol sctp -j SNAT --to-source %s", + "iptables -t nat -I POSTROUTING -s %s/%s ! --protocol sctp -j SNAT --to-source %s", astring, atoken2, - config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI, + //config_pP->pgw_config.ipv4.pgw_interface_name_for_SGI, inet_ntoa(in_addr_var)) > 0) { SPGW_APP_INFO("Masquerade SGI: %s\n",system_cmd); spgw_system(system_cmd, SPGW_ABORT_ON_ERROR, __FILE__, __LINE__);