You need to uncomment clib_mem_init On Fri, 1 Oct 2021 at 10:01, Venumadhav Josyula <vjosy...@gmail.com> 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) <bga...@cisco.com> > 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: vpp-dev@lists.fd.io <vpp-dev@lists.fd.io> On Behalf Of Venumadhav >> > Josyula >> > Sent: jeudi 30 septembre 2021 16:09 >> > To: Akash S R <akashsr.akas...@gmail.com> >> > Cc: Benoit Ganne (bganne) <bga...@cisco.com>; Ole Troan >> > <otr...@employees.org>; RaviKiran Veldanda <ravi.jup...@gmail.com>; >> vpp- >> > dev <vpp-dev@lists.fd.io> >> > 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:bga...@cisco.com> , @Ole Troan >> > <mailto:otr...@employees.org> >> > >> > 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 <akashsr.akas...@gmail.com >> > <mailto:akashsr.akas...@gmail.com> > 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 < >> vjosy...@gmail.com >> > <mailto:vjosy...@gmail.com> > 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) >> > <bga...@cisco.com <mailto:bga...@cisco.com> > wrote: >> > >> > >> > You should upgrade your compiler... GCC-4 is way >> too >> > old. >> > Eg. use devtoolset-9 (gcc-9). >> > >> > Best >> > ben >> > >> > > -----Original Message----- >> > > From: vpp-dev@lists.fd.io <mailto: >> vpp-dev@lists.fd.io> >> > <vpp-dev@lists.fd.io <mailto:vpp-dev@lists.fd.io> > On Behalf Of >> > Venumadhav >> > > Josyula >> > > Sent: jeudi 30 septembre 2021 14:49 >> > > To: otr...@employees.org <mailto: >> otr...@employees.org> >> > > Cc: RaviKiran Veldanda <ravi.jup...@gmail.com >> > <mailto:ravi.jup...@gmail.com> >; vpp-dev <vpp- >> > > d...@lists.fd.io <mailto:d...@lists.fd.io> > >> > > 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, < >> otr...@employees.org >> > <mailto:otr...@employees.org> >> > > <mailto:otr...@employees.org >> > <mailto:otr...@employees.org> > > 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: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-