QNX VM不支持zmq_vmci?

时间:2016-12-08 23:21:43

标签: c virtual-machine zeromq

我在C中的QNX 6.6 Neutrino虚拟机上一直在搞乱ZMQ。只是一些简单的req-rep和pub-sub程序。我已经将这些工作只用于一个VM并在其自己的进程中运行每个程序。

//client
void *context = zmq_ctx_new ();
void *requester = zmq_socket (context, ZMQ_REQ);
zmq_connect (requester, "tcp://localhost:8001");

//server
void *context = zmq_ctx_new ();
void *responder = zmq_socket (context, ZMQ_REP);
zmq_bind (responder, "tcp://*:8001")

但是,当我将传输从tcp更改为vmci时,我收到一条错误消息,表明它不受支持。

  

错误消息:未配置或不支持协议。

我的主机是Windows 7。 我正在使用VMware Workstation来托管VM。 我的libzmq版本是4.2.0。

感谢您的帮助。 :)

1 个答案:

答案 0 :(得分:1)

ZeroMQ vmci:// transport-class需要一些额外的更改

除了源代码中从tcp: vmci: 的交换之外。

vmci:// 还需要知道(接收)来自VM-hypervisor的 CID

//  Get, show and set the CID
cid       = VMCISock_GetLocalCID();
printf( "Obtained [%d] for using in vmci://<CID>:<port>", cid );
sprintf( aSockEndPOINT,            "vmci://%d:5555",      cid );

//  .bind()
opRetCode = zmq_bind( socket, aSockEndPOINT ); assert ( rc == 0 );

.connect()方:

//  --------------------------------------------------------------
//  .connect() using a CID
sprintf( aConnEndPOINT, "vmci://%d:5555", cid );
opRetCode = zmq_connect( socket, aConnEndPOINT ); assert ( rc == 0 );

适用于练习"wildcard"-bind()-s or for deferred VMCISock_GetLocalCID()-calls

的其他一些建议

对于QNX VM:

您能否确认QNX Neutrino已成功适应ZeroMQ?

C程序包含文件的位置 vmci_sockets.h 包含以下位置之一的文件:

Linux来宾 - /usr/lib/vmware-tools/include/vmci

Linux主机 - /usr/lib/vmware/include/vmci

您能否确认您的ZeroMQ QNX端口已generated by cross-building from FreeBSD port ( Chapter 2 )或其他已发布的方法还包含 vmci

你是否测试了VMCI在QNX端对着普通C(没有ZeroMQ)的VMware Workstation进行测试?

May enjoy a few scenarios to test and POSACK / NACK the QNX / VMware Workstation vmci-RTO state.

最后但并非最不重要

VM必须获得使用VMCI服务的适当权限,否则主机/隔离将获得质数:

enter image description here