/* WARNING: Type propagation algorithm not settling */
undefined4 FUN_00412b04(int param_1,int param_2,int *param_3)
{
undefined4 uVar1;
int *piVar2;
int iVar3;
undefined4 *puVar4;
int *piVar5;
char *pcVar6;
undefined4 local_38 [2];
undefined4 *local_30;
if (param_3 != (int *)0x0) {
local_30 = local_38;
do {
iVar3 = param_3[2];
piVar5 = ia_conflist0;
switch(iVar3) {
case 0x10:
if (param_1 == 0) {
*(uint *)(param_2 + 8) = *(uint *)(param_2 + 8) | 2;
}
else {
iVar3 = 0x10;
if (param_1 != 2) goto LAB_00412db8;
*(uint *)(param_2 + 0xc) = *(uint *)(param_2 + 0xc) | 2;
}
break;
case 0x11:
if (param_1 != 0) {
iVar3 = 0x11;
LAB_00412db8:
pcVar6 = "invalid operation (%d) for option type (%d)";
LAB_00412bb8:
dprintf(3,"add_options",pcVar6,param_1,iVar3);
return 0xffffffff;
}
iVar3 = FUN_0040e668(DAT_00441060,param_3[7]);
if (iVar3 == 0) {
iVar3 = param_3[3];
pcVar6 = "%s:%d auth info (%s) is not defined";
param_1 = configfilename;
goto LAB_00412bb8;
}
if (*(int *)(param_2 + 0x28) != 0) {
iVar3 = param_3[3];
pcVar6 = "%s:%d authinfo is doubly specified on %s";
param_1 = configfilename;
goto LAB_00412bb8;
}
*(int *)(param_2 + 0x28) = iVar3;
break;
case 0x12:
case 0x13:
case 0x16:
case 0x17:
case 0x18:
case 0x19:
case 0x1a:
case 0x1b:
case 0x1c:
case 0x1d:
case 0x22:
case 0x23:
case 0x24:
case 0x25:
switch(iVar3) {
case 0x12:
local_38[0] = 0x17;
break;
case 0x13:
local_38[0] = 0x18;
break;
default:
break;
case 0x16:
local_38[0] = 0x1f;
break;
case 0x17:
local_38[0] = 0x20;
break;
case 0x18:
local_38[0] = 0x1b;
break;
case 0x19:
local_38[0] = 0x1d;
break;
case 0x1a:
local_38[0] = 0x1c;
break;
case 0x1b:
local_38[0] = 0x1e;
break;
case 0x1c:
local_38[0] = 0x22;
break;
case 0x1d:
local_38[0] = 0x21;
break;
case 0x22:
local_38[0] = 0x16;
break;
case 0x23:
local_38[0] = 0x15;
break;
case 0x24:
local_38[0] = 0x62;
break;
case 0x25:
local_38[0] = 0x40;
}
if (param_1 != 1) goto LAB_00412d34;
iVar3 = dhcp6_find_listval(param_2 + 0x18,1,local_30,0);
if (iVar3 == 0) {
iVar3 = dhcp6_add_listval(param_2 + 0x18,1,local_30,0);
if (iVar3 == 0) {
dprintf(3,"add_options","failed to configure an option");
return 0xffffffff;
}
}
else {
uVar1 = dhcp6optstr(local_38[0]);
dprintf(6,"add_options","duplicated requested option: %s",uVar1);
}
break;
case 0x14:
if (param_1 != 0) {
iVar3 = 0x14;
goto LAB_00412d34;
}
while( true ) {
if (piVar5 == (int *)0x0) {
iVar3 = param_3[3];
pcVar6 = "%s:%d IA_PD (%lu) is not defined";
param_1 = configfilename;
goto LAB_00412bb8;
}
if ((piVar5[2] == 0) && (param_3[4] == piVar5[3])) break;
piVar5 = (int *)*piVar5;
}
LAB_00412c60:
iVar3 = *piVar5;
if (iVar3 == 0) {
DAT_0043e934 = piVar5[1];
}
else {
*(int *)(iVar3 + 4) = piVar5[1];
}
piVar2 = (int *)piVar5[1];
piVar5[1] = *(int *)(param_2 + 0x24);
puVar4 = *(undefined4 **)(param_2 + 0x24);
*piVar2 = iVar3;
*(int **)(param_2 + 0x24) = piVar5;
*piVar5 = 0;
*puVar4 = piVar5;
break;
case 0x15:
if (param_1 == 0) {
while( true ) {
if (piVar5 == (int *)0x0) {
iVar3 = param_3[3];
pcVar6 = "%s:%d IA_NA (%lu) is not defined";
param_1 = configfilename;
goto LAB_00412bb8;
}
if ((piVar5[2] == 1) && (param_3[4] == piVar5[3])) break;
piVar5 = (int *)*piVar5;
}
goto LAB_00412c60;
}
iVar3 = 0x15;
LAB_00412d34:
dprintf(3,"add_options","invalid operation (%d) for option type (%d)",param_1,iVar3);
break;
default:
iVar3 = param_3[3];
pcVar6 = "%s:%d unsupported option type: %d";
param_1 = configfilename;
goto LAB_00412bb8;
}
param_3 = (int *)*param_3;
} while (param_3 != (int *)0x0);
}
return 0;
}