2 * linklocal - print ipv6 link-local or 6to4 address of a mac address.
3 * eui is ieee's extended unique identifier, per rfc2373.
11 Mac0mcast = 1<<0, /* multicast address */
12 Mac0localadm = 1<<1, /* locally-administered address, */
13 V60globaladm = 1<<1, /* but ipv6 reverses the meaning */
21 fprint(2, "usage: %s [-t ipv4] ether...\n", argv0);
26 ea2eui64(uchar *lla, uchar *ea)
28 *lla++ = *ea++ ^ V60globaladm; /* oui (company id) */
29 *lla++ = *ea++; /* " */
30 *lla++ = *ea++; /* " */
31 *lla++ = 0xFF; /* mac-48 in eui-64 (sic) */
32 *lla++ = 0xFE; /* " */
33 *lla++ = *ea++; /* manufacturer-assigned */
34 *lla++ = *ea++; /* " */
39 eaip26to4(uchar *lla, uchar *ea, uchar *ipv4)
41 *lla++ = 0x20; /* 6to4 address */
42 *lla++ = 0x02; /* " */
43 memmove(lla, ipv4, IPv4addrlen);
46 ea2eui64(lla + 2, ea);
50 ea2lla(uchar *lla, uchar *ea)
52 *lla++ = 0xFE; /* link-local v6 */
53 *lla++ = 0x80; /* " */
55 ea2eui64(lla + 6, ea);
61 uchar ethaddr[6], ipaddr[IPaddrlen], ipv4[IPv4addrlen];
63 if (parseether(ethaddr, ether) < 0)
64 sysfatal("%s: not an ether address", ether);
66 v4parseip(ipv4, v4_6to4);
67 eaip26to4(ipaddr, ethaddr, ipv4);
69 ea2lla(ipaddr, ethaddr);
70 print("%I\n", ipaddr);
74 main(int argc, char *argv[])
80 v4_6to4 = EARGF(usage());
87 fmtinstall('I', eipfmt);
91 for (i = 0; i < argc; i++)