01-死磕QNX someip

文章详细记录了在QNX操作系统中使用vsomeip2.10.21和3.1.20版本进行服务配置和网络调试的过程,包括环境变量设置、路由和网络接口的配置、错误排查(如socketbind权限问题)、服务注册与客户端连接等步骤。通过对日志分析,解决了服务启动时的网络问题,确保了服务间的通信正常。
摘要由CSDN通过智能技术生成

1. vsomeip3.1.20版本 

环境配置

export COMMONAPI_CONFIG=/etc/commonapi.ini
export LD_LIBRARY_PATH=/sdcard/someip:$LD_LIBRARY_PATH
export VSOMEIP_CONFIGURATION=/etc/vsomeip-service.json
export VSOMEIP_APPLICATION_NAME=HelloWorldSomeIPService

sysctl -w net.inet.ip.forwarding=1

route -n add 224.244.224.245 192.168.1.1

测试问题:

# ./HelloWorldSomeIPService
[CAPI][INFO] Loading configuration file '/etc/commonapi.ini'
[CAPI][INFO] Using default binding 'someip'
[CAPI][INFO] Using default shared library folder '/usr/local/lib/commonapi'
[CAPI][INFO] Registering function for creating "commonapi.HelloWorld:v1_0" stub adapter.
[CAPI][INFO] Registering stub for "local:commonapi.HelloWorld:v1_0:mid.someip.helloword"
1970-00-01 03:25:22.226275 [info] Parsed vsomeip configuration in 23ms
1970-00-01 03:25:22.226285 [info] Using configuration file: "/etc/vsomeip-service.json".
1970-00-01 03:25:22.226295 [info] Configuration module loaded.
1970-00-01 03:25:22.226295 [info] Initializing vsomeip application "HelloWorldSomeIPServiceA".
1970-00-01 03:25:22.226295 [info] Instantiating routing manager [Proxy].
1970-00-01 03:25:22.226295 [info] Client [ffff] is connecting to [0] at /tmp/vsomeip-0
1970-00-01 03:25:22.226305 [info] Application(HelloWorldSomeIPServiceA, ffff) is initialized (11, 100).
1970-00-Successfully Registered Service!1
03Waiting for calls... (Abort with CTRL+C):
25:22.226305 [info] Starting vsomeip application "HelloWorldSomeIPServiceA" (ffff) using 2 threads I/O nice 255
1970-00-01 03:25:22.226315 [info] main dispatch thread id from application: ffff (HelloWorldSomeIPServiceA) is: 4
1970-00-01 03:25:22.226315 [info] shutdown thread id from application: ffff (HelloWorldSomeIPServiceA) is: 5
1970-00-01 03:25:22.226315 [info] io thread id from application: ffff (HelloWorldSomeIPServiceA) is: 3
1970-00-01 03:25:22.226315 [info] io thread id from application: ffff (HelloWorldSomeIPServiceA) is: 6
1970-00-01 03:25:22.226325 [info] routing_manager_proxy::on_disconnect: Client 0xffff calling host_->on_state with DEREGISTERED
1970-00-01 03:25:22.227335 [info] routing_manager_proxy::on_disconnect: Client 0xffff calling host_->on_state with DEREGISTERED
1970-00-01 03:25:22.229346 [info] routing_manager_proxy::on_disconnect: Client 0xffff calling host_->on_state with DEREGISTERED
1970-00-01 03:25:23.233358 [info] routing_manager_proxy::on_disconnect: Client 0xffff calling host_->on_state with DEREGISTERED
1970-00-01 03:25:24.241375 [info] routing_manager_proxy::on_disconnect: Client 0xffff calling host_->on_state with DEREGISTERED
1970-00-01 03:25:25.257385 [info] routing_manager_proxy::on_disconnect: Client 0xffff calling host_->on_state with DEREGISTERED
1970-00-01 03:25:27.273403 [info] routing_manager_proxy::on_disconnect: Client 0xffff calling host_->on_state with DEREGISTERED

困扰了好久~~~~~~~~ 

2. vsomeip 2.10.21版本  

export COMMONAPI_CONFIG=/etc/commonapi.ini
export LD_LIBRARY_PATH=/sdcard/someip:$LD_LIBRARY_PATH
export PATH=/sdcard/someip:$PATH
export VSOMEIP_CONFIGURATION=/etc/vsomeip-service.json
export VSOMEIP_APPLICATION_NAME=hello_world_service

2.1 192.168.1.1网段

export VSOMEIP_APPLICATION_NAME=hello_world_service

