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