There are new C and C++ APIs added recently to vpp source code along with test programs. You can take a look at test/ext/vapi_c_test.c and vapi_cpp_test.cpp. Functions receiving stats are named test_stats_XXX(). These are there to verify that receiving events works. Functionally, these are the same, they just test different ways of doing stuff.
At shared memory level it looks like this: 1.) client -> want_stats -> vpp 2.) vpp -> want_stats_reply -> client (confirms subscription) 3.) vpp -> <various stats messages> -> client (when timer fires) in step 3.), client needs to read the shared memory queue in the vpp->client direction (or use the appropriate XXX_read() function). Note that stats take a few seconds to arrive (the test programs require 10-15 seconds of runtime to get some stats). HTH, Klement Quoting 重新开始 (2017-09-27 04:55:29) > That is ok! > Now I am research calling the plugin apis by C. Especially how to call > the event apis. I would appreciate it if you can write a brief client. > ------------------ 原始邮件 ------------------ > 发件人: "Keith Burns";<alaga...@gmail.com>; > 发送时间: 2017年9月27日(星期三) 上午10:47 > 收件人: "重新开始"<15803846...@qq.com>; > 抄送: "vpp-dev"<vpp-dev@lists.fd.io>; > 主题: Re: 回复: [vpp-dev] How to get interface stats using C api? > Apologies, > It's a callback. > We probably need some decent literature written for how to consume the > various C, C++, Python and Lua APIs > If you have a preference for any of those languages I could write a brief > client program for you and start work on documenting this stuff. > On Sep 26, 2017 6:04 PM, "重新开始" <[1]15803846...@qq.com> wrote: > > Hi, > Thank you for your detail information. After reading this, i can > understand. But after calling "want_per_interface_simple_stats" with > enable_disable=1, num=1 and sw_ifs[4], i do not know how to receive this > stats. calling other function or variable? Can you tell me how to > receive stats in my c program? > Thanks! > ------------------ 原始邮件 ------------------ > 发件人: "Keith Burns";<[2]alaga...@gmail.com>; > 发送时间: 2017年9月27日(星期三) 上午6:39 > 收件人: "重新开 > 始"<[3]15803846...@qq.com>;"vpp-dev"<[4]vpp-dev@lists.fd.io>; > 主题: Re: [vpp-dev] How to get interface stats using C api? > Hi there, > As of 17.10 you can now register for statistics on a per interface > level. > You need the sw_if_index of the interface you want stats for, but the > calls are in > [5]https://git.fd.io/vpp/tree/src/vpp/stats/stats.api > but as an example: > Register: > > autoreply define want_per_interface_simple_stats > { > u32 client_index; > u32 context; > u32 enable_disable; > u32 pid; > u32 num; > u32 sw_ifs[num]; > > }; > > So calling "want_per_interface_simple_stats" with enable_disable=1, num=1 > and sw_ifs[4] will give you > > interface_simple_stats every 10sec for sw_if_index=4. > > The content of "interface_simple_stats" looks like: > > /** \brief Simple per interface stats counters structure > @param count - number of elements in message > @param timestamp - u32 vlib timestamp for control plane > @param data[count] - vl_api_vnet_simple_counter_t > > */ > manual_print manual_endian define vnet_per_interface_simple_counters > { > u32 count; > u32 timestamp; > vl_api_vnet_simple_counter_t data[count]; > }; > > Where each "vnet_simple_counter_t" looks like: > > [6]https://git.fd.io/vpp/tree/src/vnet/interface.api > > /** \brief Simple interface counter data type for > vnet_interface_simple_counters > @param sw_if_index - interface indexes for counters > @param drop - RX or TX drops due to buffer starvation > @param punt - used with VNET "punt" disposition > @param rx_ip4 - received IP4 packets > @param rx_ip6 - received IP6 packets > @param rx_no_buffer - no RX buffers available > @param rx_miss - receive misses > @param rx_error - receive errors > @param tx_error - transmit errors > @param rx_mpls - received MPLS packet > > */ > typeonly manual_print manual_endian define vnet_simple_counter > { > u32 sw_if_index; > u64 drop; > u64 punt; > u64 rx_ip4; > u64 rx_ip6; > u64 rx_no_buffer; > u64 rx_miss; > u64 rx_error; > u64 tx_error; > u64 rx_mpls; > }; > > So you will get back an array of counter structs for each sw_if_index you > registered for. > > At the moment the impl sends on sw_if_index per reply but that is going to > change so that for each client we send as much in one message as possible. > > On Tue, Sep 26, 2017 at 4:50 AM 重新开始 <[7]15803846...@qq.com> wrote: > > Hi, everyone! > How to get interface stats using C api? > For example, I want to know "GigabitEthernete/0/1" rx packets , what should > I do? > > Thanks > > _______________________________________________ > vpp-dev mailing list > [8]vpp-dev@lists.fd.io > [9]https://lists.fd.io/mailman/listinfo/vpp-dev > > References > > Visible links > 1. mailto:15803846...@qq.com > 2. mailto:alaga...@gmail.com > 3. mailto:15803846...@qq.com > 4. mailto:vpp-dev@lists.fd.io > 5. https://git.fd.io/vpp/tree/src/vpp/stats/stats.api > 6. https://git.fd.io/vpp/tree/src/vnet/interface.api > 7. mailto:15803846...@qq.com > 8. mailto:vpp-dev@lists.fd.io > 9. https://lists.fd.io/mailman/listinfo/vpp-dev _______________________________________________ vpp-dev mailing list vpp-dev@lists.fd.io https://lists.fd.io/mailman/listinfo/vpp-dev