# ./hello_world_service
1970-01-01 01:42:17.065471 [info] Parsed vsomeip configuration in 15ms
1970-01-01 01:42:17.067471 [info] Using configuration file: "/etc/vsomeip-service.json".
1970-01-01 01:42:17.068471 [info] Default configuration module loaded.
1970-01-01 01:42:17.068471 [info] Initializing vsomeip application "hello_world_service".
1970-01-01 01:42:17.069471 [warning] Routing Manager seems to be inactive. Taking over...
1970-01-01 01:42:17.073471 [info] SOME/IP client identifier configured. Using 100b (was: 1000)
1970-01-01 01:42:17.074471 [info] Instantiating routing manager [Host].
1970-01-01 01:42:17.075471 [info] init_routing_endpoint Routing endpoint at /tmp/vsomeip-0
1970-01-01 01:42:17.079471 [error] Server endpoint creation failed (3)
1970-01-01 01:42:17.079471 [error] routing_manager_stub::init_routing_endpoint Client ID: 0 Path: /tmp/vsomeip-0 Reason: acceptor bind: Permission denied
1970-01-01 01:42:17.079471 [info] Client [100b] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 01:42:17.079471 [info] Service Discovery enabled. Trying to load module.
1970-01-01 01:42:17.087471 [info] Service Discovery module loaded.
1970-01-01 01:42:17.087471 [info] Application(hello_world_service, 100b) is initialized (11, 100).
Successfully Registered Service!
Waiting for calls... (Abort with CTRL+C)
1970-01-01 01:42:17.088471 [info] Starting vsomeip application "hello_world_service" using 2 threads
1970-01-01 01:42:17.088471 [info] main dispatch thread id from application: 100b (hello_world_service) is: 4
1970-01-01 01:42:17.088471 [info] shutdown thread id from application: 100b (hello_world_service) is: 5
1970-01-01 01:42:17.089471 [info] SOME/IP routing ready.
1970-01-01 01:42:17.089471 [info] init_routing_endpoint Routing endpoint at /tmp/vsomeip-0
1970-01-01 01:42:17.091471 [error] Server endpoint creation failed (3)
1970-01-01 01:42:17.091471 [error] routing_manager_stub::init_routing_endpoint Client ID: 0 Path: /tmp/vsomeip-0 Reason: acceptor bind: Permission denied
1970-01-01 01:42:17.091471 [info] Watchdog is disabled!
1970-01-01 01:42:17.091471 [info] io thread id from application: 100b (hello_world_service) is: 3
1970-01-01 01:42:17.091471 [info] io thread id from application: 100b (hello_world_service) is: 7
1970-01-01 01:42:17.091471 [info] vSomeIP 2.10.21 | (default)
1970-01-01 01:42:20.291480 [warning] Releasing client identifier 100a. Its corresponding application went offline while no routing manager was running.
1970-01-01 01:42:20.291480 [info] Application/Client 100a is deregistering.
1970-01-01 01:42:27.094179 [info] vSomeIP 2.10.21 | (default)
1970-01-01 01:42:37.095811 [info] vSomeIP 2.10.21 | (default)
Waiting for calls... (Abort with CTRL+C)
1970-01-01 01:42:47.097257 [info] vSomeIP 2.10.21 | (default)
1970-01-01 01:42:57.098566 [info] vSomeIP 2.10.21 | (default)

上述LOG可以看出,socket bind 权限问题。那么怎么处理?

QNX LOG:

Jan 01 04:28:02.308              io_service.577610              default  14814  io_service[sensors_manager.c:618]: [39]Sensor:PMIC_THERM:43929 mC


Jan 01 04:28:02.704                  npa_drv.32784  npa_hi_rate_logging  16103  qcore:[npa_drv.c:214] io_write: pid=45101, tid=2, ufs_drv:persistent /pmic/client/ufs 2
Jan 01 04:28:02.704                  npa_drv.32784  npa_hi_rate_logging  16103  qcore:[npa_utils.c:282] NPA_CLIENT_REQUIRED 0x23177a2924 2
Jan 01 04:28:02.705                  npa_drv.32784  npa_hi_rate_logging  16103  qcore:[npa_utils.c:284] NPA_CLIENT_REQUIRED 0x23177a2924 DONE
Jan 01 04:28:02.822           devnp_emac_eth.45081                 emac*     2  emac_start: Link is not UP
Jan 01 04:28:02.825                  dumper.680003                 slog*     0  run fault pid 2977857 tid 1 signal 11 code 1 ip 0x155ccca794 ./hello_world_service
Jan 01 04:28:02.542           secpolgenerate.20487                 info*     0  io-pkt-v6-hc (pid:45081 type:io_pkt_v6_hc_t) failed to attach to path /tmp/vsomeip-0: no rule
Jan 01 04:28:02.564           secpolgenerate.20487                 info      0  io-pkt-v6-hc (pid:45081 type:io_pkt_v6_hc_t) failed to attach to path /tmp/vsomeip-1003: no rule
Jan 01 04:28:02.565           secpolgenerate.20487                 info      0  io-pkt-v6-hc (pid:45081 type:io_pkt_v6_hc_t) failed to attach to path /tmp/vsomeip-0: no rule
Jan 01 04:28:03.213              io_service.577610              default  14814  io_service[sensors_manager.c:618]: [40]Sensor:PMIC_THERM2:44190 mC


Jan 01 04:28:03.218               display.45084..0                   HI  10256  [20][wfdSetPipelineAttribiv:2111] DESTINATION_RECTANGLE (x=960 y=0 w=128 h=128), layer_id=8
Jan 01 04:28:03.311              io_service.577610              default  14814  io_service[sensors_manager.c:618]: [39]Sensor:PMIC_THERM:44321 mC


Jan 01 04:28:03.400                  dumper.680003                 slog      0  pid 2977857 core file created at /var/log/hello_world_service.core
Jan 01 04:28:04.071                  npa_drv.32784  npa_hi_rate_logging  16103  qcore:[npa_drv.c:428] DCMD_NPA_ISSUE_REQUIRED_REQUEST client=0x2317732154, pid=32781, tid=1
Jan 01 04:28:04.135                  npa_drv.32784  npa_hi_rate_logging  16103  qcore:[npa_drv.c:428] DCMD_NPA_ISSUE_REQUIRED_REQUEST client=0x2317732154, pid=32781, tid=7
Jan 01 04:28:04.216              io_service.577610              default  14814  io_service[sensors_manager.c:618]: [40]Sensor:PMIC_THERM2:44287 mC


Jan 01 04:28:04.265           devnp_emac_eth.45081                 emac      2  emac_start: Link is not UP
Jan 01 04:28:04.314              io_service.577610              default  14814  io_service[sensors_manager.c:618]: [39]Sensor:PMIC_THERM:44223 mC


Jan 01 04:28:04.826                  npa_drv.32784  npa_hi_rate_logging  16103  qcore:[npa_drv.c:214] io_write: pid=45101, tid=2, ufs_drv:persistent /pmic/client/ufs 1
Jan 01 04:28:04.826                  npa_drv.32784  npa_hi_rate_logging  16103  qcore:[npa_utils.c:282] NPA_CLIENT_REQUIRED 0x23177a2924 1
Jan 01 04:28:04.826                  npa_drv.32784  npa_hi_rate_logging  16103  qcore:[npa_utils.c:284] NPA_CLIENT_REQUIRED 0x23177a2924 DONE
Jan 01 04:28:05.218              io_service.577610              default  14814  io_service[sensors_manager.c:618]: [40]Sensor:PMIC_THERM2:44385 mC


