如何在 VxWorks 6.8 中生成关闭网中唯一的 唯一ID ?< / p>
网络中的每个设备都需要一个关联的ID,在启动时设置 一次 ,并保持到关闭状态。它们不必是随机或加密安全 - 只是在封闭网络中 唯一 。
可用长度 6 Byte 。
限制:
dTSEC
或eTSEC
)我使用某种“随机伏都教”进行了测试和开发目的的尝试(例如,参见下面的代码);直到现在他们没有碰撞地工作,但我不确定他们是否足够独特以保持安全。
我需要的是一个真正的解决方案。
目前我使用CLOCK_MONOTONIC
的纳秒时间和每个微控制器架构的id:
#ifdef ARCH_1
# define MC_ARCH_ID 0x01
#elif defined(ARCH_2)
# define MC_ARCH_ID 0x02
/* ... */
#else
# define MC_ARCH_ID 0x00
#endif /* MC_ARCH_ID */
/* ... */
char id[6];
struct timespec tspec;
clock_gettime(CLOCK_MONOTONIC, &tspec);
UINT32 t = htonl(tspec.tv_nsec); /* consistent endian */
id[0] = MC_ARCH_ID; /* 1 Byte ID set for each arch. */
id[1] = (UINT8) ((UINT8*) &t)[0];
id[2] = (UINT8) ((UINT8*) &t)[1];
id[3] = (UINT8) ((UINT8*) &t)[2];
id[4] = (UINT8) ((UINT8*) &t)[3];
id[5] = 0x00; /* Not used yet */
(希望)网络中的单调纳秒是不同的(请记住:这些ID在启动时设置一次) - 因此ID是“唯一的”。但正如“希望”表明:他们有可能没有。这里的时间是not the best choice。
作为更好,更安全的解决方案,我考虑使用MAC地址。不幸的是
char mac[6];
muxIoctl(muxCookie, EIOCGADDR, mac);
只返回垃圾。