undefined4 mrt_activate_route(in_addr param_1,in_addr param_2,short param_3)

{
  ushort uVar1;
  undefined1 uVar2;
  char *pcVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  undefined4 **ppuVar6;
  undefined4 **ppuVar7;
  undefined4 *puVar8;
  char acStack_88 [32];
  char acStack_68 [32];
  undefined1 auStack_48 [36];
  
  pcVar3 = inet_ntoa(param_1);
  strcpy(acStack_88,pcVar3)   //possible issue identified - semgrep
  pcVar3 = inet_ntoa(param_2);
  strcpy(acStack_68,pcVar3)   //possible issue identified - semgrep
  ppuVar6 = (undefined4 **)0x0;
  do {
    ppuVar7 = (undefined4 **)DAT_0041b9c0;
    if (ppuVar6 != (undefined4 **)0x0) {
      ppuVar7 = (undefined4 **)*ppuVar6;
    }
    if (ppuVar7 == &DAT_0041b9c0) {
      return 0xffffffff;
    }
    if (ppuVar7 == (undefined4 **)0x0) {
      return 0xffffffff;
    }
    puVar8 = ppuVar7[2];
    ppuVar6 = ppuVar7;
  } while (puVar8 != (undefined4 *)param_2.s_addr);
  ppuVar6 = (undefined4 **)0x0;
  while( true ) {
    if (ppuVar6 == (undefined4 **)0x0) {
      ppuVar6 = (undefined4 **)ppuVar7[3];
    }
    else {
      ppuVar6 = (undefined4 **)*ppuVar6;
    }
    if ((ppuVar6 == ppuVar7 + 3) || (ppuVar6 == (undefined4 **)0x0)) break;
    if ((ppuVar6[2] == (undefined4 *)param_1.s_addr) && (*(short *)(ppuVar6 + 3) == param_3)) {
      return 0;
    }
  }
  puVar4 = (undefined4 *)malloc(0x10)   //possible issue identified - semgrep
  if (puVar4 != (undefined4 *)0x0) {
    puVar5 = ppuVar7[4];
    *puVar4 = ppuVar7 + 3;
    ppuVar7[4] = puVar4;
    *puVar5 = puVar4;
    puVar4[2] = param_1.s_addr;
    *(short *)(puVar4 + 3) = param_3;
    puVar4[1] = puVar5;
    memset(auStack_48,0,0x20)   //possible issue identified - semgrep
    ppuVar6 = (undefined4 **)0x0;
    while( true ) {
      if (ppuVar6 == (undefined4 **)0x0) {
        ppuVar6 = (undefined4 **)ppuVar7[5];
      }
      else {
        ppuVar6 = (undefined4 **)*ppuVar6;
      }
      if ((ppuVar6 == ppuVar7 + 5) || (ppuVar6 == (undefined4 **)0x0)) break;
      uVar1 = *(ushort *)(ppuVar6 + 5);
      uVar2 = vifs_get_threshold((uint)uVar1);
      auStack_48[uVar1] = uVar2;
    }
    mrtapi_add_mfc(param_1.s_addr,puVar8,param_3,auStack_48);
    return 0;
  }
  return 0;
}