Jan 01 04:28:05.252               display.45084..0                   HI  10256  [20][wfdSetPipelineAttribiv:2111] DESTINATION_RECTANGLE (x=896 y=0 w=128 h=128), layer_id=8
Jan 01 04:28:05.317              io_service.577610              default  14814  io_service[sensors_manager.c:618]: [39]Sensor:PMIC_THERM:44158 mC


Jan 01 04:28:05.392                 watchdog.32777              default  16024  watchdog[watchdog.c:427]: lowpriowd alive

通过io-pkt-v6-hc 对hello_world_service进行网络授权://192.168.1.1 

#io-pkt-v6-hc -ptcpip stacksize=8192,prefix=/alt
#SOCK=/alt /sdcard/someip/hello_world_service

1970-01-01 00:03:05.034710 [info] Parsed vsomeip configuration in 13ms
1970-01-01 00:03:05.036710 [info] Using configuration file: "/etc/vsomeip-service-ip.json".
1970-01-01 00:03:05.037710 [info] Default configuration module loaded.
1970-01-01 00:03:05.037710 [info] Initializing vsomeip application "hello_world_service".
1970-01-01 00:03:05.038710 [info] SOME/IP client identifier configured. Using 1001 (was: 1000)
1970-01-01 00:03:05.038710 [info] Instantiating routing manager [Host].
1970-01-01 00:03:05.039710 [info] init_routing_endpoint Routing endpoint at /tmp/vsomeip-0
1970-01-01 00:03:05.040710 [info] Listening at /tmp/vsomeip-0
1970-01-01 00:03:05.040710 [info] Client [1001] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 00:03:05.040710 [info] Service Discovery enabled. Trying to load module.
1970-01-01 00:03:05.049710 [info] Service Discovery module loaded.
1970-01-01 00:03:05.049710 [info] Application(hello_world_service, 1001) is initialized (11, 100).
1970-01-01 00:03:05.050710 [info] OFFER(1001): [3adc.65d4:1.0]
1970-01-01 00:03:05.050710 [info] Starting vsomeip application "hello_world_service" using 2 threads
1970-01-01 00:03:05.050710 [info] main dispatch thread id from application: 1001 (hello_world_service) is: 4
1970-01-01 00:03:05.051710 [info] shutdown thread id from application: 1001 (hello_world_service) is: 5
Successfully Registered Service!
Waiting for calls... (Abort with CTRL+C)
1970-01-01 00:03:05.067710 [error] Server endpoint creation failed (3)
1970-01-01 00:03:05.067710 [error] outbound interface option IPv4: Can't assign requested address
1970-01-01 00:03:05.067710 [error] Service Discovery endpoint could not be created. Please check your network configuration.
1970-01-01 00:03:05.067710 [error] Couldn't start service discovery
1970-01-01 00:03:05.068710 [error] Server endpoint creation failed (3)
1970-01-01 00:03:05.068710 [error] acceptor bind: Can't assign requested address
1970-01-01 00:03:05.069710 [error] Server endpoint creation failed (3)
1970-01-01 00:03:05.069710 [error] outbound interface option IPv4: Can't assign requested address
1970-01-01 00:03:05.069710 [info] SOME/IP routing ready.
1970-01-01 00:03:05.069710 [info] Watchdog is disabled!
1970-01-01 00:03:05.070710 [info] io thread id from application: 1001 (hello_world_service) is: 3
1970-01-01 00:03:05.070710 [info] vSomeIP 2.10.21 | (default)
1970-01-01 00:03:05.070710 [info] io thread id from application: 1001 (hello_world_service) is: 7

1). outbound interface option IPv4: Can't assign requested address  错误提示修改:

routing_manager_impl.cpp 中

#if defined(_WIN32) 
                if (its_unicast.is_v4()) {
                    its_unicast = boost::asio::ip::address_v4::any();
                } else if (its_unicast.is_v6()) {
                    its_unicast = boost::asio::ip::address_v6::any();
                }
#endif

该段代码在QNX运行存在问题,192.168.1.1 最后得到的its_unicast 为0.0.0.0

所以改为:

#if !defined(_WIN32) && !defined(__QNX__)
                if (its_unicast.is_v4()) {
                    its_unicast = boost::asio::ip::address_v4::any();
                } else if (its_unicast.is_v6()) {
                    its_unicast = boost::asio::ip::address_v6::any();
                }
#endif

修改后运行

Successfully Registered Service!
Waiting for calls... (Abort with CTRL+C)
1970-01-01 00:37:09.920177 [error] Server endpoint creation failed (3)
1970-01-01 00:37:09.920177 [error] bind: Can't assign requested address
1970-01-01 00:37:09.921177 [error] Service Discovery endpoint could not be created. Please check your network configuration.
1970-01-01 00:37:09.921177 [error] Couldn't start service discovery
1970-01-01 00:37:09.921177 [info] create_server_endpoint:  _port:30509 _reliable:false _start:true
1970-01-01 00:37:09.921177 [info] create_server_endpoint:  its_unicast:192.168.1.1
1970-01-01 00:37:09.921177 [info] create_server_endpoint:  new its_unicast:192.168.1.1
1970-01-01 00:37:09.921177 [info] enter -> server_endpoint_impl
1970-01-01 00:37:09.922177 [info] enter -> udp_server_endpoint_impl
1970-01-01 00:37:09.922177 [error] Server endpoint creation failed (3)
1970-01-01 00:37:09.923177 [error] bind: Can't assign requested address

bind 失败怎么处理?

测试指定网卡bind://emac0,lo0,vp0

