You need to uncomment clib_mem_init
On Fri, 1 Oct 2021 at 10:01, Venumadhav Josyula <[email protected]> wrote:
> Hi Ole,
>
> So instead of the code below, I tried the code from
> "src/vpp-api/client/test.c". I directly copied this into my .c file. And
> following commands i used
>
> compilation + linking : - gcc vpp_api_client_vac_layer.c -o
> vpp_api_client_vac_layer.o -lpthread -lvlibmemoryclient -lvppinfra
> -lvppapiclient -I/usr/include/
> code is below
> #include<stdio.h>
> #include<stdlib.h>
> #include <vnet/vnet.h>
> #include <vlib/vlib.h>
> #include <vlib/unix/unix.h>
> #include <vlibapi/api.h>
> #include <vppinfra/time.h>
> #include <vpp/api/vpe_msg_enum.h>
> #include <signal.h>
>
> #include<vpp-api/client/vppapiclient.h>
> #include<vpp-api/client/stat_client.h>
>
> #define vl_typedefs /* define message structures */
> #include <vpp/api/vpe_all_api_h.h>
> #undef vl_typedefs
>
>
> volatile int sigterm_received = 0;
> volatile u32 result_ready;
> volatile u16 result_msg_id;
>
> /* M_NOALLOC: construct, but don't yet send a message */
>
> #define M_NOALLOC(T,t) \
> do { \
> result_ready = 0; \
> clib_memset (mp, 0, sizeof (*mp)); \
> mp->_vl_msg_id = ntohs (VL_API_##T); \
> mp->client_index = am->my_client_index; \
> } while(0);
>
> void
> wrap_vac_callback (unsigned char *data, int len)
> {
> result_ready = 1;
> result_msg_id = ntohs(*((u16 *)data));
> }
>
> static void
> test_connect ()
> {
> static int i;
> int rv = vac_connect("vac_client", NULL, wrap_vac_callback, 32 /*
> rx queue-length*/);
> if (rv != 0) {
> printf("Connect failed: %d\n", rv);
> exit(rv);
> }
> printf(".");
> vac_disconnect();
> i++;
> }
>
> static void test_messages (void)
> {
> api_main_t * am = vlibapi_get_main();
> vl_api_show_version_t message;
> vl_api_show_version_t *mp;
> int async = 1;
>
> int rv = vac_connect("vac_client", NULL, wrap_vac_callback, 32 /*
> rx queue-length*/);
> if (rv != 0) {
> printf("Connect failed: %d\n", rv);
> exit(rv);
> }
>
> double timestamp_start = unix_time_now_nsec() * 1e-6;
>
> /*
> * Test vpe_api_write and vpe_api_read to send and recv message
> for an
> * API
> */
> int i;
> long int no_msgs = 10000;
> mp = &message;
>
> for (i = 0; i < no_msgs; i++) {
> /* Construct the API message */
> M_NOALLOC(SHOW_VERSION, show_version);
> vac_write((char *)mp, sizeof(*mp));
> #ifndef __COVERITY__
> /* As given, async is always 1. Shut up Coverity about it
> */
> if (!async)
> while (result_ready == 0);
> #endif
> }
> if (async) {
> vl_api_control_ping_t control;
> vl_api_control_ping_t *mp;
> mp = &control;
> M_NOALLOC(CONTROL_PING, control_ping);
> vac_write((char *)mp, sizeof(*mp));
>
> while (result_msg_id != VL_API_CONTROL_PING_REPLY);
> }
>
> double timestamp_end = unix_time_now_nsec() * 1e-6;
> printf("\nTook %.2f msec, %.0f msgs/msec \n", (timestamp_end -
> timestamp_start),
> no_msgs/(timestamp_end - timestamp_start));
> printf("Exiting...\n");
> vac_disconnect();
> }
>
>
> int main (int argc, char ** argv)
> {
> #if 0
> clib_mem_init (0, 3ULL << 30);
> test_stats();
> #endif
>
> int i;
>
> for (i = 0; i < 1000; i++) {
> test_connect();
> }
>
> test_messages();
> exit (0);
> }
>
> It compiled successfully, i got following assert for heap
> [root@8f57181df3a1 vpp_c_api_examples]# gdb ./vpp_api_client_vac_layer.o
> GNU gdb (GDB) Red Hat Enterprise Linux 8.3-3.el7
> Copyright (C) 2019 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <
> http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> Type "show copying" and "show warranty" for details.
> This GDB was configured as "x86_64-redhat-linux-gnu".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <http://www.gnu.org/software/gdb/bugs/>.
> Find the GDB manual and other documentation resources online at:
> <http://www.gnu.org/software/gdb/documentation/>.
>
> For help, type "help".
> Type "apropos word" to search for commands related to "word"...
> Reading symbols from ./vpp_api_client_vac_layer.o...
> (No debugging symbols found in ./vpp_api_client_vac_layer.o)
> (gdb) r
> Starting program: /root/vpp_c_api_examples/vpp_api_client_vac_layer.o
> Missing separate debuginfos, use: debuginfo-install
> glibc-2.17-324.el7_9.x86_64
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib64/libthread_db.so.1".
> vpp_api_client_vac_layer.o:
> /vpp/build-root/rpmbuild/vpp-21.06.0/src/vpp-api/client/client.c:295:
> vac_connect: Assertion `clib_mem_get_heap ()' failed.
>
> Program received signal SIGABRT, Aborted.
> 0x00007ffff7827387 in raise () from /lib64/libc.so.6
> (gdb) bt
> #0 0x00007ffff7827387 in raise () from /lib64/libc.so.6
> #1 0x00007ffff7828a78 in abort () from /lib64/libc.so.6
> #2 0x00007ffff78201a6 in __assert_fail_base () from /lib64/libc.so.6
> #3 0x00007ffff7820252 in __assert_fail () from /lib64/libc.so.6
> #4 0x00007ffff7f57bcd in vac_connect (name=0x402010 "vac_client",
> chroot_prefix=0x0, cb=0x4011d2 <wrap_vac_callback>, rx_qlen=32)
> at /usr/src/debug/vpp-21.06.0/src/vpp-api/client/client.c:314
> #5 0x0000000000401227 in test_connect ()
> #6 0x0000000000401687 in main ()
> (gdb)
>
> Startup.conf
> [root@8f57181df3a1 vpp_c_api_examples]# cat /etc/vpp/startup.conf
> unix {
> #nodaemon
> #interactive
> log /var/log/vpp/vpp.log
> cli-listen /run/vpp/cli.sock
> gid vpp
> #exec /etc/ipsec-setup.txt
> }
>
> cpu {
> main-core 2
> }
>
> dpdk {
> dev default {
> num-rx-desc 512
> num-tx-desc 512
> }
> socket-mem 1024
> dev 0000:00:04.0
> uio-driver uio_pci_generic
> }
>
> logging {
> default-log-level debug
> default-syslog-log-level info
> }
> [root@8f57181df3a1 vpp_c_api_examples]#
> I
> Is there some setting i need to do in the startup.conf ?
>
> Please suggest a way to fix this assert.
>
> Thanks,
> Regards
> Venu
>
> On Thu, 30 Sept 2021 at 21:08, Benoit Ganne (bganne) <[email protected]>
> wrote:
>
>> You should remove -lvlib it is not needed here.
>> If you really want to link with vlib, you must fix the link ordering:
>> vlib depends upon vppinfra (where os_exit is defined) so you'd need link as
>> -lvlib -lvppinfra instead of the opposite (the C linker scan libraries
>> symbols in reverse order, so symbols declared in a library are available to
>> libraries listed *before*).
>>
>> Best
>> ben
>>
>> > -----Original Message-----
>> > From: [email protected] <[email protected]> On Behalf Of Venumadhav
>> > Josyula
>> > Sent: jeudi 30 septembre 2021 16:09
>> > To: Akash S R <[email protected]>
>> > Cc: Benoit Ganne (bganne) <[email protected]>; Ole Troan
>> > <[email protected]>; RaviKiran Veldanda <[email protected]>;
>> vpp-
>> > dev <[email protected]>
>> > Subject: Re: [vpp-dev] VPP Socket API how to use from the application
>> > #socket-api #vpp #sock-api
>> >
>> > Hi Akash,
>> >
>> > Thansks, now after devtoolset,
>> >
>> >
>> > @Benoit Ganne (bganne) <mailto:[email protected]> , @Ole Troan
>> > <mailto:[email protected]>
>> >
>> > i am getting following error
>> >
>> > [root@8f57181df3a1 vpp_c_api_examples]# gcc vpp_api_client_test3.c -o
>> > vpp_api_client_test3.o -lvlibmemoryclient -lsvm -lvppinfra -lvlib
>> > /opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld:
>> > /lib/../lib64/libvlib.so: undefined reference to
>> > `classify_get_trace_chain'
>> > /opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld:
>> > /lib/../lib64/libvlib.so: undefined reference to
>> > `stat_segment_register_gauge'
>> > /opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld:
>> > /lib/../lib64/libvlib.so: undefined reference to `os_exit'
>> > collect2: error: ld returned 1 exit status
>> > [root@8f57181df3a1 vpp_c_api_examples]#
>> >
>> > Let me paste the code again,
>> > #include<stdio.h>
>> > #include<stdlib.h>
>> > #include <vlibapi/api.h>
>> > #include <vlibmemory/api.h>
>> > #include <vpp/api/vpe_msg_enum.h>
>> >
>> > #define vl_typedefs
>> > #define vl_endianfun
>> > #include <vpp/api/vpe_all_api_h.h>
>> > #undef vl_typedefs
>> > #undef vl_endianfun
>> >
>> > int main()
>> > {
>> > char *name = "vpp-test-app";
>> >
>> > clib_mem_init_thread_safe (0, 64ULL << 20);
>> >
>> > if (vl_client_api_map("/vpe-api"))
>> > {
>> > printf("unable to map....\n");
>> > goto quit;
>> > }
>> > if (vl_client_connect("vpp-test-app", 0, 32) < 0)
>> > {
>> > printf("unable to connect \n");
>> > vl_client_api_unmap();
>> > goto quit;
>> > }
>> > printf("successfully connected... \n");
>> > quit:
>> > return 0;
>> > }
>> >
>> > Is this wrong way, i am trying to use APIs ?
>> >
>> > Thanks,
>> > Regards
>> > Venu
>> >
>> >
>> > On Thu, 30 Sept 2021 at 19:00, Akash S R <[email protected]
>> > <mailto:[email protected]> > wrote:
>> >
>> >
>> > Hey Venu,
>> >
>> > Try "scl enable devtoolset-9 bash" inside your docker or update
>> your
>> > gcc version.
>> >
>> >
>> > /Akash S R
>> >
>> > On Thu, Sep 30, 2021, 18:54 Venumadhav Josyula <
>> [email protected]
>> > <mailto:[email protected]> > wrote:
>> >
>> >
>> > Hi Benoit,
>> >
>> > Thanks for quick reply.
>> >
>> > I have docker with following
>> > [root@8f57181df3a1 vpp_c_api_examples]# rpm -qa | grep
>> vpp
>> > vpp-lib-21.06.0-4~g0d9d3a0.x86_64
>> > vpp-api-lua-21.06.0-4~g0d9d3a0.x86_64
>> > vpp-api-python3-21.06.0-4~g0d9d3a0.x86_64
>> > vpp-debuginfo-21.06.0-4~g0d9d3a0.x86_64
>> > vpp-selinux-policy-21.06.0-4~g0d9d3a0.x86_64
>> > vpp-21.06.0-4~g0d9d3a0.x86_64
>> > vpp-plugins-21.06.0-4~g0d9d3a0.x86_64
>> > vpp-devel-21.06.0-4~g0d9d3a0.x86_64
>> >
>> > This will vpp running in it.
>> >
>> > [root@8f57181df3a1 /]# cat /etc/redhat-release
>> > CentOS Linux release 7.3.1611 (Core)
>> > [root@8f57181df3a1 /]#
>> >
>> > > Eg. use devtoolset-9 (gcc-9).
>> >
>> >
>> > How do I use it ?
>> >
>> > Thanks,
>> > Regards,
>> > Venu
>> >
>> >
>> > On Thu, 30 Sept 2021 at 18:47, Benoit Ganne (bganne)
>> > <[email protected] <mailto:[email protected]> > wrote:
>> >
>> >
>> > You should upgrade your compiler... GCC-4 is way
>> too
>> > old.
>> > Eg. use devtoolset-9 (gcc-9).
>> >
>> > Best
>> > ben
>> >
>> > > -----Original Message-----
>> > > From: [email protected] <mailto:
>> [email protected]>
>> > <[email protected] <mailto:[email protected]> > On Behalf Of
>> > Venumadhav
>> > > Josyula
>> > > Sent: jeudi 30 septembre 2021 14:49
>> > > To: [email protected] <mailto:
>> [email protected]>
>> > > Cc: RaviKiran Veldanda <[email protected]
>> > <mailto:[email protected]> >; vpp-dev <vpp-
>> > > [email protected] <mailto:[email protected]> >
>> > > Subject: Re: [vpp-dev] VPP Socket API how to
>> use from
>> > the application
>> > > #socket-api #vpp #sock-api
>> > >
>> > > Hi Ole / Others,
>> > >
>> > >
>> > >
>> > > Thanks for your email, i getting following
>> compilation
>> > error
>> > > [root@8f57181df3a1 vpp_c_api_examples]# gcc
>> > vpp_api_client_test3.c -o
>> > > vpp_api_client_test3.o -lvlibmemoryclient -lsvm
>> -
>> > lvppinfra -lvlib
>> > > In file included from
>> > /usr/include/vppinfra/error.h:41:0,
>> > > from
>> /usr/include/vlibapi/api.h:24,
>> > > from vpp_api_client_test3.c:3:
>> > > /usr/include/vppinfra/clib.h:43:18: error:
>> missing
>> > binary operator before
>> > > token "("
>> > > #if __has_include(<vppinfra/config.h>)
>> > > ^
>> > > In file included from
>> > /usr/include/vppinfra/mem.h:49:0,
>> > > from
>> /usr/include/vppinfra/vec.h:42,
>> > > from
>> > /usr/include/vppinfra/error.h:53,
>> > > from
>> /usr/include/vlibapi/api.h:24,
>> > > from vpp_api_client_test3.c:3:
>> > > /usr/include/vppinfra/string.h:92:34: error:
>> expected
>> > ';', ',' or ')'
>> > > before 'dst'
>> > > clib_memcpy_fast (void *restrict dst, const
>> void
>> > *restrict src, size_t n)
>> > > ^
>> > > [root@8f57181df3a1 vpp_c_api_examples]# vim
>> > /usr/include/vppinfra/clib.h
>> > > +43
>> > > [root@8f57181df3a1 vpp_c_api_examples]# vim
>> > /usr/include/vppinfra/clib.h
>> > > +43
>> > > [root@8f57181df3a1 vpp_c_api_examples]# gcc
>> --version
>> > > gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
>> > > Copyright (C) 2015 Free Software Foundation,
>> Inc.
>> > > This is free software; see the source for
>> copying
>> > conditions. There is NO
>> > > warranty; not even for MERCHANTABILITY or
>> FITNESS FOR
>> > A PARTICULAR
>> > > PURPOSE.
>> > >
>> > > [root@8f57181df3a1 vpp_c_api_examples]#
>> > >
>> > >
>> > > -----------------
>> > >
>> > > c -code
>> > > ----------------
>> > >
>> > >
>> > > #include<stdio.h>
>> > > #include<stdlib.h>
>> > > #include <vlibapi/api.h>
>> > > #include <vlibmemory/api.h>
>> > > #include <vpp/api/vpe_msg_enum.h>
>> > >
>> > > #define vl_typedefs
>> > > #define vl_endianfun
>> > > #include <vpp/api/vpe_all_api_h.h>
>> > > #undef vl_typedefs
>> > > #undef vl_endianfun
>> > >
>> > > int main()
>> > > {
>> > > char *name = "vpp-test-app";
>> > >
>> > > clib_mem_init_thread_safe (0, 64ULL << 20);
>> > >
>> > > if (vl_client_api_map("/vpe-api"))
>> > > {
>> > > printf("unable to map....\n");
>> > > goto quit;
>> > > }
>> > > if (vl_client_connect("vpp-test-app", 0, 32)
>> < 0)
>> > > {
>> > > printf("unable to connect \n");
>> > > vl_client_api_unmap();
>> > > goto quit;
>> > > }
>> > > printf("successfully connected... \n");
>> > > quit:
>> > > return 0;
>> > > }
>> > >
>> > >
>> > > ------------
>> > >
>> > >
>> > > Can you please suggest what can i be doing
>> worng ?
>> > >
>> > >
>> > > Thanks,
>> > > Regards,
>> > > Venu
>> > >
>> > >
>> > > On Thu, 30 Sept 2021 at 13:21, <
>> [email protected]
>> > <mailto:[email protected]>
>> > > <mailto:[email protected]
>> > <mailto:[email protected]> > > wrote:
>> > >
>> > >
>> > > Hi Venu,
>> > >
>> > > > Any examples for VAPI shared to use
>> binary
>> > APIs ?
>> > >
>> > > Try this for a start:
>> > > https://git.fd.io/vpp/tree/src/vpp-
>> > api/vapi/vapi_c_test.c
>> > >
>> > > Cheers,
>> > > Ole
>> > >
>> > >
>> >
>> >
>> >
>> >
>> >
>>
>>
>
>
>
--
Best regards
Stanislav Zaikin
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#20265): https://lists.fd.io/g/vpp-dev/message/20265
Mute This Topic: https://lists.fd.io/mt/85796959/21656
Mute #vpp:https://lists.fd.io/g/vpp-dev/mutehashtag/vpp
Mute #socket-api:https://lists.fd.io/g/vpp-dev/mutehashtag/socket-api
Mute #sock-api:https://lists.fd.io/g/vpp-dev/mutehashtag/sock-api
Group Owner: [email protected]
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-