/* 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;
}