void send_igmp(in_addr param_1,in_addr param_2,undefined4 param_3,undefined4 param_4,in_addr param_5
)
{
bool bVar1;
ushort uVar2;
char *pcVar3;
undefined4 uVar4;
undefined4 uVar5;
ssize_t sVar6;
int *piVar7;
ushort *puVar8;
int iVar9;
uint uVar10;
size_t __n;
char *__dest;
char *__dest_00;
undefined4 *local_2a8;
undefined4 local_2a4;
sockaddr local_2a0;
char acStack_290 [32];
char acStack_270 [32];
char acStack_250 [32];
byte local_230;
undefined1 uStack_22f;
ushort uStack_22e;
undefined1 local_228;
undefined1 local_227;
in_addr_t local_224;
in_addr_t local_220;
undefined2 uStack_21c;
ushort uStack_21a;
in_addr_t local_218;
ushort local_214 [248];
pcVar3 = inet_ntoa(param_1);
strcpy(acStack_290,pcVar3) //possible issue identified - semgrep
__dest = acStack_270;
pcVar3 = inet_ntoa(param_2);
strcpy(__dest,pcVar3) //possible issue identified - semgrep
__dest_00 = acStack_250;
pcVar3 = inet_ntoa(param_5);
strcpy(__dest_00,pcVar3) //possible issue identified - semgrep
uVar4 = igmp_type(param_3);
uVar5 = param_4;
verbose("%s: SEND %s from %s to %s for %s. code=0x%02x\n","send_igmp",uVar4,acStack_290,__dest,
__dest_00,param_4);
memset(&local_230,0,0x204) //possible issue identified - semgrep
if (param_5.s_addr == 0) {
local_2a4 = 0x494;
local_2a8 = &local_2a4;
__n = 4 //possible issue identified - semgrep
}
else {
uVar10 = find_ip_opt(param_5.s_addr,&local_2a8);
__n = uVar10 & 0xffff //possible issue identified - semgrep
}
verbose("%s ip_opt_len:%d for group:%X\n","build_igmp",__n,param_5.s_addr,__dest,__dest_00,uVar5)
;
local_227 = 2;
uStack_22e = (short)__n + 0x1c;
_local_230 = 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_2a8,__n) //possible issue identified - semgrep
puVar8 = (ushort *)((int)&uStack_21c + __n);
*(in_addr_t *)((int)local_214 + (__n - 4)) = param_5.s_addr;
*(char *)puVar8 = (char)param_3;
*(char *)((int)&uStack_21c + __n + 1) = (char)param_4;
*(undefined2 *)((int)&uStack_21a + __n) = 0;
uVar10 = 0;
do {
uVar2 = *puVar8;
puVar8 = puVar8 + 1;
uVar10 = uVar10 + uVar2;
} while (puVar8 != (ushort *)((int)local_214 + __n));
iVar9 = (uVar10 & 0xffff) + ((int)uVar10 >> 0x10);
*(short *)((int)&uStack_21a + __n) = ~((short)((uint)iVar9 >> 0x10) + (short)iVar9);
uVar10 = (uint)uStack_22e;
bVar1 = (param_2.s_addr & 0xf0) == 0xe0;
if (bVar1) {
uVar5 = mrtapi_sock();
sopt_set_multicast_if(uVar5,param_1.s_addr);
}
local_2a0.sa_family = 2;
local_2a0.sa_data[0] = '\0';
local_2a0.sa_data[1] = '\0';
local_2a0.sa_data[6] = '\0';
local_2a0.sa_data[7] = '\0';
local_2a0.sa_data[8] = '\0';
local_2a0.sa_data[9] = '\0';
local_2a0.sa_data[10] = '\0';
local_2a0.sa_data[0xb] = '\0';
local_2a0.sa_data[0xc] = '\0';
local_2a0.sa_data[0xd] = '\0';
local_2a0.sa_data._2_4_ = param_2.s_addr;
iVar9 = mrtapi_sock();
sVar6 = sendto(iVar9,&local_230,uVar10,0,&local_2a0,0x10);
if (sVar6 < 0) {
piVar7 = __errno_location();
pcVar3 = strerror(*piVar7);
verbose("%s: sendto error: %s !\n","send_igmp",pcVar3);
}
if (bVar1) {
uVar5 = mrtapi_sock();
sopt_set_multicast_if(uVar5,0);
}
return;
}