添加code

	struct ifreq nif;
    std::string its_device = "emac0";
	strcpy(nif.ifr_name, its_device.c_str());
    if (its_device != "") {
        if (setsockopt(socket_.native_handle(),
                SOL_SOCKET, SO_BINDTODEVICE, (char *)&nif, (int)sizeof(nif)) == -1) {
            VSOMEIP_WARNING << "UDP Server: Could not bind to device \"" << its_device << "\"";
        }
    }
	std::string its_device2 = "lo0";
	strcpy(nif.ifr_name, its_device2.c_str());
    if (its_device2 != "") {
        if (setsockopt(socket_.native_handle(),
                SOL_SOCKET, SO_BINDTODEVICE, (char *)&nif, (int)sizeof(nif)) == -1) {
            VSOMEIP_WARNING << "UDP Server: Could not bind to device2 \"" << its_device2 << "\"";
        }
    }

	std::string its_device3 = "vp0";
	strcpy(nif.ifr_name, its_device3.c_str());
    if (its_device3 != "") {
        if (setsockopt(socket_.native_handle(),
                SOL_SOCKET, SO_BINDTODEVICE, (char *)&nif, (int)sizeof(nif)) == -1) {
            VSOMEIP_WARNING << "UDP Server: Could not bind to device3 \"" << its_device3 << "\"";
        }
    }

测试结果: lo0 本地127.0.0.1 可以bind

1970-01-01 03:01:05.374723 [warning] UDP Server: Could not bind to device "emac0"
1970-01-01 03:01:05.374723 [warning] UDP Server: Could not bind to device3 "vp0"
Successfully Registered Service!
Waiting for calls... (Abort with CTRL+C)
1970-01-01 03:01:05.395723 [error] Server endpoint creation failed (3)
1970-01-01 03:01:05.395723 [error] bind: Can't assign requested address

那么为什么emac0 以及 vp0网络不行?

查看netstat

# SOCK=/alt ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33136
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1

原来/alt 网络只有lo0,是这么个原因。

那么怎么添加emac0 以及 vp0网络呢?

答案

添加vp0网卡到 /alt

SOCK=/alt mount -T io-pkt -o peer=/dev/qvm/la/la_to_host,bind=/dev/vdevpeer/vp0,mac=aaaaaaaaaaaa,mode=0660 /lib/dll/devnp-vdevpeer-net.so

添加后,查看 SOCK=/alt网络信息

# SOCK=/alt ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33136
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
vp0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
        capabilities rx=1f<IP4CSUM,TCP4CSUM,UDP4CSUM,TCP6CSUM,UDP6CSUM>
        capabilities tx=7e<TCP4CSUM,UDP4CSUM,TCP6CSUM,UDP6CSUM,TSO4,TSO6>
        enabled rx=1f<IP4CSUM,TCP4CSUM,UDP4CSUM,TCP6CSUM,UDP6CSUM>
        enabled tx=0
        address: aa:aa:aa:aa:aa:aa
        media: Ethernet autoselect
        status: active

修改VP0 IP地址,添加route 然后重新测试

# SOCK=/alt ifconfig vp0 192.168.1.1

# SOCK=/alt route -n add 224.244.224.245 192.168.1.255

# SOCK=/alt hello_world_service
1970-01-01 00:05:26.248831 [info] Parsed vsomeip configuration in 16ms
1970-01-01 00:05:26.249831 [info] Using configuration file: "/etc/vsomeip-service-ip.json".
1970-01-01 00:05:26.250831 [info] Default configuration module loaded.
1970-01-01 00:05:26.250831 [info] Initializing vsomeip application "hello_world_service".
1970-01-01 00:05:26.252831 [info] SOME/IP client identifier configured. Using 1003 (was: 1000)
1970-01-01 00:05:26.252831 [info] Instantiating routing manager [Host].
1970-01-01 00:05:26.252831 [info] enter -> routing_manager_stub
1970-01-01 00:05:26.253831 [info] init_routing_endpoint Routing endpoint at /tmp/vsomeip-0
1970-01-01 00:05:26.253831 [info] enter -> server_endpoint_impl
1970-01-01 00:05:26.253831 [info] local_server_endpoint_impl: path:/tmp/vsomeip-0
1970-01-01 00:05:26.254831 [info] Listening at /tmp/vsomeip-0
1970-01-01 00:05:26.254831 [info] Client [1003] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 00:05:26.254831 [info] Service Discovery enabled. Trying to load module.
1970-01-01 00:05:26.263831 [info] Service Discovery module loaded.
1970-01-01 00:05:26.263831 [info] Application(hello_world_service, 1003) is initialized (11, 100).
1970-01-01 00:05:26.264831 [info] OFFER(1003): [3adc.65d4:1.0]
1970-01-01 00:05:26.264831 [info] Starting vsomeip application "hello_world_service" using 2 threads
1970-01-01 00:05:26.264831 [info] main dispatch thread id from application: 1003 (hello_world_service) is: 4
1970-01-01 00:05:26.265831 [info] create_server_endpoint:  _port:30490 _reliable:false _start:true
1970-01-01 00:05:26.265831 [info] shutdown thread id from application: 1003 (hello_world_service) is: 5
1970-01-01 00:05:26.265831 [info] create_server_endpoint:  its_unicast:192.168.1.1
1970-01-01 00:05:26.265831 [info] enter -> server_endpoint_impl
1970-01-01 00:05:26.265831 [info] create_server_endpoint:  target its_unicast:192.168.1.1
1970-01-01 00:05:26.265831 [info] local_server_endpoint_impl: path:/tmp/vsomeip-1003
1970-01-01 00:05:26.265831 [info] enter -> server_endpoint_impl
1970-01-01 00:05:26.266831 [info] enter -> udp_server_endpoint_impl
1970-01-01 00:05:26.266831 [info] udp_server_endpoint_impl: address:192.168.1.1 port:30490
1970-01-01 00:05:26.267831 [info] udp_server_endpoint_impl: its_unicast_address:192.168.1.1
Successfully Registered Service!
Waiting for calls... (Abort with CTRL+C)
1970-01-01 00:05:26.267831 [info] address:192.168.1.1 _address:224.244.224.245  _address.to_v4():224.244.224.245
1970-01-01 00:05:26.268831 [info] create_server_endpoint:  _port:30509 _reliable:false _start:true
1970-01-01 00:05:26.268831 [info] create_server_endpoint:  its_unicast:192.168.1.1
1970-01-01 00:05:26.269831 [info] create_server_endpoint:  target its_unicast:192.168.1.1
1970-01-01 00:05:26.269831 [info] enter -> server_endpoint_impl
1970-01-01 00:05:26.269831 [info] enter -> udp_server_endpoint_impl
1970-01-01 00:05:26.269831 [info] udp_server_endpoint_impl: address:192.168.1.1 port:30509
1970-01-01 00:05:26.269831 [info] udp_server_endpoint_impl: its_unicast_address:192.168.1.1
1970-01-01 00:05:26.269831 [info] SOME/IP routing ready.
1970-01-01 00:05:26.269831 [info] Watchdog is disabled!
1970-01-01 00:05:26.270831 [info] io thread id from application: 1003 (hello_world_service) is: 3
1970-01-01 00:05:26.270831 [info] io thread id from application: 1003 (hello_world_service) is: 7
1970-01-01 00:05:26.270831 [info] vSomeIP 2.10.21 | (default)

