void insert_multicast_ip(uint param_1,uint param_2)

{
  bool bVar1;
  byte bVar2;
  undefined1 uVar3;
  byte *pbVar4;
  char *pcVar5;
  uint uVar6;
  uint *puVar7;
  uint uVar8;
  
  uVar6 = param_1 >> 0x10 & 0x7f;
  uVar8 = (param_1 & 0xff00) >> 8;
  for (pbVar4 = DAT_0041b9d0;
      (pbVar4 != (byte *)0x0 &&
      (((*pbVar4 != uVar6 || (pbVar4[1] != uVar8)) || ((uint)pbVar4[2] != (param_1 & 0xff)))));
      pbVar4 = *(byte **)(pbVar4 + 8)) {
  }
  if ((DAT_0041b9d4 & 0x3ff) == 0) {
    return;
  }
  verbose("*** igmp: insert_multicast_ip..");
  if (pbVar4 == (byte *)0x0) {
    bVar1 = 0x100 < DAT_0041b9d8;
    DAT_0041b9d8 = DAT_0041b9d8 + 1;
    if (bVar1) {
      return;
    }
    if ((uVar8 == 0 && uVar6 == 0) && ((param_1 & 0xff) == 1)) {
      return;
    }
    pbVar4 = (byte *)malloc(0xc)   //possible issue identified - semgrep
    if (pbVar4 == (byte *)0x0) {
      return;
    }
    pbVar4[4] = 0;
    pbVar4[5] = 0;
    pbVar4[6] = 0;
    pbVar4[7] = 0;
    *pbVar4 = (byte)uVar6;
    pbVar4[1] = (byte)((param_1 & 0xff00) >> 8);
    pbVar4[2] = (byte)param_1;
    pbVar4[3] = 0;
    pbVar4[8] = 0;
    pbVar4[9] = 0;
    pbVar4[10] = 0;
    pbVar4[0xb] = 0;
    if (DAT_0041b9d0 != (byte *)0x0) {
      *(byte **)(pbVar4 + 8) = DAT_0041b9d0;
    }
    pcVar5 = "new[%x, %x]\n";
    DAT_0041b9d0 = pbVar4;
  }
  else {
    pcVar5 = "[%x, %x]\n";
  }
  verbose(pcVar5,param_1,param_2);
  puVar7 = *(uint **)(pbVar4 + 4);
  if (puVar7 != (uint *)0x0) {
    do {
      if ((*puVar7 == param_2) && ((uint)(byte)puVar7[1] == (param_1 >> 0x17 & 0x1f))) {
        pcVar5 = inet_ntoa((in_addr)(param_2 << 0x18 | param_2 >> 0x18 | param_2 >> 8 & 0xff00 |
                                    (param_2 & 0xff00) << 8));
        bVar2 = FUN_00406ee0(pcVar5);
        if ((uint)bVar2 != (int)*(char *)((int)puVar7 + 5)) {
          *(byte *)((int)puVar7 + 5) = bVar2;
        }
        *(undefined1 *)((int)puVar7 + 6) = 1;
        goto LAB_0040746c;
      }
      puVar7 = (uint *)puVar7[2];
    } while (puVar7 != (uint *)0x0);
  }
  puVar7 = (uint *)malloc(0xc)   //possible issue identified - semgrep
  if (puVar7 != (uint *)0x0) {
    *(byte *)(puVar7 + 1) = (byte)(param_1 >> 0x17) & 0x1f;
    *puVar7 = param_2;
    pcVar5 = inet_ntoa((in_addr)(param_2 << 0x18 | param_2 >> 0x18 | param_2 >> 8 & 0xff00 |
                                (param_2 & 0xff00) << 8));
    uVar3 = FUN_00406ee0(pcVar5);
    *(undefined1 *)((int)puVar7 + 5) = uVar3;
    *(undefined1 *)((int)puVar7 + 6) = 1;
    puVar7[2] = *(uint *)(pbVar4 + 4);
    *(uint **)(pbVar4 + 4) = puVar7;
  }
LAB_0040746c:
  FUN_00406b14(pbVar4);
  return;
}