diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.c b/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.c index 28b69ff561..77799661f8 100644 --- a/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.c +++ b/openair-cn/NAS/EURECOM-NAS/src/esm/esm_ebr_context.c @@ -232,88 +232,94 @@ int esm_ebr_context_create( #ifdef NAS_UE // LG ADD TEMP { - char *tmp = NULL; - char ipv4_addr[INET_ADDRSTRLEN]; - char ipv6_addr[INET6_ADDRSTRLEN]; - char *netmask = NULL; - char broadcast[INET_ADDRSTRLEN]; - struct in_addr in_addr; - char command_line[128]; - int res; + char *tmp = NULL; + char ipv4_addr[INET_ADDRSTRLEN]; + char ipv6_addr[INET6_ADDRSTRLEN]; + char *netmask = NULL; + char broadcast[INET_ADDRSTRLEN]; + struct in_addr in_addr; + char command_line[128]; + int res; - switch (pdn->type) { - case NET_PDN_TYPE_IPV4V6: - ipv6_addr[0] = pdn->ip_addr[4]; + switch (pdn->type) { + case NET_PDN_TYPE_IPV4V6: + ipv6_addr[0] = pdn->ip_addr[4]; - // etc - case NET_PDN_TYPE_IPV4: - in_addr.s_addr = pdn->ip_addr[0] << 24; - in_addr.s_addr |= pdn->ip_addr[1] << 16; - in_addr.s_addr |= pdn->ip_addr[2] << 8; - in_addr.s_addr |= pdn->ip_addr[3] ; + // etc + case NET_PDN_TYPE_IPV4: + // in_addr is in network byte order + in_addr.s_addr = pdn->ip_addr[0] << 24 | + ((pdn->ip_addr[1] << 16) & 0x00FF0000) | + ((pdn->ip_addr[2] << 8) & 0x0000FF00) | + ( pdn->ip_addr[3] & 0x000000FF); - tmp = inet_ntoa(in_addr); - // AssertFatal(tmp , - // "error in PDN IPv4 address %x", - // in_addr.s_addr); - strcpy(ipv4_addr, tmp); + in_addr.s_addr = htonl(in_addr.s_addr); - if (IN_CLASSA(in_addr.s_addr)) { - netmask = "255.0.0.0"; - in_addr.s_addr = pdn->ip_addr[0] << 24; - in_addr.s_addr |= 255 << 16; - in_addr.s_addr |= 255 << 8; - in_addr.s_addr |= 255 ; - tmp = inet_ntoa(in_addr); - // AssertFatal(tmp , - // "error in PDN IPv4 address %x", - // in_addr.s_addr); - strcpy(broadcast, tmp); - } else if (IN_CLASSB(in_addr.s_addr)) { - netmask = "255.255.0.0"; - in_addr.s_addr = pdn->ip_addr[0] << 24; - in_addr.s_addr |= pdn->ip_addr[1] << 16; - in_addr.s_addr |= 255 << 8; - in_addr.s_addr |= 255 ; - tmp = inet_ntoa(in_addr); - // AssertFatal(tmp , - // "error in PDN IPv4 address %x", - // in_addr.s_addr); - strcpy(broadcast, tmp); - } else if (IN_CLASSC(in_addr.s_addr)) { - netmask = "255.255.255.0"; - in_addr.s_addr = pdn->ip_addr[0] << 24; - in_addr.s_addr |= pdn->ip_addr[1] << 16; - in_addr.s_addr |= pdn->ip_addr[2] << 8; - in_addr.s_addr |= 255 ; - tmp = inet_ntoa(in_addr); - // AssertFatal(tmp , - // "error in PDN IPv4 address %x", - // in_addr.s_addr); - strcpy(broadcast, tmp); - } else { - netmask = "255.255.255.255"; - strcpy(broadcast, ipv4_addr); - } + tmp = inet_ntoa(in_addr); + //AssertFatal(tmp , + // "error in PDN IPv4 address %x", + // in_addr.s_addr); + strcpy(ipv4_addr, tmp); - res = sprintf(command_line, - "ifconfig oip1 %s netmask %s broadcast %s up", - ipv4_addr, netmask, broadcast); - // AssertFatal((res > 0) && (res < 128), - // "error in system command line"); - LOG_TRACE(INFO, "ESM-PROC - executing %s ", - command_line); - system(command_line); - break; + if (IN_CLASSA(in_addr.s_addr)) { + netmask = "255.0.0.0"; + in_addr.s_addr = pdn->ip_addr[0] << 24 | + ((255 << 16) & 0x00FF0000) | + ((255 << 8) & 0x0000FF00) | + ( 255 & 0x000000FF); + in_addr.s_addr = htonl(in_addr.s_addr); + tmp = inet_ntoa(in_addr); + // AssertFatal(tmp , + // "error in PDN IPv4 address %x", + // in_addr.s_addr); + strcpy(broadcast, tmp); + } else if (IN_CLASSB(in_addr.s_addr)) { + netmask = "255.255.0.0"; + in_addr.s_addr = pdn->ip_addr[0] << 24 | + ((pdn->ip_addr[1] << 16) & 0x00FF0000) | + ((255 << 8) & 0x0000FF00) | + ( 255 & 0x000000FF); + in_addr.s_addr = htonl(in_addr.s_addr); + tmp = inet_ntoa(in_addr); + // AssertFatal(tmp , + // "error in PDN IPv4 address %x", + // in_addr.s_addr); + strcpy(broadcast, tmp); + } else if (IN_CLASSC(in_addr.s_addr)) { + netmask = "255.255.255.0"; + in_addr.s_addr = pdn->ip_addr[0] << 24 | + ((pdn->ip_addr[1] << 16) & 0x00FF0000) | + ((pdn->ip_addr[2] << 8) & 0x0000FF00) | + ( 255 & 0x000000FF); + in_addr.s_addr = htonl(in_addr.s_addr); + tmp = inet_ntoa(in_addr); + // AssertFatal(tmp , + // "error in PDN IPv4 address %x", + // in_addr.s_addr); + strcpy(broadcast, tmp); + } else { + netmask = "255.255.255.255"; + strcpy(broadcast, ipv4_addr); + } - case NET_PDN_TYPE_IPV6: - break; + res = sprintf(command_line, + "ifconfig oip1 %s netmask %s broadcast %s up", + ipv4_addr, netmask, broadcast); + // AssertFatal((res > 0) && (res < 128), + // "error in system command line"); + LOG_TRACE(INFO, "ESM-PROC - executing %s ", + command_line); + system(command_line); + break; - default: - break; - } - } - // AssertFatal(0, "Forced stop in NAS UE"); + case NET_PDN_TYPE_IPV6: + break; + + default: + break; + } + } + // AssertFatal(0, "Forced stop in NAS UE"); #endif }