如上LOG,运行OK!!!!! 

2.2 本地127.0.0.1网络

切换本地127.0.0.1网络,运行:

# route -n add 224.244.224.245 127.0.0.255
add host 224.244.224.245: gateway 127.0.0.255
#
#
#
# SOCK=/tmp/somip-tcp hello_world_service
1970-01-01 01:07:55.697700 [info] Parsed vsomeip configuration in 12ms
1970-01-01 01:07:55.698700 [info] Using configuration file: "/etc/vsomeip-service.json".
1970-01-01 01:07:55.699700 [info] Default configuration module loaded.
1970-01-01 01:07:55.699700 [info] Initializing vsomeip application "hello_world_service".
1970-01-01 01:07:55.700700 [info] SOME/IP client identifier configured. Using 1001 (was: 1000)
1970-01-01 01:07:55.700700 [info] Instantiating routing manager [Host].
1970-01-01 01:07:55.701700 [info] init_routing_endpoint Routing endpoint at /tmp/vsomeip-0
1970-01-01 01:07:55.703700 [info] Listening at /tmp/vsomeip-0
1970-01-01 01:07:55.703700 [info] Client [1001] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 01:07:55.703700 [info] Service Discovery enabled. Trying to load module.
1970-01-01 01:07:55.711700 [info] Service Discovery module loaded.
1970-01-01 01:07:55.711700 [info] Application(hello_world_service, 1001) is initialized (11, 100).
1970-01-01 01:07:55.711700 [info] Starting vsomeip application "hello_world_service" using 2 threads
1970-01-01 01:07:55.712700 [info] main dispatch thread id from application: 1001 (hello_world_service) is: 4
1970-01-01 01:07:55.712700 [info] OFFER(1001): [3adc.65d4:1.0]
1970-01-01 01:07:55.712700 [info] shutdown thread id from application: 1001 (hello_world_service) is: 5
1970-01-01 01:07:55.726700 [error] udp_server_endpoint_impl::join:set_option: Can't assign requested address
1970-01-01 01:07:55.726700 [info] SOME/IP routing ready.
1970-01-01 01:07:55.726700 [info] Watchdog is disabled!
1970-01-01 01:07:55.727700 [info] io thread id from application: 1001 (hello_world_service) is: 3
1970-01-01 01:07:55.727700 [info] io thread id from application: 1001 (hello_world_service) is: 7
1970-01-01 01:07:55.727700 [info] vSomeIP 2.10.21 | (default)
Successfully Registered Service!
Waiting for calls... (Abort with CTRL+C)

提示错误原因是没有设置route [SCCK route]

# SOCK=/alt netstat -r
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use    Mtu  Interface
127.0.0.1          127.0.0.1          UH          0        0  33136  lo0

Internet6:
Destination        Gateway            Flags    Refs      Use    Mtu  Interface
::1                ::1                UH          0        0  33136  lo0
fe80::%lo0/64      fe80::1%lo0        U           0        0      -  lo0
fe80::1%lo0        link#1             UHL         0        0      -  lo0
ff01:1::/32        ::1                UC          0        0  33136  lo0
ff02::%lo0/32      ::1                UC          0        0  33136  lo0

添加SOCK=/alt route支持

# SOCK=/alt route -n add 224.244.224.245 127.0.0.255
add host 224.244.224.245: gateway 127.0.0.255
#
#
# SOCK=/alt netstat -r
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use    Mtu  Interface
127.0.0.1          127.0.0.1          UH          0       48  33136  lo0
224.244.224.245    127.0.0.255        UGHS        0        0  33136  lo0

Internet6:
Destination        Gateway            Flags    Refs      Use    Mtu  Interface
::1                ::1                UH          0        0  33136  lo0
fe80::%lo0/64      fe80::1%lo0        U           0        0      -  lo0
fe80::1%lo0        link#1             UHL         0        0      -  lo0
ff01:1::/32        ::1                UC          0        0  33136  lo0
ff02::%lo0/32      ::1                UC          0        0  33136  lo0
#

 >>>>继续在127.0.0.1网段测试

LOG信息如下:

