uint vifs_add_if(int param_1,char *param_2,undefined1 param_3,undefined4 param_4)
{
bool bVar1;
uint uVar2;
int iVar3;
undefined4 uVar4;
char *pcVar5;
uint uVar6;
undefined4 uVar7;
int iVar8;
char acStack_60 [32];
char acStack_40 [36];
uVar2 = DAT_0041b990;
iVar8 = DAT_0041b990 * 0x2c;
memset(&DAT_0041b830 + iVar8,0,0x2c) //possible issue identified - semgrep
iVar3 = FUN_00403784(param_2);
if (iVar3 < 0) {
strncpy(&DAT_0041b830 + iVar8,param_2,0x10) //possible issue identified - semgrep
uVar4 = sioc_getifaddr(param_2);
(&DAT_0041b840)[uVar2 * 0xb] = uVar4;
uVar4 = sioc_getifnetmask(param_2);
(&DAT_0041b844)[uVar2 * 0xb] = uVar4;
(&DAT_0041b858)[uVar2 * 0xb] = 0x22;
(&DAT_0041b848)[iVar8] = param_3;
(&DAT_0041b84c)[uVar2 * 0xb] = param_4;
uVar4 = sloop_register_timeout(0,0,FUN_0040364c,uVar2);
(&DAT_0041b850)[uVar2 * 0xb] = uVar4;
(&DAT_0041b854)[uVar2 * 0xb] = param_1;
if (((&DAT_0041b840)[uVar2 * 0xb] != 0) && ((&DAT_0041b844)[uVar2 * 0xb] != 0)) {
pcVar5 = inet_ntoa((in_addr)(&DAT_0041b840)[uVar2 * 0xb]);
strcpy(acStack_60,pcVar5) //possible issue identified - semgrep
pcVar5 = inet_ntoa((in_addr)(&DAT_0041b844)[uVar2 * 0xb]);
strcpy(acStack_40,pcVar5) //possible issue identified - semgrep
if ((&DAT_0041b850)[uVar2 * 0xb] != 0) {
iVar3 = mrtapi_add_vif(uVar2 & 0xffff,param_3,param_4,(&DAT_0041b840)[uVar2 * 0xb]);
if (iVar3 != 0) {
sloop_cancel_timeout((&DAT_0041b850)[uVar2 * 0xb]);
return 0xffffffff;
}
if (param_1 == 0) {
uVar4 = mrtapi_sock();
iVar3 = sopt_set_membership(uVar4,0x20000e0,(&DAT_0041b840)[uVar2 * 0xb],1);
if (iVar3 != 0) {
bVar1 = true;
goto LAB_00403b58;
}
uVar4 = mrtapi_sock();
uVar7 = (&DAT_0041b840)[uVar2 * 0xb];
uVar6 = 0x16000000;
}
else {
uVar4 = mrtapi_sock();
uVar7 = (&DAT_0041b840)[uVar2 * 0xb];
uVar6 = 0x1000000;
}
iVar3 = sopt_set_membership(uVar4,uVar6 | 0xe0,uVar7,1);
bVar1 = true;
if (iVar3 == 0) {
DAT_0041b990 = DAT_0041b990 + 1;
if (-1 < (int)uVar2) {
return uVar2;
}
bVar1 = true;
uVar6 = uVar2;
goto LAB_00403acc;
}
goto LAB_00403b58;
}
}
bVar1 = false;
}
else {
verbose("%s: %s is already in the list!\n","vifs_add_if",param_2);
bVar1 = false;
}
LAB_00403b58:
uVar6 = 0xffffffff;
LAB_00403acc:
if ((&DAT_0041b850)[uVar2 * 0xb] != 0) {
sloop_cancel_timeout();
}
if (bVar1) {
mrtapi_del_vif(uVar2 & 0xffff);
}
return uVar6;
}