CL_node::CL_bestroute6 例程

CL_bestroute6 例程将返回一对本地或远程 IP 地址,这一对地址表示到对象中指定的节点的最直接路由。 此例程能够处理 IPv4 地址和 IPv6 地址。

CL_bestroute6 例程所返回的路由取决于发出请求的节点。 Clinfo 首先构建一个由本地节点上的所有工作网络接口组成的列表,然后将此列表与所指定节点上的可用接口进行比较。 该例程首先将 PowerHA® SystemMirror® 定义的专用接口(如串行光纤通道)与本地接口进行比较。 如果没有找到匹配的接口,例程会将 PowerHA SystemMirror 定义的公共接口与本地接口进行比较。 如果仍然没有匹配项,那么该例程将选择本地节点上最先定义的接口以及远程节点上最先定义的接口。

如果一对本地和远程接口存在于同一网络上,那么将在 CL_route6 中返回这些接口。 否则,将选择所指定节点上的接口作为远程接口,并且将返回主本地接口作为路由的本地端。

语法

CL_route CL_node::CL_bestroute6(CL_status s)

必需的输入对象数据

项目 描述
CL_node::cln_clusterid 和 cln_nodename 目标节点的集群标识和节点名。

返回值

项目 描述
CL_route6 一对本地或远程 IP 地址,这一对地址指示到所指定节点的最直接路由。

状态值

项目 描述
CL_status s 按引用传递的状态。 用于存放返回码的输出参数。
清除 (CLE_OK) 请求已成功完成。
清除 BADARGS 缺少参数或参数无效。 此状态通常指示对输出参数地址指定了 NULL 指针。
清除 (CLE_NOROUTE) 无可用路由。
cle_ivclusterid 该请求指定了无效集群标识。
CLE_IVNODENAME 该请求指定了无效节点名。

示例

CL_status status; 
CL_node node;
CL_route6 route; 
char cbuf[CL_ERRMSG_LEN]; 
char *addr;

node.cln_clusterid = 1113325332; 
strcpy(node.cln_nodename.name, "node1"); 
route = node.CL_bestroute6(status); 
if (status < 0) 
{ 
	cl_errmsg(status); 
}
else
{ 
	// don't call inet_ntop twice in one 
	printf("local = %s ", inet_ntop(AF_INET6, 
	&(((struct sockaddr_in6 *)&(route.localaddr))->sin6_addr), addr, INET6_ADDRSTRLEN);
	printf("remote = %s\n", inet_ntop(AF_INET6, 
	&(((struct sockaddr_in6 *)&(route.remoteaddr))->sin6_addr), addr, 	INET6_ADDRSTRLEN);
}