virtio-vsock

软件环境:ubuntu20.04 aosp
硬件环境:x86 PC
目标:在host ubuntu20.04和Android虚拟机间测试virtio-vsock

介绍

在android cuttlefish虚拟机启动已支持vsock,如vehicle hal等很多场景都使用了vsock。

在这里插入图片描述

测试

  1. 在host ubuntu20.04运行server demo,监听AF_VSOCK协议9999端口
 #include <sys/socket.h>
#include <linux/vm_sockets.h>
#include <string.h>
#include <stdio.h>

int main()
{
        int s = socket(AF_VSOCK, SOCK_STREAM, 0);

        struct sockaddr_vm addr;
        memset(&addr, 0, sizeof(struct sockaddr_vm));
        addr.svm_family = AF_VSOCK;
        addr.svm_port = 9999;
        addr.svm_cid = VMADDR_CID_HOST;

        bind(s, &addr, sizeof(struct sockaddr_vm));

        listen(s, 0);

        struct sockaddr_vm peer_addr;
        socklen_t peer_addr_size = sizeof(struct sockaddr_vm);
        int peer_fd = accept(s, &peer_addr, &peer_addr_size);

        char buf[64];
        size_t msg_len;
        while ((msg_len = recv(peer_fd, &buf, 64, 0)) > 0) {
                printf("Received %lu bytes: %.*s\n", msg_len, msg_len, buf);
        }

        return 0;
}
  1. 在android虚拟机运行client demo,向AF_VSOCK协议9999端口发数据
#include <sys/socket.h>
#include <linux/vm_sockets.h>
#include <string.h>

int main()
{
        int s = socket(AF_VSOCK, SOCK_STREAM, 0);

        struct sockaddr_vm addr;
        memset(&addr, 0, sizeof(struct sockaddr_vm));
        addr.svm_family = AF_VSOCK;
        addr.svm_port = 9999;
        addr.svm_cid = VMADDR_CID_HOST;

        connect(s, &addr, sizeof(struct sockaddr_vm));

        send(s, "Hello, world!", 13, 0);

        close(s);

        return 0;
}
  1. 结果

在这里插入图片描述

参考

https://chromium.googlesource.com/chromiumos/platform2/+/9e91613d2da1b3d6cfb1c77681444e688ce99cf4/vm_tools/docs/vsock.md

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值