147 |
fprintf(stderr, "%s: invalid MAC address: %s\n", argv0, argvi); |
fprintf(stderr, "%s: invalid MAC address: %s\n", argv0, argvi); |
148 |
return; |
return; |
149 |
} |
} |
150 |
|
|
151 |
ConstructEUI64(MAC, EUI64); |
ConstructEUI64(MAC, EUI64); |
152 |
ConstructModEUI64(EUI64, ModEUI64); |
ConstructModEUI64(EUI64, ModEUI64); |
153 |
|
|
154 |
PrintMAC(MAC); |
PrintMAC(MAC); |
155 |
PrintEUI64(EUI64); |
PrintEUI64(EUI64); |
156 |
PrintModEUI64(ModEUI64); |
PrintModEUI64(ModEUI64); |
157 |
PrintEUI64_InterfaceID(ModEUI64); |
PrintEUI64_InterfaceID(ModEUI64); |
158 |
PrintEUI64_IP6_ARPA(ModEUI64); |
PrintEUI64_IP6_ARPA(ModEUI64); |
159 |
//PrintEUI64_IP6_INT(ModEUI64); |
//PrintEUI64_IP6_INT(ModEUI64); |
160 |
} /* TransformMAC() */ |
} /* TransformMAC() */ |
161 |
|
|
162 |
|
unsigned char ConstructHexByte(unsigned char MSNybble, unsigned char LSNybble); |
163 |
|
|
164 |
int ConstructMAC(const char *argvi, unsigned char * MAC) |
int ConstructMAC(const char *argvi, unsigned char * MAC) |
165 |
{ |
{ |
|
unsigned char ConstructHexByte(unsigned char MSNybble, unsigned char LSNybble); |
|
|
|
|
166 |
int ReturnValue = EXIT_SUCCESS, NumDigits = 0; |
int ReturnValue = EXIT_SUCCESS, NumDigits = 0; |
167 |
size_t i = 0; |
size_t i = 0; |
168 |
unsigned char MSNybble, LSNybble; |
unsigned char MSNybble, LSNybble; |
169 |
|
|
170 |
while (*argvi) { |
while (*argvi) { |
171 |
if (isxdigit(*argvi)) { |
if (isxdigit(*argvi)) { |
172 |
NumDigits++; |
NumDigits++; |
173 |
MSNybble = (unsigned char)*argvi++; |
MSNybble = (unsigned char)*argvi++; |
174 |
|
|
175 |
if (!isxdigit(*argvi)) { |
if (!isxdigit(*argvi)) { |
176 |
break; |
break; |
177 |
} |
} |
178 |
|
|
179 |
NumDigits++; |
NumDigits++; |
180 |
LSNybble = (unsigned char)*argvi; |
LSNybble = (unsigned char)*argvi; |
181 |
|
|
182 |
MAC[i++] = ConstructHexByte(MSNybble, LSNybble); |
MAC[i++] = ConstructHexByte(MSNybble, LSNybble); |
183 |
} |
} |
184 |
|
|
185 |
argvi++; |
argvi++; |
186 |
} |
} |
187 |
|
|
188 |
if (NumDigits != 12) |
if (NumDigits != 12) |
189 |
ReturnValue = EXIT_FAILURE; |
ReturnValue = EXIT_FAILURE; |
190 |
|
|
191 |
return ReturnValue; |
return ReturnValue; |
192 |
} /* ConstructMAC() */ |
} /* ConstructMAC() */ |
|
|
|
|
unsigned char ConstructHexByte(unsigned char MSNybble, unsigned char LSNybble); |
|
193 |
|
|
194 |
unsigned char ConstructHexByte(unsigned char MSNybble, unsigned char LSNybble) |
unsigned char ConstructHexByte(unsigned char MSNybble, unsigned char LSNybble) |
195 |
{ |
{ |
196 |
unsigned char Byte; |
unsigned char Byte; |
197 |
|
|
198 |
MSNybble = (unsigned char)toupper(MSNybble); |
MSNybble = (unsigned char)toupper(MSNybble); |
199 |
LSNybble = (unsigned char)toupper(LSNybble); |
LSNybble = (unsigned char)toupper(LSNybble); |
200 |
|
|
201 |
if (MSNybble >= 'A') { |
if (MSNybble >= 'A') { |
202 |
MSNybble = 0x0A + MSNybble - 'A'; |
MSNybble = 0x0A + MSNybble - 'A'; |
203 |
} |
} |
204 |
else { |
else { |
205 |
MSNybble -= '0'; |
MSNybble -= '0'; |
206 |
} |
} |
207 |
|
|