void client6_send(int param_1)

{
  int iVar1;
  uint uVar2;
  socklen_t __addr_len;
  ssize_t sVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  int iVar6;
  char *pcVar7;
  int *piVar8;
  int iVar9;
  timeval local_1148;
  sockaddr local_1140;
  undefined4 local_1130;
  undefined4 local_112c;
  undefined4 local_1128;
  undefined1 auStack_1120 [8];
  undefined1 auStack_1118 [8];
  undefined4 local_1110;
  int local_1104;
  undefined1 auStack_10f8 [8];
  undefined1 auStack_10f0 [8];
  undefined1 auStack_10e8 [144];
  uint local_1058;
  int local_1054;
  int local_1050;
  int local_104c;
  undefined1 auStack_1048 [8];
  undefined4 local_1040;
  size_t local_103c;
  void *local_1038;
  int local_1034;
  uint local_1028;
  undefined1 auStack_1024 [4092];
  
  local_1028 = 0;
  iVar9 = *(int *)(param_1 + 8);
  switch(*(undefined4 *)(param_1 + 0x3c)) {
  default:
    dprintf(3,"client6_send","unexpected state");
LAB_00402b98:
                    /* WARNING: Subroutine does not return */
    exit(1);
  case 1:
    local_1028 = 1;
    break;
  case 2:
    local_1028 = 0xb;
    break;
  case 3:
    local_1028 = 3;
    break;
  case 4:
    local_1028 = 5;
    iVar1 = *(int *)(param_1 + 0x34);
    goto joined_r0x00402e04;
  case 5:
    local_1028 = 6;
    break;
  case 6:
    local_1028 = 8;
    break;
  case 8:
    local_1028 = 4;
    break;
  case 9:
    local_1028 = 9;
  }
  iVar1 = *(int *)(param_1 + 0x34);
joined_r0x00402e04:
  if (iVar1 == 0) {
    uVar2 = arc4random();
    *(uint *)(param_1 + 0x38) = uVar2 & 0xffffff;
    dprintf(7,"client6_send","a new XID (%x) is generated",uVar2 & 0xffffff);
  }
  uVar2 = *(uint *)(param_1 + 0x38);
  local_1028 = uVar2 >> 0x18 | local_1028 & 0xff | uVar2 << 0x18 | uVar2 >> 8 & 0xff00 |
               (uVar2 & 0xff00) << 8;
  dhcp6_init_options(auStack_1120);
  if (((*(uint *)(param_1 + 0x3c) < 10) && ((1 << (*(uint *)(param_1 + 0x3c) & 0x1f) & 600U) != 0))
     && (iVar1 = duidcpy(auStack_1118,param_1 + 0x10), iVar1 != 0)) {
    dprintf(3,"client6_send","failed to copy server ID");
    goto LAB_00402f94;
  }
  iVar1 = duidcpy(auStack_1120,&DAT_0043e9f4);
  if (iVar1 != 0) {
    dprintf(3,"client6_send","failed to copy client ID");
    goto LAB_00402f94;
  }
  if ((*(int *)(param_1 + 0x3c) == 1) && ((*(uint *)(iVar9 + 0x2c) & 2) != 0)) {
    local_1110 = 1;
  }
  if (*(int *)(param_1 + 0x34) == 0) {
    gettimeofday((timeval *)(param_1 + 0x18),(__timezone_ptr_t)0x0);
    local_1104 = 0;
  }
  else {
    gettimeofday(&local_1148,(__timezone_ptr_t)0x0);
    iVar1 = *(int *)(param_1 + 0x18);
    if (local_1148.tv_sec < iVar1) {
LAB_00402ff4:
      local_1104 = 0;
    }
    else {
      if (local_1148.tv_sec == iVar1) {
        iVar6 = *(int *)(param_1 + 0x1c);
        iVar1 = 0;
        if (local_1148.tv_usec < iVar6) goto LAB_00402ff4;
LAB_00403058:
        iVar6 = local_1148.tv_usec - iVar6;
      }
      else {
        iVar6 = *(int *)(param_1 + 0x1c);
        iVar1 = local_1148.tv_sec - iVar1;
        if (iVar6 <= local_1148.tv_usec) goto LAB_00403058;
        iVar6 = (local_1148.tv_usec + 1000000) - iVar6;
        iVar1 = iVar1 + -1;
      }
      local_1104 = 0xffff;
      if ((iVar1 < 0x290) && (local_1104 = iVar6 / 10000 + iVar1 * 100, 0xfffe < local_1104)) {
        local_1104 = 0xffff;
      }
    }
  }
  if ((*(int *)(param_1 + 0x3c) != 6) &&
     (iVar1 = dhcp6_copy_list(auStack_10e8,iVar9 + 0x48), iVar1 != 0)) {
    dprintf(3,"client6_send","failed to copy requested options");
    goto LAB_00402f94;
  }
  piVar8 = *(int **)(param_1 + 0x4c);
  if (piVar8 != (int *)0x0) {
    do {
      if (piVar8[3] == 0) {
        iVar1 = dhcp6_copy_list(auStack_10f8,piVar8[4]);
      }
      else {
        if (piVar8[3] != 1) {
          dprintf(3,"client6_send","unexpected event data (%d)");
          goto LAB_00402b98;
        }
        iVar1 = dhcp6_copy_list(auStack_10f0,piVar8[4]);
      }
      if (iVar1 != 0) {
        dprintf(5,"client6_send","failed to add an IAPD");
        goto LAB_00402f94;
      }
      piVar8 = (int *)*piVar8;
    } while (piVar8 != (int *)0x0);
  }
  piVar8 = *(int **)(param_1 + 0x48);
  if (piVar8 != (int *)0x0) {
    local_1054 = *piVar8;
    local_1050 = piVar8[1];
    local_104c = piVar8[2];
    if (*piVar8 != -1) {
      if (*piVar8 == 2) {
        if (*(int *)(param_1 + 0x3c) == 2) {
          dprintf(4,"set_auth","delayed authentication cannot be used for Information-request yet");
        }
        else {
          if (*(int *)(param_1 + 0x3c) == 1) {
            local_1058 = local_1058 | 1;
            goto LAB_00403118;
          }
          if (piVar8[3] == 0) {
            uVar4 = dhcp6_event_statestr(param_1);
            dprintf(6,"set_auth","no authentication key for %s",uVar4);
          }
          else {
            iVar1 = dhcp6_validate_key();
            if (iVar1 == 0) {
              iVar1 = get_rdvalue(local_104c,auStack_1048,8);
              if (iVar1 == 0) {
                local_1040 = *(undefined4 *)(piVar8[3] + 0x10);
                local_103c = *(size_t *)(piVar8[3] + 0xc)   //possible issue identified - semgrep
                local_1038 = malloc(local_103c)   //possible issue identified - semgrep
                if (local_1038 != (void *)0x0) {
                  memcpy(local_1038,*(void **)(piVar8[3] + 8),local_103c)   //possible issue identified - semgrep
                  goto LAB_00403118;
                }
                dprintf(3,"set_auth","failed to allocate memory for authentication realm");
              }
              else {
                dprintf(3,"set_auth","failed to get a replay detection value");
              }
            }
            else {
              dprintf(6,"set_auth","key %s is invalid",*(undefined4 *)(piVar8[3] + 4));
            }
          }
        }
      }
      else {
        dprintf(3,"set_auth","unsupported authentication protocol %d");
      }
      dprintf(6,"client6_send","failed to set authentication option");
      goto LAB_00402f94;
    }
  }
LAB_00403118:
  iVar1 = dhcp6_set_options(local_1028 & 0xff,auStack_1024,&stack0xffffffd8,auStack_1120);
  if (iVar1 < 0) {
    dprintf(6,"client6_send","failed to construct options");
  }
  else {
    piVar8 = *(int **)(param_1 + 0x48);
    if ((((piVar8 == (int *)0x0) || (*piVar8 != 2)) || (piVar8[3] == 0)) ||
       (iVar6 = dhcp6_calc_mac(&local_1028,iVar1 + 4U,local_1054,local_1050,local_1034 + 4,piVar8[3]
                              ), iVar6 == 0)) {
      local_1140._0_4_ = *DAT_0043e9f0;
      local_1140.sa_data._2_4_ = DAT_0043e9f0[1];
      local_1140.sa_data._6_4_ = DAT_0043e9f0[2];
      local_1140.sa_data._10_4_ = DAT_0043e9f0[3];
      local_1130 = DAT_0043e9f0[4];
      local_112c = DAT_0043e9f0[5];
      local_1128 = *(undefined4 *)(iVar9 + 0x18);
      if (local_1140.sa_family == 10) {
        __addr_len = 0x1c;
      }
      else {
        __addr_len = 0x10;
      }
      sVar3 = sendto(sock,&local_1028,iVar1 + 4U,0,&local_1140,__addr_len);
      if (sVar3 == -1) {
        piVar8 = __errno_location();
        pcVar7 = strerror(*piVar8);
        dprintf(3,"client6_send","transmit failed: %s",pcVar7);
        uVar4 = dhcp6msgstr(local_1028 & 0xff);
        uVar5 = addr2str(&local_1140);
        pcVar7 = "send %s to %s error";
      }
      else {
        uVar4 = dhcp6msgstr(local_1028 & 0xff);
        uVar5 = addr2str(&local_1140);
        pcVar7 = "send %s to %s";
      }
      dprintf(7,"client6_send",pcVar7,uVar4,uVar5);
    }
    else {
      dprintf(4,"client6_send","failed to calculate MAC");
    }
  }
LAB_00402f94:
  dhcp6_clear_options(auStack_1120);
  return;
}