# SOCK=/alt hello_world_service
1970-01-01 01:01:55.710750 [info] Parsed vsomeip configuration in 9ms
1970-01-01 01:01:55.711750 [info] Using configuration file: "/etc/vsomeip-service.json".
1970-01-01 01:01:55.712750 [info] Default configuration module loaded.
1970-01-01 01:01:55.712750 [info] Initializing vsomeip application "hello_world_service".
1970-01-01 01:01:55.713750 [info] SOME/IP client identifier configured. Using 1001 (was: 1000)
1970-01-01 01:01:55.713750 [info] Instantiating routing manager [Host].
1970-01-01 01:01:55.713750 [info] enter -> routing_manager_stub
1970-01-01 01:01:55.713750 [info] init_routing_endpoint Routing endpoint at /tmp/vsomeip-0
1970-01-01 01:01:55.714750 [info] enter -> server_endpoint_impl
1970-01-01 01:01:55.714750 [info] local_server_endpoint_impl: path:/tmp/vsomeip-0
1970-01-01 01:01:55.715750 [info] Listening at /tmp/vsomeip-0
1970-01-01 01:01:55.715750 [info] Client [1001] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 01:01:55.715750 [info] Service Discovery enabled. Trying to load module.
1970-01-01 01:01:55.727750 [info] Service Discovery module loaded.
1970-01-01 01:01:55.727750 [info] Application(hello_world_service, 1001) is initialized (11, 100).
1970-01-01 01:01:55.728750 [info] Starting vsomeip application "hello_world_service" using 2 threads
1970-01-01 01:01:55.728750 [info] OFFER(1001): [3adc.65d4:1.0]
1970-01-01 01:01:55.728750 [info] main dispatch thread id from application: 1001 (hello_world_service) is: 4
1970-01-01 01:01:55.728750 [info] create_server_endpoint:  _port:30490 _reliable:false _start:true
1970-01-01 01:01:55.728750 [info] shutdown thread id from application: 1001 (hello_world_service) is: 5
1970-01-01 01:01:55.728750 [info] create_server_endpoint:  its_unicast:127.0.0.1
1970-01-01 01:01:55.729750 [info] create_server_endpoint:  target its_unicast:127.0.0.1
1970-01-01 01:01:55.729750 [info] enter -> server_endpoint_impl
1970-01-01 01:01:55.729750 [info] enter -> server_endpoint_impl
1970-01-01 01:01:55.729750 [info] enter -> udp_server_endpoint_impl
1970-01-01 01:01:55.729750 [info] local_server_endpoint_impl: path:/tmp/vsomeip-1001
1970-01-01 01:01:55.729750 [info] udp_server_endpoint_impl: address:127.0.0.1 port:30490
1970-01-01 01:01:55.730750 [info] udp_server_endpoint_impl: its_unicast_address:127.0.0.1
1970-01-01 01:01:55.730750 [info] address:127.0.0.1 _address:224.244.224.245  _address.to_v4():224.244.224.245
1970-01-01 01:01:55.730750 [info] create_server_endpoint:  _port:30509 _reliable:false _start:true
1970-01-01 01:01:55.730750 [info] create_server_endpoint:  its_unicast:127.0.0.1
Successfully Registered Service!
1970-01-01 01:01:55.731750 [info] create_server_endpoint:  target its_unicast:127.0.0.1Waiting for calls... (Abort with CTRL+C)

1970-01-01 01:01:55.731750 [info] enter -> server_endpoint_impl
1970-01-01 01:01:55.731750 [info] enter -> udp_server_endpoint_impl
1970-01-01 01:01:55.731750 [info] udp_server_endpoint_impl: address:127.0.0.1 port:30509
1970-01-01 01:01:55.731750 [info] udp_server_endpoint_impl: its_unicast_address:127.0.0.1
1970-01-01 01:01:55.731750 [info] SOME/IP routing ready.
1970-01-01 01:01:55.731750 [info] Watchdog is disabled!
1970-01-01 01:01:55.732750 [info] io thread id from application: 1001 (hello_world_service) is: 3
1970-01-01 01:01:55.732750 [info] io thread id from application: 1001 (hello_world_service) is: 7
1970-01-01 01:01:55.732750 [info] vSomeIP 2.10.21 | (default)

如上log可以看出,someip测试服务运行OK。

2.3  仅127.0.0.1网段

清除emac网卡

io-pkt-v6-hc -i1 -ptcpip

添加本地route

route -n add 224.244.224.245 127.0.0.255

修改vsomeip-service.json 配置 

运行QNX测试程序: 

# ./hello_world_service &
[1] 1077288
# 1970-01-01 00:06:53.924619 [info] Parsed vsomeip configuration in 14ms
1970-01-01 00:06:53.925619 [info] Using configuration file: "/etc/vsomeip-service.json".
1970-01-01 00:06:53.926619 [info] Default configuration module loaded.
1970-01-01 00:06:53.926619 [info] Initializing vsomeip application "hello_world_service".
1970-01-01 00:06:53.927619 [info] SOME/IP client identifier configured. Using 1001 (was: 1000)
1970-01-01 00:06:53.927619 [info] Instantiating routing manager [Host].
1970-01-01 00:06:53.928619 [info] init_routing_endpoint Routing endpoint at /tmp/vsomeip-0
1970-01-01 00:06:53.931619 [info] Listening at /tmp/vsomeip-0
1970-01-01 00:06:53.931619 [info] Client [1001] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 00:06:53.931619 [info] Service Discovery enabled. Trying to load module.
1970-01-01 00:06:53.942619 [info] Service Discovery module loaded.
1970-01-01 00:06:53.942619 [info] Application(hello_world_service, 1001) is initialized (11, 100).
1970-01-01 00:06:53.943619 [info] Starting vsomeip application "hello_world_service" using 2 threads
1970-01-01 00:06:53.943619 [info] main dispatch thread id from application: 1001 (hello_world_service) is: 4
1970-01-01 00:06:53.943619 [info] OFFER(1001): [3adc.65d4:1.0]
1970-01-01 00:06:53.943619 [info] shutdown thread id from application: 1001 (hello_world_service) is: 5
1970-01-01 00:06:53.944619 [info] SOME/IP routing ready.
1970-01-01 00:06:53.944619 [info] Watchdog is disabled!
1970-01-01 00:06:53.945619 [info] io thread id from application: 1001 (hello_world_service) is: 7
1970-01-01 00:06:53.945619 [info] io thread id from application: 1001 (hello_world_service) is: 3
1970-01-01 00:06:53.945619 [info] vSomeIP 2.10.21 | (default)
Successfully Registered Service!
Waiting for calls... (Abort with CTRL+C)

