rendered paste bodytypedef long long unsigned uint64;
typedef unsigned int uint32;
typedef int int32;
typedef unsigned char uint8;
static int
ParseInteger(const char *buf, int len, int base, uint32 *value)
{
char *endp;
*value = strtoul(buf, &endp, base);
while (endp < (buf + len)) {
if ((*endp != '\n') && (*endp != ' ') && (*endp != '\t')) {
return 0;
}
endp++;
}
return 1;
}
int
Parse_Hex(const char *buf, int len, uint32 *value)
{
return(ParseInteger(buf, len, 16, value));
}
static uint64
ParseMAC(const char *val, uint32 vallen)
{
uint64 MACAddr = 0;
uint32 hexlen, hexval;
int32 i, macPos;
int status = 1;
hexlen = 0;
macPos = 2;
printf("vallen: %d, val: %s\n", vallen, val);
for (i = vallen-1; i >= 0 && macPos < 8; i--) {
if (val[i] == '-') {
if (hexlen <= 2) {
int macPos2 = macPos * 2;
status = Parse_Hex(&val[i+1], hexlen, &hexval);
printf("i: %d, hexlen: %d, status: %d, hexval: 0x%x, macPos: %d\n",
i, hexlen, status, hexval, macPos);
printf("macPos2: %d\n", macPos2);
if (status == 1) {
printf("macAddr: 0x%x, 0x%x, 0x%x\n", MACAddr, hexval, hexval << macPos2);
MACAddr |= (uint64) (hexval << macPos2);
printf("macAddr2: 0x%x\n", MACAddr);
macPos++;
} else {
break;
}
hexlen = 0;
continue;
} else {
printf("MAC address format error\n");
break;
}
}
hexlen++;
}
printf("MAC: 0x%llx\n", MACAddr);
return MACAddr;
}
int main (int argc, char** argv) {
ParseMAC(argv[1], strlen(argv[1]));
return 1;
}