/* WARNING: Heritage AFTER dead removal. Example location: r0x00438d24 : 0x00415b10 */
/* WARNING: Restarted to delay deadcode elimination for space: ram */
undefined4 configure_ia(int *param_1,int param_2)
{
short sVar1;
undefined4 uVar2;
undefined4 *__s;
ulong uVar3;
int iVar4;
undefined4 *puVar5;
uint uVar6;
undefined4 *puVar7;
char *pcVar8;
short *psVar9;
int *piVar10;
int iVar11;
int *piVar12;
size_t __size;
int *local_38 [2];
int *local_30;
int **local_2c;
if (DAT_004388d0 != 0) {
DAT_004388d0 = 0;
DAT_00438d24 = &ia_conflist0;
ia_conflist0 = 0;
}
if (param_2 == 0) {
__size = 0x28 //possible issue identified - semgrep
}
else {
if (param_2 != 1) {
dprintf(3,"configure_ia","internal error");
return 0xffffffff;
}
__size = 0x20 //possible issue identified - semgrep
}
if (param_1 != (int *)0x0) {
local_2c = local_38;
do {
__s = (undefined4 *)malloc(__size) //possible issue identified - semgrep
if (__s == (undefined4 *)0x0) {
dprintf(3,"configure_ia","memory allocation for IA %s failed",param_1[1]);
return 0xffffffff;
}
memset(__s,0,__size) //possible issue identified - semgrep
pcVar8 = (char *)param_1[1];
__s[2] = param_2;
uVar3 = strtoul(pcVar8,(char **)0x0,10);
*__s = 0;
puVar5 = DAT_00438d24;
__s[3] = uVar3;
DAT_00438d24 = __s;
__s[5] = __s + 4;
*puVar5 = __s;
__s[4] = 0;
__s[1] = puVar5;
if (param_2 == 0) {
__s[7] = __s + 6;
__s[9] = __s + 8;
__s[6] = 0;
__s[8] = 0;
}
else if (param_2 == 1) {
__s[7] = __s + 6;
__s[6] = 0;
}
piVar12 = (int *)param_1[3];
if (piVar12 != (int *)0x0) {
do {
if (param_2 == 0) {
if (piVar12[2] == 0x1f) {
piVar10 = (int *)__s[8];
if (piVar10 != (int *)0x0) {
pcVar8 = (char *)piVar12[7];
do {
iVar4 = strcmp((char *)piVar10[2],pcVar8);
if (iVar4 == 0) {
dprintf(5,"add_pd_pif","%s:%d duplicated prefix interface: %s",configfilename,
piVar12[3],pcVar8);
goto LAB_00415c9c;
}
piVar10 = (int *)*piVar10;
} while (piVar10 != (int *)0x0);
}
puVar5 = (undefined4 *)malloc(0x2c) //possible issue identified - semgrep
if (puVar5 == (undefined4 *)0x0) {
dprintf(3,"add_pd_pif","memory allocation for %s failed",piVar12[7]);
goto LAB_00415f64;
}
*puVar5 = 0;
puVar5[1] = 0;
puVar5[2] = 0;
puVar5[3] = 0;
puVar5[4] = 0;
puVar5[5] = 0;
puVar5[6] = 0;
puVar5[7] = 0;
puVar5[8] = 0;
puVar5[9] = 0;
puVar5[10] = 0;
uVar6 = if_nametoindex((char *)piVar12[7]);
uVar2 = configfilename;
if (uVar6 == 0) {
iVar11 = piVar12[7];
piVar10 = __errno_location();
iVar4 = piVar12[3];
pcVar8 = strerror(*piVar10);
dprintf(3,"add_pd_pif","%s:%d invalid interface (%s): %s",uVar2,iVar4,iVar11,pcVar8)
;
goto LAB_00415f64;
}
pcVar8 = strdup((char *)piVar12[7]);
puVar5[2] = pcVar8;
if (pcVar8 == (char *)0x0) {
dprintf(3,"add_pd_pif","failed to copy ifname");
goto LAB_00415f64;
}
puVar5[5] = 0x40;
puVar5[3] = 0x10;
iVar4 = getifaddrs(local_2c);
if (iVar4 < 0) {
piVar12 = __errno_location();
pcVar8 = strerror(*piVar12);
dprintf(3,"get_default_ifid","getifaddrs failed: %s",pcVar8);
}
else {
local_30 = local_38[0];
if (local_38[0] == (int *)0x0) {
pcVar8 = (char *)puVar5[2];
LAB_00415e94:
dprintf(6,"get_default_ifid","cannot find interface information for %s",pcVar8);
}
else {
pcVar8 = (char *)puVar5[2];
piVar10 = local_38[0];
while (((iVar4 = strcmp((char *)piVar10[1],pcVar8), iVar4 != 0 ||
(psVar9 = (short *)piVar10[3], psVar9 == (short *)0x0)) ||
(*psVar9 != 0x11))) {
piVar10 = (int *)*piVar10;
if (piVar10 == (int *)0x0) goto LAB_00415e94;
}
if (5 < *(byte *)((int)psVar9 + 0xb)) {
puVar5[7] = 0;
puVar5[10] = 0;
puVar5[8] = 0;
puVar5[9] = 0;
*(byte *)(puVar5 + 9) = *(byte *)(psVar9 + 6) ^ 2;
*(undefined1 *)((int)puVar5 + 0x25) = *(undefined1 *)((int)psVar9 + 0xd);
sVar1 = psVar9[7] //possible issue identified - semgrep
*(undefined1 *)(puVar5 + 10) = 0xfe;
*(undefined1 *)((int)puVar5 + 0x27) = 0xff;
*(char *)((int)puVar5 + 0x26) = (char)sVar1;
*(undefined1 *)((int)puVar5 + 0x29) = *(undefined1 *)((int)psVar9 + 0xf);
*(char *)((int)puVar5 + 0x2a) = (char)psVar9[8];
*(undefined1 *)((int)puVar5 + 0x2b) = *(undefined1 *)((int)psVar9 + 0x11);
freeifaddrs(local_30);
for (piVar10 = (int *)piVar12[6]; piVar10 != (int *)0x0;
piVar10 = (int *)*piVar10) {
if (piVar10[2] == 0xe) {
puVar5[4] = piVar10[4];
}
else {
if (piVar10[2] != 0xf) {
dprintf(3,"add_pd_pif","%s:%d internal error: invalid configuration",
configfilename,piVar10[3]);
goto LAB_00415f64;
}
uVar6 = piVar10[4];
puVar5[3] = uVar6;
if (0x80 < uVar6) {
dprintf(3,"add_pd_pif","%s:%d invalid SLA length: %d",configfilename,
piVar10[3],uVar6);
goto LAB_00415f64;
}
}
}
puVar7 = (undefined4 *)__s[9];
*puVar5 = 0;
__s[9] = puVar5;
*puVar7 = puVar5;
puVar5[1] = puVar7;
goto LAB_00415c9c;
}
dprintf(5,"get_default_ifid","link layer address is too short (%s)",pcVar8);
}
freeifaddrs(local_38[0]);
}
dprintf(5,"add_pd_pif","failed to get default IF ID for %s",puVar5[2]);
LAB_00415f64:
if ((void *)puVar5[2] != (void *)0x0) {
free((void *)puVar5[2]);
}
free(puVar5);
return 0xffffffff;
}
if (piVar12[2] != 0x20) goto LAB_00415b78;
iVar4 = add_prefix(__s + 6,&DAT_0042455c,5,piVar12[7]);
if (iVar4 != 0) {
pcVar8 = "failed to configure prefix";
goto LAB_00415cf4;
}
}
else {
if (param_2 != 1) {
dprintf(3,"configure_ia","%s:%d invalid iatype %d",configfilename,piVar12[3],param_2);
return 0xffffffff;
}
if (piVar12[2] != 0x21) {
LAB_00415b78:
dprintf(3,"configure_ia","%s:%d invalid configuration",configfilename,piVar12[3]);
return 0xffffffff;
}
iVar4 = add_prefix(__s + 6,&DAT_00424d58,7,piVar12[7]);
if (iVar4 != 0) {
pcVar8 = "failed to configure address";
LAB_00415cf4:
dprintf(5,"configure_ia",pcVar8);
return 0xffffffff;
}
}
LAB_00415c9c:
piVar12 = (int *)*piVar12;
} while (piVar12 != (int *)0x0);
}
param_1 = (int *)*param_1;
} while (param_1 != (int *)0x0);
}
return 0;
}