#
#
#
#
# 1970-01-01 00:07:03.947413 [info] vSomeIP 2.10.21 | (default)

#
#
# export VSOMEIP_APPLICATION_NAME=hello_world_client
#
#
# 1970-01-01 00:07:13.948714 [info] vSomeIP 2.10.21 | (default)
./hello_world_client
1970-01-01 00:07:16.782683 [info] Parsed vsomeip configuration in 11ms
1970-01-01 00:07:16.783683 [info] Using configuration file: "/etc/vsomeip-service.json".
1970-01-01 00:07:16.784683 [info] Default configuration module loaded.
1970-01-01 00:07:16.784683 [info] Initializing vsomeip application "hello_world_client".
1970-01-01 00:07:16.785683 [info] SOME/IP client identifier configured. Using 2000 (was: 2000)
1970-01-01 00:07:16.785683 [info] Instantiating routing manager [Proxy].
1970-01-01 00:07:16.785683 [info] Client [2000] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 00:07:16.787683 [info] Listening at /tmp/vsomeip-2000
1970-01-01 00:07:16.787683 [info] Application(hello_world_client, 2000) is initialized (11, 100).
1970-01-01 00:07:16.788683 [info] Starting vsomeip application "hello_world_client" using 2 threads
Checking availability!
1970-01-01 00:07:16.789683 [info] main dispatch thread id from application: 2000 (hello_world_client) is: 4
1970-01-01 00:07:16.789683 [info] shutdown thread id from application: 2000 (hello_world_client) is: 5
1970-01-01 00:07:16.789683 [info] io thread id from application: 2000 (hello_world_client) is: 3
1970-01-01 00:07:16.790683 [info] io thread id from application: 2000 (hello_world_client) is: 6
1970-01-01 00:07:16.790683 [info] Client 2000 successfully connected to routing  ~> registering..
1970-01-01 00:07:16.791683 [info] Application/Client 2000 is registering.
1970-01-01 00:07:16.791683 [info] Client [1001] is connecting to [2000] at /tmp/vsomeip-2000
1970-01-01 00:07:16.793683 [info] Application/Client 2000 is registered.
1970-01-01 00:07:16.794683 [info] REGISTERED_ACK(2000)
1970-01-01 00:07:16.799683 [info] REQUEST(2000): [3adc.65d4:1.4294967295]
1970-01-01 00:07:16.800683 [info] ON_AVAILABLE(2000): [3adc.65d4:1.0]
Available...
Enter number 1: Waiting for calls... (Abort with CTRL+C)

综上,未发现routing 错误,以及socket bind问题; 可以判断,上述2.1 someip 在QNX环境运行跟网络配置关系很大。

※错误信息及解决:

1970-01-01 00:14:11.374271 [error] udp_server_endpoint_impl::join:set_option: Can't assign requested address
※解决:添加route:  route -n add 224.244.224.245 127.0.0.255

                               SOCK=/alt route -n add 224.244.224.245 127.0.0.255

2.3 程序名称与配置文件名称匹配问题

2.10.21 版本,配置文件service 以及 route name 与实际运行的程序名称不一致时会出现与3.1.20类似的问题:routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED

export VSOMEIP_APPLICATION_NAME=HelloWorldSomeIPService

# ./HelloWorldSomeIPService
1970-01-01 01:15:59.927933 [info] Parsed vsomeip configuration in 14ms
1970-01-01 01:15:59.928933 [info] Using configuration file: "/etc/vsomeip-service.json".
1970-01-01 01:15:59.929933 [info] Default configuration module loaded.
1970-01-01 01:15:59.930933 [info] Initializing vsomeip application "HelloWorldSomeIPService".
1970-01-01 01:15:59.931933 [info] SOME/IP client identifier configured. Using 1007 (was: 0000)
1970-01-01 01:15:59.931933 [info] Instantiating routing manager [Proxy].
1970-01-01 01:15:59.931933 [info] Client [1007] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 01:15:59.937933 [error] Server endpoint creation failed (3)
1970-01-01 01:15:59.937933 [error] Client ID: 1007: acceptor bind: Permission denied
1970-01-01 01:15:59.937933 [info] Application(HelloWorldSomeIPService, 1007) is initialized (11, 100).
Successfully Registered Service!
1970-01-01 01:15:59.937933 [info] Starting vsomeip application "HelloWorldSomeIPService" using 2 threadsWaiting for calls... (Abort with CTRL+C)

1970-01-01 01:15:59.937933 [info] main dispatch thread id from application: 1007 (HelloWorldSomeIPService) is: 4
1970-01-01 01:15:59.937933 [info] shutdown thread id from application: 1007 (HelloWorldSomeIPService) is: 5
1970-01-01 01:15:59.940933 [error] Server endpoint creation failed (3)
1970-01-01 01:15:59.940933 [error] Client ID: 1007: acceptor bind: Permission denied
1970-01-01 01:15:59.940933 [info] io thread id from application: 1007 (HelloWorldSomeIPService) is: 6
1970-01-01 01:15:59.940933 [info] io thread id from application: 1007 (HelloWorldSomeIPService) is: 3
1970-01-01 01:15:59.941933 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:00.043602 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:00.245036 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:00.646979 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:01.447985 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:03.048993 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:04.650002 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:06.251906 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:07.853345 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:09.454760 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:11.055769 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:12.657247 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:14.258393 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED
1970-01-01 01:16:15.859996 [info] routing_manager_proxy::on_disconnect: Client 0x1007 calling host_->on_state with DEREGISTERED

 

3. vsomeip 2.5.2版本  

环境配置:

