编程接口指南

发布、重新发布和取消发布内存段

通过发布操作,其他互连节点可以导入内存段。一个导出段可能会在多个互连适配器上发布。

段 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

操作被信号中断