Hi All,

I am not getting reply for punt socket register for the following code


*C-Code*
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));
    vl_api_punt_socket_register_reply_t *rmp =
(vl_api_punt_socket_register_reply_t *)data;
    printf(" vpp punt socket path \n", rmp->pathname);
    printf("message id : %d\n", result_msg_id);
}

        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);
        }


        printf("Connected to vpp...: %d\n", 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 = 10;
        mp = &message;

        for (i = 0; i < no_msgs; i++) {
                /* Construct the API message */
                M_NOALLOC(SHOW_VERSION, show_version);
                printf(" writing show version message: \n");
                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);
                printf(" writing control ping message...: \n");
                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();
}

#define READ_PATH "/tmp/strongswan-uds-socket"
#define PUNT_SOCKET_REGISTER_REPLY "punt_socket_register_reply"

static void test_punt_socket_register_message(void)
{
    api_main_t * am = vlibapi_get_main();
    vl_api_punt_socket_register_t *mp;
    char *read_buffer;
    int msg_length;
        char *read_path = READ_PATH;
        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);
        }

        printf("Connected to vpp...: %d\n", rv);
        double timestamp_start = unix_time_now_nsec() * 1e-6;

        if (async) {
                mp = vl_msg_api_alloc(sizeof(*mp));
                memset(mp, 0, sizeof(*mp));
                mp->_vl_msg_id = ntohs(VL_API_PUNT_SOCKET_REGISTER);
                printf(" message id VL_API_PUNT_SOCKET_REGISTER
%d",VL_API_PUNT_SOCKET_REGISTER);
                printf(" message id VL_API_PUNT_SOCKET_REGISTER
%d",VL_API_PUNT_SOCKET_REGISTER_REPLY);
                mp->header_version = ntohl(1);
                mp->punt.type = PUNT_API_TYPE_L4;
                mp->punt.punt.l4.af = ADDRESS_IP4;
                mp->punt.punt.l4.protocol = IPPROTO_UDP;
                mp->punt.punt.l4.port = ntohs(4500);
                mp->client_index = am->my_client_index;
                strncpy(mp->pathname, read_path, 107);
                printf(" writing punt socket register...: \n");
                vac_write((char *)mp, sizeof(*mp));

                while (result_msg_id != VL_API_PUNT_SOCKET_REGISTER_REPLY);
        }
        printf(" message id VL_API_PUNT_SOCKET_REGISTER
%d",VL_API_CONTROL_PING_REPLY);
        if (async) {
                vl_api_control_ping_t control;
                vl_api_control_ping_t *mp;
                mp = &control;
                M_NOALLOC(CONTROL_PING, control_ping);
                printf(" writing control ping message...: \n");
                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),
                        1/(timestamp_end - timestamp_start));
        printf("Exiting...\n");
        vac_disconnect();
}

int main (int argc, char ** argv)
{
        clib_mem_init (0, 3ULL << 30);
#if 0
        test_stats();
#endif

        int i;
/*
        for (i = 0; i < 10; i++) {
                test_connect();
        }
*/

/*        test_messages();*/
        test_punt_socket_register_message();
        exit (0);
}

*Compilation Options used*

gcc vpp_api_client_vac_layer.c -o vpp_api_client_vac_layer.o -lpthread
-lvlibmemoryclient -lvppinfra -lvppapiclient -I/usr/include/

*Output*
[root@8f57181df3a1 vpp_c_api_examples]# ./vpp_api_client_vac_layer.o
Connected to vpp...: 0
 message id VL_API_PUNT_SOCKET_REGISTER 538 message id
VL_API_PUNT_SOCKET_REGISTER 539 writing punt socket register...:

*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
}

socksvr { socket-name /run/vpp-api.sock}
punt { socket /run/vpp-punt.sock }
It is stuck, can you please suggest how to debug this ?

Thanks,
Regards,
Venu


On Fri, 8 Oct 2021 at 13:10, Venumadhav Josyula via lists.fd.io <vjosyula=
gmail....@lists.fd.io> wrote:

