econotag: generate EUI64 mac adresses properly
This commit is contained in:
parent
bea643bc4a
commit
05a4961604
|
@ -228,30 +228,27 @@ void iab_to_eui64(rimeaddr_t *eui64, uint32_t oui, uint16_t iab, uint32_t ext) {
|
||||||
eui64->u8[1] = 0x50;
|
eui64->u8[1] = 0x50;
|
||||||
eui64->u8[2] = 0xc2;
|
eui64->u8[2] = 0xc2;
|
||||||
|
|
||||||
/* EUI64 field */
|
|
||||||
eui64->u8[3] = 0xff;
|
|
||||||
eui64->u8[4] = 0xfe;
|
|
||||||
|
|
||||||
/* IAB */
|
/* IAB */
|
||||||
eui64->u8[5] = (iab >> 4) & 0xff;
|
eui64->u8[3] = (iab >> 4) & 0xff;
|
||||||
eui64->u8[6] = (iab & 0xf) << 4;
|
eui64->u8[4] = (iab & 0xf) << 4;
|
||||||
|
|
||||||
/* EXT */
|
/* EXT */
|
||||||
eui64->u8[6] |= ((ext >> 8) & 0xf);
|
|
||||||
|
eui64->u8[4] = (ext >> 24) & 0xff;
|
||||||
|
eui64->u8[5] = (ext >> 16) & 0xff;
|
||||||
|
eui64->u8[6] = (ext >> 8) & 0xff;
|
||||||
eui64->u8[7] = ext & 0xff;
|
eui64->u8[7] = ext & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void oui_to_eui64(rimeaddr_t *eui64, uint32_t oui, uint32_t ext) {
|
void oui_to_eui64(rimeaddr_t *eui64, uint32_t oui, uint64_t ext) {
|
||||||
/* OUI */
|
/* OUI */
|
||||||
eui64->u8[0] = (oui >> 16) & 0xff;
|
eui64->u8[0] = (oui >> 16) & 0xff;
|
||||||
eui64->u8[1] = (oui >> 8) & 0xff;
|
eui64->u8[1] = (oui >> 8) & 0xff;
|
||||||
eui64->u8[2] = oui & 0xff;
|
eui64->u8[2] = oui & 0xff;
|
||||||
|
|
||||||
/* EUI64 field */
|
|
||||||
eui64->u8[3] = 0xff;
|
|
||||||
eui64->u8[4] = 0xfe;
|
|
||||||
|
|
||||||
/* EXT */
|
/* EXT */
|
||||||
|
eui64->u8[3] = (ext >> 32) & 0xff;
|
||||||
|
eui64->u8[4] = (ext >> 24) & 0xff;
|
||||||
eui64->u8[5] = (ext >> 16) & 0xff;
|
eui64->u8[5] = (ext >> 16) & 0xff;
|
||||||
eui64->u8[6] = (ext >> 8) & 0xff;
|
eui64->u8[6] = (ext >> 8) & 0xff;
|
||||||
eui64->u8[7] = ext & 0xff;
|
eui64->u8[7] = ext & 0xff;
|
||||||
|
@ -285,7 +282,7 @@ set_rimeaddr(rimeaddr_t *addr)
|
||||||
iab_to_eui64(&eui64, OUI, IAB, EXT_ID);
|
iab_to_eui64(&eui64, OUI, IAB, EXT_ID);
|
||||||
#else /* ifdef EXT_ID */
|
#else /* ifdef EXT_ID */
|
||||||
PRINTF("address in flash blank, setting to defined IAB with a random extension.\n\r");
|
PRINTF("address in flash blank, setting to defined IAB with a random extension.\n\r");
|
||||||
iab_to_eui64(&eui64, OUI, IAB, *MACA_RANDOM & 0xfff);
|
iab_to_eui64(&eui64, OUI, IAB, *MACA_RANDOM);
|
||||||
#endif /* ifdef EXT_ID */
|
#endif /* ifdef EXT_ID */
|
||||||
|
|
||||||
#else /* ifdef IAB */
|
#else /* ifdef IAB */
|
||||||
|
@ -295,7 +292,7 @@ set_rimeaddr(rimeaddr_t *addr)
|
||||||
oui_to_eui64(&eui64, OUI, EXT_ID);
|
oui_to_eui64(&eui64, OUI, EXT_ID);
|
||||||
#else /*ifdef EXT_ID */
|
#else /*ifdef EXT_ID */
|
||||||
PRINTF("address in flash blank, setting to defined OUI with a random extension.\n\r");
|
PRINTF("address in flash blank, setting to defined OUI with a random extension.\n\r");
|
||||||
oui_to_eui64(&eui64, OUI, *MACA_RANDOM & 0xffffff);
|
oui_to_eui64(&eui64, OUI, ((*MACA_RANDOM << 32) | *MACA_RANDOM));
|
||||||
#endif /*endif EXTID */
|
#endif /*endif EXTID */
|
||||||
|
|
||||||
#endif /* ifdef IAB */
|
#endif /* ifdef IAB */
|
||||||
|
|
Loading…
Reference in a new issue