#include <stdio.h>
#include <string.h>
int toogle_kth_bit(unsigned int n, int k) {
return (n ^ (1 << (k-1)));
}
void mac_to_ipv6_link_local(unsigned char* mac) {
unsigned char mac_c[16];
int i;
for (i=0; i<3; i++)
mac_c[i] = mac[i];
mac_c[3] = 0xff;
mac_c[4] = 0xfe;
mac_c[5] = mac[3];
mac_c[6] = mac[4];
mac_c[7] = mac[5];
mac_c[0] = toogle_kth_bit(mac_c[0], 2);
printf("FE80::");
for (i=0; i<4; i++) {
printf("%02X%02X", mac_c[i*2], mac_c[i*2+1]);
if (i == 3)
printf("\n");
else
printf(":");
}
}
int main() {
unsigned char mac_addr[6];
mac_addr[0] = 0x52;
mac_addr[1] = 0x74;
mac_addr[2] = 0xf2;
mac_addr[3] = 0xb1;
mac_addr[4] = 0xa8;
mac_addr[5] = 0x7f;
mac_to_ipv6_link_local(mac_addr);
mac_addr[0] = 0x52;
mac_addr[1] = 0x54;
mac_addr[2] = 0x00;
mac_addr[3] = 0xef;
mac_addr[4] = 0x6e;
mac_addr[5] = 0xf8;
mac_to_ipv6_link_local(mac_addr);
return 0;
}