export COMMONAPI_CONFIG=/etc/commonapi.ini
export LD_LIBRARY_PATH=/sdcard/someip:$LD_LIBRARY_PATH
export PATH=/sdcard/someip:$PATH
export VSOMEIP_CONFIGURATION=/etc/vsomeip-service.json
export VSOMEIP_APPLICATION_NAME=hello_world_service

route add -net 224.0.0.0/4 default

3.1 本地local  127.0.0.1

vsomeip-service.json:

{
        "unicast" : "127.0.0.1",
        "logging" :
        {
                "level" : "debug",
                "console" : "true",
                "file" : { "enable" : "false", "path" : "/tmp/vsomeip.log" },
                "dlt" : "false"
        },
        "applications" :
        [
                {
                        "name" : "hello_world_service",
                        "id" : "0x1000"
                },

                {
                        "name" : "hello_world_client",
                        "id" : "0x2000"
                }
        ],
        "services" :
        [
                {
                        "service" : "15068",
                        "instance" : "26068",
                        "unreliable" : "30509"
                }
        ],
        "routing" : "hello_world_service",
        "service-discovery" :
        {
                "enable" : "true",
                "multicast" : "224.244.224.245",
                "port" : "30490",
                "protocol" : "udp",
                "initial_delay_min" : "10",
                "initial_delay_max" : "100",
                "repetitions_base_delay" : "200",
                "repetitions_max" : "3",
                "ttl" : "3",
                "cyclic_offer_delay" : "2000",
                "request_response_delay" : "1500"
        }
}

net授权运行server:

io-pkt-v6-hc -i1 -ptcpip prefix=/tmp/somip-tcp
SOCK=/tmp/somip-tcp hello_world_service

# SOCK=/tmp/somip-tcp /sdcard/someip/hello_world_service &
[1] 1470504
# 1970-01-01 00:47:05.235784 [info] Default configuration module loaded.
1970-01-01 00:47:05.236784 [info] Initializing vsomeip application "hello_world_service".
1970-01-01 00:47:05.237784 [info] SOME/IP client identifier configured. Using 1001 (was: 1000)
1970-01-01 00:47:05.237784 [info] Instantiating routing manager [Host].
1970-01-01 00:47:05.237784 [info] init_routing_endpoint Routing endpoint at /tmp/vsomeip-0
1970-01-01 00:47:05.238784 [info] Client [1001] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 00:47:05.239784 [info] enter -> local_client_endpoint_impl
1970-01-01 00:47:05.239784 [info] Service Discovery enabled. Trying to load module.
1970-01-01 00:47:05.243784 [info] Service Discovery module loaded.
1970-01-01 00:47:05.243784 [info] Application(hello_world_service, 1001) is initialized (11, 100).
1970-01-01 00:47:05.244784 [info] OFFER(1001): [3adc.65d4:1.0]
1970-01-01 00:47:05.244784 [info] Starting vsomeip application "hello_world_service" using 2 threads
1970-01-01 00:47:05.244784 [info] enter -> udp_server_endpoint_impl
Successfully Registered Service!
Waiting for calls... (Abort with CTRL+C)
1970-01-01 00:47:05.253784 [error] set_option: Can't assign requested address
1970-01-01 00:47:05.254784 [info] enter -> udp_server_endpoint_impl
1970-01-01 00:47:05.254784 [info] Watchdog is disabled!
1970-01-01 00:47:05.254784 [info] vSomeIP 2.5.2

第一次 udp_server_endpoint_impl set_option 错误,第二次udp_server_endpoint_impl 未有异常。

运行client:

export VSOMEIP_APPLICATION_NAME=hello_world_client

 
# export VSOMEIP_APPLICATION_NAME=hello_world_client
#
# SOCK=/tmp/somip-tcp /sdcard/someip/hello_world_client
1970-01-01 00:49:04.101359 [info] Default configuration module loaded.
1970-01-01 00:49:04.101359 [info] Initializing vsomeip application "hello_world_client".
1970-01-01 00:49:04.102359 [info] SOME/IP client identifier configured. Using 2000 (was: 2000)
1970-01-01 00:49:04.102359 [info] Instantiating routing manager [Proxy].
1970-01-01 00:49:04.102359 [info] Client [2000] is connecting to [0] at /tmp/vsomeip-0
1970-01-01 00:49:04.102359 [info] enter -> local_client_endpoint_impl
1970-01-01 00:49:04.104359 [info] Listening at /tmp/vsomeip-2000
1970-01-01 00:49:04.104359 [info] Application(hello_world_client, 2000) is initialized (11, 100).
1970-01-01 00:49:04.105359 [info] Starting vsomeip application "hello_world_client" using 2 threads
Checking availability!
1970-01-01 00:49:04.106359 [info] Client 2000 successfully connected to routing  ~> registering..
1970-01-01 00:49:04.107359 [info] Application/Client 2000 is registering.
1970-01-01 00:49:04.107359 [info] Client [1001] is connecting to [2000] at /tmp/vsomeip-2000
1970-01-01 00:49:04.107359 [info] enter -> local_client_endpoint_impl
1970-01-01 00:49:04.108359 [info] Application/Client 2000 is registered.
1970-01-01 00:49:04.109359 [info] REGISTERED_ACK(2000)
1970-01-01 00:49:04.110359 [info] REQUEST(2000): [3adc.65d4:1.4294967295]
Available...
Enter number 1: Waiting for calls... (Abort with CTRL+C)
1970-01-01 00:49:05.271088 [info] vSomeIP 2.5.2
3
Enter number 2: 2
1970-01-01 00:49:08.211727 [info] Client [2000] is connecting to [1001] at /tmp/vsomeip-1001
1970-01-01 00:49:08.211727 [info] enter -> local_client_endpoint_impl
HelloWorldStubImpl: Service called by ID: 8192
Got average value: '2.5'
Enter number 1: 4
Enter number 2: 2
HelloWorldStubImpl: Service called by ID: 8192
Got average value: '3'

client 跟 service 通讯正常。接口调用OK

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村里小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值