/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 ipv6pdip_main(int param_1,char **param_2)
{
char cVar1;
byte bVar2;
bool bVar3;
byte bVar4;
size_t sVar5;
char *pcVar6;
int iVar7;
uint uVar8;
byte *pbVar9;
FILE *pFVar10;
int iVar11;
char *pcVar12;
uint uVar13;
uint uVar14;
byte *pbVar15;
byte *pbVar16;
uint uVar17;
char *pcVar18;
uint uVar19;
uint uVar20;
code *pcVar21;
uint uVar22;
byte local_120 [16];
byte abStack_110 [16];
byte local_100 [16];
byte local_f0 [16];
byte local_e0 [16];
byte local_d0 [16];
byte local_c0 [16];
byte local_b0 [16];
byte abStack_a0 [48];
char local_70 [48];
undefined4 local_40;
char *local_3c;
byte *local_38;
byte *local_34;
byte *local_30;
local_3c = local_70;
uVar17 = 0xffffffff;
local_38 = local_120;
local_34 = local_e0;
local_30 = local_d0;
uVar22 = 8;
local_40 = 0xffffffff;
uVar19 = 0xffffffff;
bVar3 = false;
uVar20 = 0;
LAB_0040a004:
iVar7 = getopt(param_1,param_2,"n:l:s:L:p:m:h:v") //possible issue identified - semgrep
if (iVar7 < 1) {
if ((int)uVar17 < (int)uVar19) {
uVar22 = uVar19 - uVar17;
}
if (bVar3) {
printf("%8s","naddr: ");
pbVar15 = local_120;
do {
bVar4 = *pbVar15;
pbVar15 = pbVar15 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar15 != abStack_110);
putchar(10);
}
pbVar15 = local_c0;
FUN_00409a30(0,local_120,local_100,pbVar15,uVar17);
if (bVar3) {
printf("%8s","nmask: ");
do {
bVar4 = *pbVar15;
pbVar15 = pbVar15 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar15 != local_b0);
putchar(10);
printf("%8s","nid: ");
pbVar15 = local_100;
do {
bVar4 = *pbVar15;
pbVar15 = pbVar15 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar15 != local_f0);
putchar(10);
}
uVar19 = uVar17 - uVar20;
while (0 < (int)uVar19) {
uVar8 = uVar19 & 7;
if ((int)uVar19 < 8) {
if (uVar8 != 0) {
uVar13 = 0xff;
iVar7 = 0;
pbVar15 = local_e0 + 1;
do {
uVar14 = uVar13;
if (uVar13 == 0xff) {
uVar14 = (uint)pbVar15[-1];
}
uVar13 = (uint)*pbVar15;
if (iVar7 == 0) {
local_e0[0] = (byte)((int)uVar14 >> uVar8);
}
iVar7 = iVar7 + 1;
*pbVar15 = (byte)(uVar14 << (8 - uVar8 & 0x1f)) | (byte)((int)uVar13 >> uVar8);
pbVar15 = pbVar15 + 1;
} while (iVar7 != 0x10);
uVar19 = uVar19 - uVar8;
}
}
else {
iVar7 = 0;
pbVar15 = local_e0 + 1;
bVar4 = 0xff;
do {
if (bVar4 == 0xff) {
bVar4 = pbVar15[-1];
}
bVar2 = *pbVar15;
if (iVar7 == 0) {
local_e0[0] = 0;
}
iVar7 = iVar7 + 1;
*pbVar15 = bVar4;
pbVar15 = pbVar15 + 1;
bVar4 = bVar2;
} while (iVar7 != 0x10);
uVar19 = uVar19 - 8;
}
}
if (bVar3) {
printf("\n%8s","sid: ");
pbVar15 = local_e0;
do {
bVar4 = *pbVar15;
pbVar15 = pbVar15 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar15 != local_d0);
putchar(10);
}
if (uVar20 != 0) {
pbVar16 = local_e0;
pbVar9 = local_c0;
pbVar15 = pbVar16;
do {
*pbVar15 = ~*pbVar9 & *pbVar15;
pbVar15 = pbVar15 + 1;
pbVar9 = pbVar9 + 1;
} while (pbVar15 != local_d0);
if (bVar3) {
printf("\n%8s","mask sid: ");
do {
bVar4 = *pbVar16;
pbVar16 = pbVar16 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar16 != pbVar15);
putchar(10);
}
}
pcVar18 = (char *)(uVar22 + uVar17);
iVar7 = 0;
if ((char *)0x7f < pcVar18) {
fputs("Invalid Prefix Length After Combining.\n",_stderr);
return local_40;
}
do {
pbVar15 = local_e0 + iVar7;
pbVar9 = local_100 + iVar7;
pbVar16 = local_d0 + iVar7;
iVar7 = iVar7 + 1;
*pbVar16 = *pbVar15 | *pbVar9;
} while (iVar7 != 0x10);
pbVar15 = local_c0;
FUN_00409a30(0,local_d0,local_100,pbVar15,pcVar18);
if (bVar3) {
printf("\n%8s","nmask: ");
do {
bVar4 = *pbVar15;
pbVar15 = pbVar15 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar15 != local_b0);
putchar(10);
printf("%8s","nid: ");
pbVar15 = local_100;
do {
bVar4 = *pbVar15;
pbVar15 = pbVar15 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar15 != local_f0);
putchar(10);
}
pbVar15 = local_f0;
FUN_00409a30(1,abStack_110,pbVar15,local_b0,pcVar18);
if (bVar3) {
printf("%8s",&DAT_00411cbc);
do {
bVar4 = *pbVar15;
pbVar15 = pbVar15 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar15 != local_e0);
putchar(10);
printf("%8s","hmask: ");
pbVar15 = local_b0;
do {
bVar4 = *pbVar15;
pbVar15 = pbVar15 + 1;
printf("%02x ",(uint)bVar4);
} while (pbVar15 != abStack_a0);
putchar(10);
}
iVar7 = 0;
do {
pbVar15 = local_f0 + iVar7;
pbVar9 = local_100 + iVar7;
pbVar16 = local_d0 + iVar7;
iVar7 = iVar7 + 1;
*pbVar16 = *pbVar15 | *pbVar9;
} while (iVar7 != 0x10);
pbVar15 = abStack_a0;
memset(pbVar15,0,0x2e) //possible issue identified - semgrep
inet_ntop(10,local_d0,(char *)pbVar15,0x2e) //possible issue identified - semgrep
pcVar21 = printf;
local_40 = 0;
pFVar10 = (FILE *)"%s/%d\n";
goto LAB_0040a5bc;
}
if (iVar7 == 0x6d) {
uVar20 = atoi(_optarg);
uVar8 = uVar20;
LAB_00409ec4:
if (uVar8 < 0x80) goto LAB_0040a004;
pcVar18 = "Invalid Specified Prefix Length.\n";
}
else {
if (0x6d < iVar7) {
if (iVar7 == 0x70) {
uVar19 = atoi(_optarg);
uVar8 = uVar19;
goto LAB_00409ec4;
}
if (iVar7 < 0x71) {
if (iVar7 != 0x6e) goto LAB_00409ff0;
iVar7 = inet_pton(10,_optarg,local_38) //possible issue identified - semgrep
if (iVar7 < 1) {
pcVar18 = "Invalid Network ID.\n";
goto LAB_00409fc4;
}
}
else if (iVar7 == 0x73) {
memset(local_3c,0xff,0x2e) //possible issue identified - semgrep
pcVar18 = _optarg;
sVar5 = strlen(_optarg);
if (0x2d < sVar5) {
sVar5 = 0x2e //possible issue identified - semgrep
}
memcpy(local_3c,pcVar18,sVar5) //possible issue identified - semgrep
sVar5 = strlen(_optarg);
local_38[sVar5 + 0xb0] = 0;
pbVar15 = local_34;
do {
*pbVar15 = 0;
pbVar15 = pbVar15 + 1;
} while (pbVar15 != local_30);
uVar8 = 0;
pbVar15 = local_34;
if (local_70[0] == '\0') {
LAB_00409e20:
fprintf(_stderr,"%s\n",s_Usage__ipv6pdip__n__prefix___l___00422200);
return 0xffffffff;
}
while( true ) {
cVar1 = local_3c[uVar8];
iVar11 = (int)cVar1;
iVar7 = iVar11 + -0x30;
if (9 < (byte)(cVar1 - 0x30U)) break;
LAB_00409db4:
uVar8 = uVar8 + 1;
if (iVar7 == 0x10000002) goto LAB_0040a000;
if (iVar7 == 0x10000003) goto LAB_00409e08;
if ((uVar8 & 1) == 1) {
*pbVar15 = (byte)(iVar7 << 4);
}
else {
*pbVar15 = (byte)iVar7 & 0xf | *pbVar15 & 0xf0;
pbVar15 = pbVar15 + 1;
}
}
iVar7 = iVar11 + -0x57;
if (((byte)(cVar1 + 0x9fU) < 6) || (iVar7 = iVar11 + -0x37, (byte)(cVar1 + 0xbfU) < 6))
goto LAB_00409db4;
if (iVar11 != 0) {
LAB_00409e08:
puts("Invalid character in SLA");
goto LAB_00409e20;
}
LAB_0040a000:
local_40 = 0;
}
else {
bVar3 = true;
if (iVar7 != 0x76) {
LAB_00409ff0:
pcVar21 = fprintf;
pbVar15 = (byte *)0x410b9c;
pcVar18 = s_Usage__ipv6pdip__n__prefix___l___00422200;
pFVar10 = _stderr;
LAB_0040a5bc:
(*pcVar21)(pFVar10,pbVar15,pcVar18);
return local_40;
}
}
goto LAB_0040a004;
}
if (iVar7 == 0x68) {
memset(abStack_a0,0,0x2e) //possible issue identified - semgrep
pcVar18 = _optarg;
pcVar6 = (char *)strlen(_optarg);
if ((char *)0x2d < pcVar6) {
pcVar6 = (char *)0x2e;
}
iVar7 = strncmp(pcVar18,"::",2);
if (iVar7 == 0) {
pcVar21 = memcpy;
pcVar12 = pcVar18;
pcVar18 = pcVar6;
}
else {
pcVar21 = sprintf;
if (*pcVar18 == ':') {
pcVar12 = ":%s";
}
else {
pcVar12 = "::%s";
}
}
(*pcVar21)(abStack_a0,pcVar12,pcVar18);
iVar7 = inet_pton(10,(char *)abStack_a0,abStack_110) //possible issue identified - semgrep
if (0 < iVar7) goto LAB_0040a004;
pcVar18 = "Invalid Host ID.\n";
}
else {
if (iVar7 == 0x6c) {
uVar17 = atoi(_optarg);
if (0x7f < uVar17) {
pcVar18 = "Invalid Prefix Length.\n";
goto LAB_00409fc4;
}
goto LAB_0040a004;
}
if (iVar7 != 0x4c) goto LAB_00409ff0;
uVar22 = atoi(_optarg);
if (uVar22 < 0x80) goto LAB_0040a004;
pcVar18 = "Invalid SLA Length.\n";
}
}
LAB_00409fc4:
fputs(pcVar18,_stderr);
goto LAB_00409ff0;
}