发布、重新发布和取消发布内存段
通过发布操作,其他互连节点可以导入内存段。一个导出段可能会在多个互连适配器上发布。
段 ID 可以在授权范围内指定或指定为零,此时 RSMAPI 框架会生成有效的段 ID 并传递回该段 ID。
段访问控制列表由多对节点 ID 和访问权限组成。对于列表中指定的每个节点 ID,关联的读/写权限会通过三个八进制数字提供给属主、组和其他用户,这与 Solaris 文件权限一样。在访问控制列表中,每个八进制数字都可以具有以下值:
- 2
-
写入访问。
- 4
-
只读访问。
- 6
-
读写访问。
访问权限值 0624 可指定以下访问类型:
提供访问控制列表之后,未包含在此列表中的节点不能导入段。但是,如果访问列表为空,则任何节点都可导入段。所有节点的访问权限等同于导出进程的属主/组/其他用户文件创建权限。
注 – 节点应用程序负责管理段标识符的指定,从而确保导出节点的唯一性。
发布段
int rsm_memseg_export_publish(
rsm_memseg_export_handle_t memseg,
rsm_memseg_id_t *segment_id,
rsmapi_access_entry_t ACCESS_list[],
uint_t access_list_length);
typedef struct {
rsm_node_id_t ae_node; /* remote node id allowed to access resource */
rsm_permission_t ae_permissions; /* mode of access allowed */
}rsmapi_access_entry_t;.
返回值:如果成功,则返回 0。否则返回错误值。
-
RSMERR_BAD_SEG_HNDL
-
段句柄无效
-
RSMERR_SEG_ALREADY_PUBLISHED
-
段已发布
-
RSMERR_BAD_ACL
-
访问控制列表无效
-
RSMERR_BAD_SEGID
-
段标识符无效
-
RSMERR_SEGID_IN_USE
-
段标识符正在使用
-
RSMERR_RESERVED_SEGID
-
段标识符已保留
-
RSMERR_NOT_CREATOR
-
不是段的创建者
-
RSMERR_BAD_ADDR
-
地址错误
-
RSMERR_INSUFFICIENT_MEM
-
内存不足
-
RSMERR_INSUFFICIENT_RESOURCES
-
资源不足
授权的段 ID 范围:
-
#define RSM_DRIVER_PRIVATE_ID_BASE
-
0
-
#define RSM_DRIVER_PRIVATE_ID_END
-
0x0FFFFF
-
#define RSM_CLUSTER_TRANSPORT_ID_BASE
-
0x100000
-
#define RSM_CLUSTER_TRANSPORT_ID_END
-
0x1FFFFF
-
#define RSM_RSMLIB_ID_BASE
-
0x200000
-
#define RSM_RSMLIB_ID_END
-
0x2FFFFF
-
#define RSM_DLPI_ID_BASE
-
0x300000
-
#define RSM_DLPI_ID_END
-
0x3FFFFF
-
#define RSM_HPC_ID_BASE
-
0x400000
-
#define RSM_HPC_ID_END
-
0x4FFFFF
以下范围会保留,以便在发布值为零时由系统进行分配。
-
#define RSM_USER_APP_ID_BASE
-
0x80000000
-
#define RSM_USER_APP_ID_END
-
0xFFFFFFF
重新发布段
int rsm_memseg_export_republish(
rsm_memseg_export_handle_t memseg,
rsmapi_access_entry_t access_list[],
uint_t access_list_length);
此函数可用于建立新的节点访问列表和段访问模式。这些更改仅会影响将来的导入调用,并且不会撤消已准许的导入请求。
返回值:如果成功,则返回 0。否则返回错误值。
-
RSMERR_BAD_SEG_HNDL
-
段句柄无效
-
RSMERR_SEG_NOT_PUBLISHED
-
段未发布
-
RSMERR_BAD_ACL
-
访问控制列表无效
-
RSMERR_NOT_CREATOR
-
不是段的创建者
-
RSMERR_INSUFFICIENT_MEMF
-
内存不足
-
RSMERR_INSUFFICIENT_RESOURCES
-
资源不足
-
RSMERR_INTERRUPTED
-
操作被信号中断
取消发布段
int rsm_memseg_export_unpublish(
rsm_memseg_export_handle_t memseg);
返回值:如果成功,则返回 0。否则返回错误值。
-
RSMERR_BAD_SEG_HNDL
-
段句柄无效
-
RSMERR_SEG_NOT_PUBLISHED
-
段未发布
-
RSMERR_NOT_CREATOR
-
不是段的创建者
-
RSMERR_INTERRUPTED
-
操作被信号中断