void send_igmp_v3(in_addr param_1,in_addr param_2,int param_3,undefined1 param_4,in_addr param_5,
                 uint param_6,undefined1 param_7)

{
  bool bVar1;
  ushort uVar2;
  char *pcVar3;
  int iVar4;
  undefined4 uVar5;
  ssize_t sVar6;
  int *piVar7;
  uint uVar8;
  ushort *puVar9;
  size_t __n;
  undefined4 *local_308;
  undefined4 local_304;
  sockaddr local_300;
  char acStack_2f0 [32];
  char acStack_2d0 [32];
  char acStack_2b0 [32];
  char acStack_290 [32];
  char acStack_270 [32];
  char acStack_250 [32];
  undefined4 local_230;
  undefined1 local_228;
  undefined1 local_227;
  in_addr_t local_224;
  in_addr_t local_220;
  undefined2 uStack_21c;
  ushort uStack_21a;
  undefined4 local_218;
  undefined4 local_214;
  in_addr_t local_210;
  ushort local_20c [244];
  
  pcVar3 = inet_ntoa(param_1);
  strcpy(acStack_2f0,pcVar3)   //possible issue identified - semgrep
  pcVar3 = inet_ntoa(param_2);
  strcpy(acStack_2d0,pcVar3)   //possible issue identified - semgrep
  pcVar3 = inet_ntoa(param_5);
  strcpy(acStack_2b0,pcVar3)   //possible issue identified - semgrep
  memset(&local_230,0,0x204)   //possible issue identified - semgrep
  if (param_5.s_addr == 0) {
    local_304 = 0x494;
    local_308 = &local_304;
    __n = 4   //possible issue identified - semgrep
  }
  else {
    uVar8 = find_ip_opt(param_5.s_addr,&local_308);
    __n = uVar8 & 0xffff   //possible issue identified - semgrep
  }
  verbose("%s ip_opt_len:%d  for group:%X\n","build_igmp_v3",__n,param_5.s_addr);
  pcVar3 = inet_ntoa(param_1);
  strcpy(acStack_290,pcVar3)   //possible issue identified - semgrep
  pcVar3 = inet_ntoa(param_2);
  strcpy(acStack_270,pcVar3)   //possible issue identified - semgrep
  pcVar3 = inet_ntoa(param_5);
  strcpy(acStack_250,pcVar3)   //possible issue identified - semgrep
  local_227 = 2;
  local_230._0_2_ = CONCAT11(0xc0,(byte)(__n + 0x14 >> 2) & 0xf | 0x40);
  local_228 = 1;
  local_224 = param_1.s_addr;
  local_220 = param_2.s_addr;
  memcpy(&uStack_21c,local_308,__n)   //possible issue identified - semgrep
  puVar9 = (ushort *)((int)&uStack_21c + __n);
  if (param_3 == 0x22) {
    local_230 = CONCAT22((short)__n + 0x24,(undefined2)local_230);
    *(in_addr_t *)((int)local_20c + (__n - 4)) = param_5.s_addr;
    *(undefined2 *)((int)&local_218 + __n + 2) = 0x100;
    *(undefined2 *)((int)&local_214 + __n + 2) = 0;
    *(undefined1 *)((int)&local_214 + __n) = param_7;
    *(char *)puVar9 = (char)param_3;
    *(undefined2 *)((int)&uStack_21a + __n) = 0;
    uVar8 = 0;
    do {
      uVar2 = *puVar9;
      puVar9 = puVar9 + 1;
      uVar8 = uVar8 + uVar2;
    } while (puVar9 != (ushort *)((int)local_20c + __n));
  }
  else {
    local_230 = CONCAT22((short)__n + 0x20,(undefined2)local_230);
    *(uint *)((int)&local_214 + __n) =
         *(uint *)((int)&local_214 + __n) & 0xfffffff0 | (param_6 & 1) << 3 | 2;
    *(undefined1 *)((int)&uStack_21c + __n + 1) = 10;
    *(in_addr_t *)((int)&local_218 + __n) = param_5.s_addr;
    *(undefined1 *)((int)&local_214 + __n + 1) = param_4;
    *(char *)puVar9 = (char)param_3;
    *(undefined2 *)((int)&local_214 + __n + 2) = 0;
    *(undefined2 *)((int)&uStack_21a + __n) = 0;
    uVar8 = 0;
    do {
      uVar2 = *puVar9;
      puVar9 = puVar9 + 1;
      uVar8 = uVar8 + uVar2;
    } while (puVar9 != (ushort *)((int)local_20c + (__n - 4)));
  }
  iVar4 = (uVar8 & 0xffff) + ((int)uVar8 >> 0x10);
  *(short *)((int)&uStack_21a + __n) = ~((short)((uint)iVar4 >> 0x10) + (short)iVar4);
  uVar8 = local_230 >> 0x10;
  bVar1 = (param_2.s_addr & 0xf0) == 0xe0;
  if (bVar1) {
    uVar5 = mrtapi_sock();
    sopt_set_multicast_if(uVar5,param_1.s_addr);
  }
  local_300.sa_family = 2;
  local_300.sa_data[0] = '\0';
  local_300.sa_data[1] = '\0';
  local_300.sa_data[6] = '\0';
  local_300.sa_data[7] = '\0';
  local_300.sa_data[8] = '\0';
  local_300.sa_data[9] = '\0';
  local_300.sa_data[10] = '\0';
  local_300.sa_data[0xb] = '\0';
  local_300.sa_data[0xc] = '\0';
  local_300.sa_data[0xd] = '\0';
  local_300.sa_data._2_4_ = param_2.s_addr;
  iVar4 = mrtapi_sock();
  sVar6 = sendto(iVar4,&local_230,uVar8,0,&local_300,0x10);
  if (sVar6 < 0) {
    piVar7 = __errno_location();
    pcVar3 = strerror(*piVar7);
    verbose("%s: sendto error: %s !\n","send_igmp_v3",pcVar3);
  }
  if (bVar1) {
    uVar5 = mrtapi_sock();
    sopt_set_multicast_if(uVar5,0);
  }
  return;
}