summaryrefslogtreecommitdiffstatsabout
path: root/SylixOS
diff options
context:
space:
mode:
authorHanhui <hanhui@acoinfo.com>2020-10-06 13:34:23 (GMT)
committer Hanhui <hanhui@acoinfo.com>2020-10-06 13:34:23 (GMT)
commit4863ccb8e4f8fdfe2a854c2cd52a13c7ec520c91 (patch)
tree91b77403b49ab1ee81cf800f66995d3d47e3370d /SylixOS
parentbfa6247b5a16fe4a7772a2d05d6f29b515b99f78 (diff)
downloadlibsylixos-4863ccb8e4f8fdfe2a854c2cd52a13c7ec520c91.zip
libsylixos-4863ccb8e4f8fdfe2a854c2cd52a13c7ec520c91.tar.gz
libsylixos-4863ccb8e4f8fdfe2a854c2cd52a13c7ec520c91.tar.bz2
Add sys/random.h support.
Diffstat (limited to 'SylixOS')
-rw-r--r--SylixOS/CHANGELOG31
-rw-r--r--SylixOS/include/sys/random.h55
-rw-r--r--SylixOS/system/device/rand/randDev.c45
-rw-r--r--SylixOS/system/device/rand/randDevLib.c2
4 files changed, 133 insertions, 0 deletions
diff --git a/SylixOS/CHANGELOG b/SylixOS/CHANGELOG
index 665b092..126d83d 100644
--- a/SylixOS/CHANGELOG
+++ b/SylixOS/CHANGELOG
@@ -4,6 +4,37 @@ HISTORY
++ New features:
+ 2020-10-04: han.hui
+ 加入 sys/random.h 支持.
+
+ 2020-09-30: han.hui
+ 支持网卡独立的 DNS 设置.
+
+ 2020-09-29: han.hui
+ ARP 支持 IP 与 MAC 排他性强绑定模式.
+
+ 2020-09-03: han.hui
+ 加入一些快速上下文接口, 提高 EdgerOS 引擎效率.
+
+ 2020-08-26: han.hui
+ ARM / ARM64 排队自旋锁加入可配置屏障, 适用于一些特殊的定制处理器.
+
+ 2020-08-06: han.hui
+ 使用分离时间自旋锁提高实时性.
+
+++ Bugfixes:
+
+ 2020-09-24: han.hui
+ 修正桥接网卡与 bound 网卡防火墙 hook 错误.
+ 修正 loader init/fini call 死锁错误.
+
+ 2020-08-17: han.hui
+ 修正 AF_UNIX 线程间传递文件描述符.
+
+(STABLE-1.12.6)
+
+++ New features:
+
2020-07-05: han.hui
支持 tcp SACK input.
diff --git a/SylixOS/include/sys/random.h b/SylixOS/include/sys/random.h
new file mode 100644
index 0000000..e3cc84e
--- /dev/null
+++ b/SylixOS/include/sys/random.h
@@ -0,0 +1,55 @@
+/*********************************************************************************************************
+**
+** 中国软件开源组织
+**
+** 嵌入式实时操作系统
+**
+** SylixOS(TM) LW : long wing
+**
+** Copyright All Rights Reserved
+**
+**--------------文件信息--------------------------------------------------------------------------------
+**
+** 文 件 名: random.h
+**
+** 创 建 人: Han.Hui (韩辉)
+**
+** 文件创建日期: 2020 年 10 月 04 日
+**
+** 描 述: 随机数发生器.
+*********************************************************************************************************/
+
+#ifndef __SYS_RANDOM_H
+#define __SYS_RANDOM_H
+
+#include "fcntl.h"
+#include "stdlib.h"
+
+/*********************************************************************************************************
+ random flags
+*********************************************************************************************************/
+#if LW_CFG_DEVICE_EN > 0
+
+#define GRND_NONBLOCK O_NONBLOCK
+#define GRND_RANDOM O_SYNC
+
+/*********************************************************************************************************
+ random API
+*********************************************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+ssize_t getrandom(void *buf, size_t buflen, unsigned int flags);
+int getentropy(void *buf, size_t buflen);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LW_CFG_DEVICE_EN > 0 */
+#endif /* __SYS_RANDOM_H */
+/*********************************************************************************************************
+ END
+*********************************************************************************************************/
diff --git a/SylixOS/system/device/rand/randDev.c b/SylixOS/system/device/rand/randDev.c
index c3c862d..737cb69 100644
--- a/SylixOS/system/device/rand/randDev.c
+++ b/SylixOS/system/device/rand/randDev.c
@@ -111,6 +111,51 @@ INT API_RandDevCreate (VOID)
return (ERROR_NONE);
}
+/*********************************************************************************************************
+** 函数名称: getrandom
+** 功能描述: 获得随机数序列. (sys/random.h)
+** 输 入 : buf 缓存
+** buflen 缓存长度
+** flags GRND_NONBLOCK / GRND_RANDOM / ...
+** 输 出 : 读出的随机数序列长度.
+** 全局变量:
+** 调用模块:
+** API 函数
+*********************************************************************************************************/
+LW_API
+ssize_t getrandom (void *buf, size_t buflen, unsigned int flags)
+{
+ if (!buf || !buflen) {
+ _ErrorHandle(EINVAL);
+ return (PX_ERROR);
+ }
+
+ return (__randRead(NULL, buf, buflen));
+}
+/*********************************************************************************************************
+** 函数名称: getentropy
+** 功能描述: 获得随机数序列. (sys/random.h)
+** 输 入 : buf 缓存
+** buflen 缓存长度
+** 输 出 : 读出的随机数序列长度.
+** 全局变量:
+** 调用模块:
+** API 函数
+*********************************************************************************************************/
+LW_API
+int getentropy (void *buf, size_t buflen)
+{
+ ssize_t randlen;
+
+ if (!buf || !buflen) {
+ _ErrorHandle(EINVAL);
+ return (PX_ERROR);
+ }
+
+ randlen = __randRead(NULL, buf, buflen);
+
+ return (randlen == buflen ? ERROR_NONE : PX_ERROR);
+}
#endif /* LW_CFG_DEVICE_EN */
/*********************************************************************************************************
diff --git a/SylixOS/system/device/rand/randDevLib.c b/SylixOS/system/device/rand/randDevLib.c
index 92e6d85..1b362e8 100644
--- a/SylixOS/system/device/rand/randDevLib.c
+++ b/SylixOS/system/device/rand/randDevLib.c
@@ -176,6 +176,8 @@ ssize_t __randRead (PLW_RAND_FIL prandfil, PCHAR pcBuffer, size_t stMaxBytes
INT iTimes = stMaxBytes / 4; /* 一次 4 个字节 */
INT iLefts = stMaxBytes % 4;
+ (VOID)prandfil; /* 目前不使用此参数 */
+
LW_SPIN_LOCK_QUICK(&_G_slRandLock, &iregInterLevel);
lSeedInit += (INT32)_G_tvLastInt.tv_nsec; /* 快速重复调用确保不相同 */
LW_SPIN_UNLOCK_QUICK(&_G_slRandLock, iregInterLevel);