undefined4
FUN_0040621c(undefined4 param_1,undefined4 param_2,undefined4 *param_3,undefined4 param_4,
            int param_5,undefined4 param_6,int param_7,int *param_8,int param_9)

{
  undefined4 uVar1;
  int iVar2;
  undefined4 *puVar3;
  undefined4 uVar4;
  int iVar5;
  int local_1150;
  undefined1 *local_114c;
  undefined4 local_1148;
  undefined4 local_1144;
  undefined4 local_1140;
  undefined4 local_113c;
  undefined4 local_1138;
  undefined4 local_1134;
  undefined4 local_1130;
  undefined1 auStack_1128 [184];
  undefined1 auStack_1070 [8];
  undefined1 auStack_1068 [56];
  undefined1 local_1030;
  undefined1 uStack_102f;
  undefined1 uStack_102e;
  undefined1 uStack_102d;
  undefined2 uStack_102c;
  int local_102a;
  int local_1026;
  int local_1022;
  int local_101e;
  int local_101a;
  int local_1016;
  int local_1012;
  undefined1 auStack_100e [4062];
  undefined4 *****local_30;
  undefined1 *local_2c;
  
  uVar1 = *param_3;
  local_30 = &local_30;
  uStack_102f = (undefined1)((uint)uVar1 >> 8);
  uStack_102e = (undefined1)((uint)uVar1 >> 0x10);
  uStack_102d = (undefined1)((uint)uVar1 >> 0x18);
  local_1030 = (undefined1)param_1;
  iVar2 = dhcp6_set_options(param_1,&uStack_102c,local_30,param_7);
  iVar5 = iVar2 + 4;
  if (iVar2 < 0) {
    dprintf(6,"server6_send","failed to construct reply options");
    uVar1 = 0xffffffff;
  }
  else {
    if (*(int *)(param_7 + 0xcc) == 2) {
      if ((param_9 == 0) || (*(int *)(param_9 + 0x30) == 0)) {
        dprintf(3,"server6_send","authentication required but not key provided");
      }
      else {
        iVar2 = dhcp6_calc_mac(&local_1030,iVar5,2,*(undefined4 *)(param_7 + 0xd0),
                               *(int *)(param_7 + 0xec) + 4,*(int *)(param_9 + 0x30));
        if (iVar2 != 0) {
          dprintf(4,"server6_send","failed to calculate MAC");
          return 0xffffffff;
        }
      }
    }
    param_8 = (int *)*param_8;
    puVar3 = DAT_00439608;
    if (param_8 != (int *)0x0) {
      local_2c = auStack_1070;
      do {
        dhcp6_init_options(auStack_1128);
        local_1150 = iVar5;
        local_114c = &local_1030;
        iVar2 = dhcp6_vbuf_copy(local_2c,&local_1150);
        if (iVar2 != 0) {
          return 0xffffffff;
        }
        if ((param_8[0xc] != 0) && (iVar2 = dhcp6_vbuf_copy(auStack_1068,param_8 + 0xb), iVar2 != 0)
           ) {
          dhcp6_vbuf_free(local_2c);
          return 0xffffffff;
        }
        memset(&local_1030,0,0x22)   //possible issue identified - semgrep
        local_1030 = 0xd;
        uStack_102f = (undefined1)param_8[2];
        local_1022 = param_8[6];
        local_102a = param_8[4];
        local_1026 = param_8[5];
        iVar2 = param_8[3];
        uStack_102e = (undefined1)iVar2;
        uStack_102d = (undefined1)((uint)iVar2 >> 8);
        uStack_102c = (undefined2)((uint)iVar2 >> 0x10);
        local_1012 = param_8[10];
        local_101a = param_8[8];
        local_1016 = param_8[9];
        local_101e = param_8[7];
        iVar2 = dhcp6_set_options(0xd,auStack_100e,local_30,auStack_1128);
        iVar5 = iVar2 + 0x22;
        if (iVar2 < 0) {
          dprintf(6,"server6_send","failed to construct relay message");
          dhcp6_clear_options(auStack_1128);
          return 0xffffffff;
        }
        dhcp6_clear_options(auStack_1128);
        param_8 = (int *)*param_8;
        puVar3 = DAT_0043960c;
      } while (param_8 != (int *)0x0);
    }
    local_1148 = *puVar3;
    local_1144 = puVar3[1];
    local_113c = *(undefined4 *)(param_5 + 0xc);
    local_1138 = *(undefined4 *)(param_5 + 0x10);
    local_1134 = *(undefined4 *)(param_5 + 0x14);
    local_1130 = *(undefined4 *)(param_5 + 0x18);
    local_1140 = *(undefined4 *)(param_5 + 8);
    iVar2 = transmit_sa(outsock,&local_1148,&local_1030,iVar5);
    if (iVar2 == 0) {
      uVar1 = dhcp6msgstr(param_1);
      uVar4 = addr2str(&local_1148);
      dprintf(7,"server6_send","transmit %s to %s",uVar1,uVar4);
      uVar1 = 0;
    }
    else {
      uVar1 = dhcp6msgstr(param_1);
      uVar4 = addr2str(&local_1148);
      dprintf(3,"server6_send","transmit %s to %s failed",uVar1,uVar4);
      uVar1 = 0xffffffff;
    }
  }
  return uVar1;
}