> Hi All,
>
> I am not getting reply for punt socket register for the following code
>
>
> *C-Code*
> 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));
>     vl_api_punt_socket_register_reply_t *rmp =
> (vl_api_punt_socket_register_reply_t *)data;
>     printf(" vpp punt socket path \n", rmp->pathname);
>     printf("message id : %d\n", result_msg_id);
> }
>
>         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);
>         }
>
>
>         printf("Connected to vpp...: %d\n", 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 = 10;
>         mp = &message;
>
>         for (i = 0; i < no_msgs; i++) {
>                 /* Construct the API message */
>                 M_NOALLOC(SHOW_VERSION, show_version);
>                 printf(" writing show version message: \n");
>                 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);
>                 printf(" writing control ping message...: \n");
>                 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();
> }
>
> #define READ_PATH "/tmp/strongswan-uds-socket"
> #define PUNT_SOCKET_REGISTER_REPLY "punt_socket_register_reply"
>
> static void test_punt_socket_register_message(void)
> {
>     api_main_t * am = vlibapi_get_main();
>     vl_api_punt_socket_register_t *mp;
>     char *read_buffer;
>     int msg_length;
>         char *read_path = READ_PATH;
>         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);
>         }
>
>         printf("Connected to vpp...: %d\n", rv);
>         double timestamp_start = unix_time_now_nsec() * 1e-6;
>
>         if (async) {
>                 mp = vl_msg_api_alloc(sizeof(*mp));
>                 memset(mp, 0, sizeof(*mp));
>                 mp->_vl_msg_id = ntohs(VL_API_PUNT_SOCKET_REGISTER);
>                 printf(" message id VL_API_PUNT_SOCKET_REGISTER
> %d",VL_API_PUNT_SOCKET_REGISTER);
>                 printf(" message id VL_API_PUNT_SOCKET_REGISTER
> %d",VL_API_PUNT_SOCKET_REGISTER_REPLY);
>                 mp->header_version = ntohl(1);
>                 mp->punt.type = PUNT_API_TYPE_L4;
>                 mp->punt.punt.l4.af = ADDRESS_IP4;
>                 mp->punt.punt.l4.protocol = IPPROTO_UDP;
>                 mp->punt.punt.l4.port = ntohs(4500);
>                 mp->client_index = am->my_client_index;
>                 strncpy(mp->pathname, read_path, 107);
>                 printf(" writing punt socket register...: \n");
>                 vac_write((char *)mp, sizeof(*mp));
>
>                 while (result_msg_id != VL_API_PUNT_SOCKET_REGISTER_REPLY);
>         }
>         printf(" message id VL_API_PUNT_SOCKET_REGISTER
> %d",VL_API_CONTROL_PING_REPLY);
>         if (async) {
>                 vl_api_control_ping_t control;
>                 vl_api_control_ping_t *mp;
>                 mp = &control;
>                 M_NOALLOC(CONTROL_PING, control_ping);
>                 printf(" writing control ping message...: \n");
>                 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),
>                         1/(timestamp_end - timestamp_start));
>         printf("Exiting...\n");
>         vac_disconnect();
> }
>
> int main (int argc, char ** argv)
> {
>         clib_mem_init (0, 3ULL << 30);
> #if 0
>         test_stats();
> #endif
>
>         int i;
> /*
>         for (i = 0; i < 10; i++) {
>                 test_connect();
>         }
> */
>
> /*        test_messages();*/
>         test_punt_socket_register_message();
>         exit (0);
> }
>
> *Compilation Options used*
>
> gcc vpp_api_client_vac_layer.c -o vpp_api_client_vac_layer.o -lpthread
> -lvlibmemoryclient -lvppinfra -lvppapiclient -I/usr/include/
>
> *Output*
> [root@8f57181df3a1 vpp_c_api_examples]# ./vpp_api_client_vac_layer.o
> Connected to vpp...: 0
>  message id VL_API_PUNT_SOCKET_REGISTER 538 message id
> VL_API_PUNT_SOCKET_REGISTER 539 writing punt socket register...:
>
> It is stuck, can you please suggest how to debug this ?
>
> Thanks,
> Regards,
> Venu
>
>
>
>
> On Fri, 1 Oct 2021 at 14:12, Venumadhav Josyula via lists.fd.io <vjosyula=
> gmail....@lists.fd.io> wrote:
>
>> Thanks, my mistake, it worked...
>>
>> On Fri, 1 Oct 2021 at 13:34, Stanislav Zaikin <zsta...@gmail.com> wrote:
>>
>>> 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 (#20301): https://lists.fd.io/g/vpp-dev/message/20301
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]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to