ieee802154: add ieee802154_random_extended_addr
This patch adds a new function to generate a random IEEE 802.15.4 extended address. Signed-off-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
1906bbbddb
commit
35d5a374a5
|
@ -24,6 +24,7 @@
|
||||||
#define LINUX_IEEE802154_H
|
#define LINUX_IEEE802154_H
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <linux/random.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
|
|
||||||
#define IEEE802154_MTU 127
|
#define IEEE802154_MTU 127
|
||||||
|
@ -215,4 +216,17 @@ static inline bool ieee802154_is_valid_extended_addr(const __le64 addr)
|
||||||
(addr != cpu_to_le64(0xffffffffffffffffULL)));
|
(addr != cpu_to_le64(0xffffffffffffffffULL)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ieee802154_random_extended_addr - generates a random extended address
|
||||||
|
* @addr: extended addr pointer to place the random address
|
||||||
|
*/
|
||||||
|
static inline void ieee802154_random_extended_addr(__le64 *addr)
|
||||||
|
{
|
||||||
|
get_random_bytes(addr, IEEE802154_EXTENDED_ADDR_LEN);
|
||||||
|
|
||||||
|
/* toggle some bit if we hit an invalid extended addr */
|
||||||
|
if (!ieee802154_is_valid_extended_addr(*addr))
|
||||||
|
((u8 *)addr)[IEEE802154_EXTENDED_ADDR_LEN - 1] ^= 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* LINUX_IEEE802154_H */
|
#endif /* LINUX_IEEE802154_H */
|
||||||
|
|
Loading…
Reference in a new issue