All pastes #254575 Raw Edit

Miscellany

public text v1 · immutable
#254575 ·published 2006-11-22 00:42 UTC
rendered paste body
typedef 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;
}