FD.io VPP  v21.10.1-2-g0a485f517
Vector Packet Processing
flow_api.c
Go to the documentation of this file.
1 /*
2  *------------------------------------------------------------------
3  * flow_api.c - flow api
4  *
5  * Copyright (c) 2016 Cisco and/or its affiliates.
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at:
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *------------------------------------------------------------------
18  */
19 
20 #include <vnet/vnet.h>
21 #include <vlibmemory/api.h>
22 #include <vnet/ip/ip_types_api.h>
23 #include <vnet/udp/udp_local.h>
24 
25 #include <vnet/interface.h>
26 #include <vnet/api_errno.h>
27 
28 #include <vnet/fib/fib_table.h>
31 
32 #include <vnet/format_fns.h>
33 #include <vnet/ipfix-export/ipfix_export.api_enum.h>
34 #include <vnet/ipfix-export/ipfix_export.api_types.h>
35 
36 #define REPLY_MSG_ID_BASE frm->msg_id_base
38 
39 static void
41 {
45  vl_api_set_ipfix_exporter_reply_t *rmp;
46  ip4_address_t collector, src;
47  u16 collector_port = UDP_DST_PORT_ipfix;
48  u32 path_mtu;
49  u32 template_interval;
51  u32 fib_id;
52  u32 fib_index = ~0;
53  int rv = 0;
54 
56  if (!reg)
57  return;
58 
59  if (mp->src_address.af == ADDRESS_IP6
60  || mp->collector_address.af == ADDRESS_IP6)
61  {
62  rv = VNET_API_ERROR_UNIMPLEMENTED;
63  goto out;
64  }
65 
66  ip4_address_decode (mp->collector_address.un.ip4, &collector);
67  collector_port = ntohs (mp->collector_port);
68  if (collector_port == (u16) ~ 0)
69  collector_port = UDP_DST_PORT_ipfix;
70  ip4_address_decode (mp->src_address.un.ip4, &src);
71  fib_id = ntohl (mp->vrf_id);
72 
74  if (fib_id == ~0)
75  {
76  fib_index = ~0;
77  }
78  else
79  {
80  uword *p = hash_get (im->fib_index_by_table_id, fib_id);
81  if (!p)
82  {
83  rv = VNET_API_ERROR_NO_SUCH_FIB;
84  goto out;
85  }
86  fib_index = p[0];
87  }
88 
89  path_mtu = ntohl (mp->path_mtu);
90  if (path_mtu == ~0)
91  path_mtu = 512; // RFC 7011 section 10.3.3.
92  template_interval = ntohl (mp->template_interval);
93  if (template_interval == ~0)
94  template_interval = 20;
96 
97  if (collector.as_u32 != 0 && src.as_u32 == 0)
98  {
99  rv = VNET_API_ERROR_INVALID_VALUE;
100  goto out;
101  }
102 
103  if (path_mtu > 1450 /* vpp does not support fragmentation */ )
104  {
105  rv = VNET_API_ERROR_INVALID_VALUE;
106  goto out;
107  }
108 
109  if (path_mtu < 68)
110  {
111  rv = VNET_API_ERROR_INVALID_VALUE;
112  goto out;
113  }
114 
115  /* Reset report streams if we are reconfiguring IP addresses */
116  if (frm->ipfix_collector.as_u32 != collector.as_u32 ||
117  frm->src_address.as_u32 != src.as_u32 ||
118  frm->collector_port != collector_port)
120 
121  frm->ipfix_collector.as_u32 = collector.as_u32;
122  frm->collector_port = collector_port;
123  frm->src_address.as_u32 = src.as_u32;
124  frm->fib_index = fib_index;
125  frm->path_mtu = path_mtu;
126  frm->template_interval = template_interval;
127  frm->udp_checksum = udp_checksum;
128 
129  /* Turn on the flow reporting process */
131 
132 out:
133  REPLY_MACRO (VL_API_SET_IPFIX_EXPORTER_REPLY);
134 }
135 
136 static void
138 {
142  ip4_main_t *im = &ip4_main;
143  ip46_address_t collector = {.as_u64[0] = 0,.as_u64[1] = 0 };
144  ip46_address_t src = {.as_u64[0] = 0,.as_u64[1] = 0 };
145  u32 vrf_id;
146 
148  if (!reg)
149  return;
150 
151  rmp = vl_msg_api_alloc (sizeof (*rmp));
152  clib_memset (rmp, 0, sizeof (*rmp));
153  rmp->_vl_msg_id = ntohs (VL_API_IPFIX_EXPORTER_DETAILS);
154  rmp->context = mp->context;
155 
156  memcpy (&collector.ip4, &frm->ipfix_collector, sizeof (ip4_address_t));
158 
159  rmp->collector_port = htons (frm->collector_port);
160 
161  memcpy (&src.ip4, &frm->src_address, sizeof (ip4_address_t));
163 
164  if (frm->fib_index == ~0)
165  vrf_id = ~0;
166  else
167  vrf_id = im->fibs[frm->fib_index].ft_table_id;
168  rmp->vrf_id = htonl (vrf_id);
169  rmp->path_mtu = htonl (frm->path_mtu);
170  rmp->template_interval = htonl (frm->template_interval);
171  rmp->udp_checksum = (frm->udp_checksum != 0);
172 
173  vl_api_send_msg (reg, (u8 *) rmp);
174 }
175 
176 static void
179 {
180  vl_api_set_ipfix_classify_stream_reply_t *rmp;
183  u32 domain_id = 0;
184  u32 src_port = UDP_DST_PORT_ipfix;
185  int rv = 0;
186 
187  domain_id = ntohl (mp->domain_id);
188  src_port = ntohs (mp->src_port);
189 
190  if (fcm->src_port != 0 &&
191  (fcm->domain_id != domain_id || fcm->src_port != (u16) src_port))
192  {
193  int rv = vnet_stream_change (frm, fcm->domain_id, fcm->src_port,
194  domain_id, (u16) src_port);
195  ASSERT (rv == 0);
196  }
197 
198  fcm->domain_id = domain_id;
199  fcm->src_port = (u16) src_port;
200 
201  REPLY_MACRO (VL_API_SET_IPFIX_CLASSIFY_STREAM_REPLY);
202 }
203 
204 static void
207 {
211 
213  if (!reg)
214  return;
215 
216  rmp = vl_msg_api_alloc (sizeof (*rmp));
217  clib_memset (rmp, 0, sizeof (*rmp));
218  rmp->_vl_msg_id = ntohs (VL_API_IPFIX_CLASSIFY_STREAM_DETAILS);
219  rmp->context = mp->context;
220  rmp->domain_id = htonl (fcm->domain_id);
221  rmp->src_port = htons (fcm->src_port);
222 
223  vl_api_send_msg (reg, (u8 *) rmp);
224 }
225 
226 static void
229 {
230  vl_api_ipfix_classify_table_add_del_reply_t *rmp;
235  ipfix_classify_table_t *table;
236  int is_add;
238  u8 ip_version;
239  u8 transport_protocol;
240  int rv = 0;
241 
243  if (!reg)
244  return;
245 
246  classify_table_index = ntohl (mp->table_id);
247  ip_version = (mp->ip_version == ADDRESS_IP4) ? 4 : 6;
248  transport_protocol = mp->transport_protocol;
249  is_add = mp->is_add;
250 
251  if (fcm->src_port == 0)
252  {
253  /* call set_ipfix_classify_stream first */
254  rv = VNET_API_ERROR_UNSPECIFIED;
255  goto out;
256  }
257 
258  clib_memset (&args, 0, sizeof (args));
259 
260  table = 0;
261  int i;
262  for (i = 0; i < vec_len (fcm->tables); i++)
265  {
266  table = &fcm->tables[i];
267  break;
268  }
269 
270  if (is_add)
271  {
272  if (table)
273  {
274  rv = VNET_API_ERROR_VALUE_EXIST;
275  goto out;
276  }
277  table = ipfix_classify_add_table ();
279  }
280  else
281  {
282  if (!table)
283  {
284  rv = VNET_API_ERROR_NO_SUCH_ENTRY;
285  goto out;
286  }
287  }
288 
289  table->ip_version = ip_version;
290  table->transport_protocol = transport_protocol;
291 
292  args.opaque.as_uword = table - fcm->tables;
295  args.is_add = is_add;
296  args.domain_id = fcm->domain_id;
297  args.src_port = fcm->src_port;
298 
299  rv = vnet_flow_report_add_del (frm, &args, NULL);
300 
301  /* If deleting, or add failed */
302  if (is_add == 0 || (rv && is_add))
303  ipfix_classify_delete_table (table - fcm->tables);
304 
305 out:
306  REPLY_MACRO (VL_API_SET_IPFIX_CLASSIFY_STREAM_REPLY);
307 }
308 
309 static void
312 {
315 
316  ipfix_classify_table_t *table = &fcm->tables[table_index];
317 
318  mp = vl_msg_api_alloc (sizeof (*mp));
319  clib_memset (mp, 0, sizeof (*mp));
320  mp->_vl_msg_id = ntohs (VL_API_IPFIX_CLASSIFY_TABLE_DETAILS);
321  mp->context = context;
322  mp->table_id = htonl (table->classify_table_index);
323  mp->ip_version = (table->ip_version == 4) ? ADDRESS_IP4 : ADDRESS_IP6;
325 
326  vl_api_send_msg (reg, (u8 *) mp);
327 }
328 
329 static void
332 {
335  u32 i;
336 
338  if (!reg)
339  return;
340 
341  for (i = 0; i < vec_len (fcm->tables); i++)
344 }
345 
346 static void
348 {
350  vl_api_ipfix_flush_reply_t *rmp;
353  int rv = 0;
354 
356  if (!reg)
357  return;
358 
359  /* poke the flow reporting process */
361  1 /* type_opaque */ , 0 /* data */ );
362 
363  REPLY_MACRO (VL_API_IPFIX_FLUSH_REPLY);
364 }
365 
366 #include <vnet/ipfix-export/ipfix_export.api.c>
367 static clib_error_t *
369 {
371  /*
372  * Set up the (msg_name, crc, message-id) table
373  */
375 
376  return 0;
377 }
378 
380 
381 /*
382  * fd.io coding-style-patch-verification: ON
383  *
384  * Local Variables:
385  * eval: (c-set-style "gnu")
386  * End:
387  */
vnet_flow_report_add_del_args_t::domain_id
u32 domain_id
Definition: flow_report.h:155
vl_api_ipfix_classify_stream_dump_t
IPFIX classify stream dump request.
Definition: ipfix_export.api:93
flow_report_classify_main_t
Definition: flow_report_classify.h:76
im
vnet_interface_main_t * im
Definition: interface_output.c:415
vl_api_client_index_to_registration
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
Definition: api.h:79
vl_api_ipfix_classify_table_details_t::table_id
u32 table_id
Definition: ipfix_export.api:142
api.h
vl_api_ipfix_classify_stream_dump_t::context
u32 context
Definition: ipfix_export.api:95
flow_report_main
flow_report_main_t flow_report_main
Definition: flow_report.c:22
vl_api_set_ipfix_classify_stream_t::domain_id
u32 domain_id
Definition: ipfix_export.api:85
vl_api_ipfix_classify_table_add_del_t::ip_version
vl_api_address_family_t ip_version
Definition: ipfix_export.api:120
ntohs
#define ntohs(x)
Definition: af_xdp.bpf.c:29
flow_report_main::udp_checksum
u8 udp_checksum
Definition: flow_report.h:128
ip4_address_decode
void ip4_address_decode(const vl_api_ip4_address_t in, ip4_address_t *out)
Definition: ip_types_api.c:141
ip4_main
ip4_main_t ip4_main
Global ip4 main structure.
Definition: ip4_forward.c:1104
vl_api_send_msg
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
Definition: api.h:35
vl_api_ipfix_classify_stream_dump_t_handler
static void vl_api_ipfix_classify_stream_dump_t_handler(vl_api_ipfix_classify_stream_dump_t *mp)
Definition: flow_api.c:206
vl_api_ipfix_classify_table_add_del_t
IPFIX add or delete classifier table request.
Definition: ipfix_export.api:116
VLIB_API_INIT_FUNCTION
VLIB_API_INIT_FUNCTION(hw_flow_api_hookup)
flow_report_classify_main_t::domain_id
u32 domain_id
Definition: flow_report_classify.h:78
flow_api_hookup
static clib_error_t * flow_api_hookup(vlib_main_t *vm)
Definition: flow_api.c:368
IP46_TYPE_IP4
@ IP46_TYPE_IP4
Definition: ip46_address.h:26
ip4_address_t::as_u32
u32 as_u32
Definition: ip4_packet.h:57
opaque_t::as_uword
uword as_uword
Definition: flow_report.h:73
vnet_stream_change
int vnet_stream_change(flow_report_main_t *frm, u32 old_domain_id, u16 old_src_port, u32 new_domain_id, u16 new_src_port)
Definition: flow_report.c:477
vl_api_ipfix_classify_table_dump_t_handler
static void vl_api_ipfix_classify_table_dump_t_handler(vl_api_ipfix_classify_table_dump_t *mp)
Definition: flow_api.c:331
fib_table.h
flow_report_classify.h
u16
unsigned short u16
Definition: types.h:57
ipfix_classify_table_t::classify_table_index
u32 classify_table_index
Definition: flow_report_classify.h:71
vm
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition: nat44_ei.c:3047
vl_api_ipfix_exporter_details_t::src_address
vl_api_address_t src_address
Definition: ipfix_export.api:69
vl_api_ipfix_exporter_details_t::path_mtu
u32 path_mtu
Definition: ipfix_export.api:71
flow_report_main::template_interval
u32 template_interval
Definition: flow_report.h:125
vl_api_ipfix_exporter_details_t::udp_checksum
bool udp_checksum
Definition: ipfix_export.api:73
vl_api_ipfix_exporter_dump_t::client_index
u32 client_index
Definition: ipfix_export.api:50
flow_report_main::fib_index
u32 fib_index
Definition: flow_report.h:119
flow_report_classify_main_t::tables
ipfix_classify_table_t * tables
Definition: flow_report_classify.h:80
ADDRESS_IP6
@ ADDRESS_IP6
Definition: ip_types.api:23
vl_api_set_ipfix_exporter_t::vrf_id
u32 vrf_id
Definition: ipfix_export.api:38
vlib_process_signal_event
static void vlib_process_signal_event(vlib_main_t *vm, uword node_index, uword type_opaque, uword data)
Definition: node_funcs.h:1019
vl_api_set_ipfix_exporter_t::udp_checksum
bool udp_checksum
Definition: ipfix_export.api:41
vl_api_ipfix_classify_table_add_del_t_handler
static void vl_api_ipfix_classify_table_add_del_t_handler(vl_api_ipfix_classify_table_add_del_t *mp)
Definition: flow_api.c:228
vl_api_ipfix_exporter_details_t::collector_address
vl_api_address_t collector_address
Definition: ipfix_export.api:67
vl_api_ipfix_exporter_details_t
Reply to IPFIX exporter dump request.
Definition: ipfix_export.api:64
vnet_flow_report_add_del_args_t::opaque
opaque_t opaque
Definition: flow_report.h:153
vl_api_ipfix_classify_table_add_del_t::is_add
bool is_add
Definition: ipfix_export.api:122
vl_api_ipfix_flush_t_handler
static void vl_api_ipfix_flush_t_handler(vl_api_ipfix_flush_t *mp)
Definition: flow_api.c:347
vl_api_ipfix_classify_stream_details_t::domain_id
u32 domain_id
Definition: ipfix_export.api:105
vnet_flow_reports_reset
void vnet_flow_reports_reset(flow_report_main_t *frm)
Definition: flow_report.c:445
vec_len
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
Definition: vec_bootstrap.h:142
vl_api_ipfix_classify_table_details_t::transport_protocol
vl_api_ip_proto_t transport_protocol
Definition: ipfix_export.api:144
ipfix_classify_table_index_valid
static_always_inline u8 ipfix_classify_table_index_valid(u32 index)
Definition: flow_report_classify.h:86
vl_api_ipfix_flush_t
Definition: ipfix_export.api:147
vl_api_registration_
An API client registration, only in vpp/vlib.
Definition: api_common.h:47
REPLY_MACRO
#define REPLY_MACRO(t)
Definition: api_helper_macros.h:30
hash_get
#define hash_get(h, key)
Definition: hash.h:249
setup_message_id_table
static void setup_message_id_table(api_main_t *am)
Definition: sr_mpls_api.c:174
ipfix_classify_send_flows
vlib_frame_t * ipfix_classify_send_flows(flow_report_main_t *frm, flow_report_t *fr, vlib_frame_t *f, u32 *to_next, u32 node_index)
Definition: flow_report_classify.c:161
vl_api_ipfix_classify_stream_dump_t::client_index
u32 client_index
Definition: ipfix_export.api:94
vl_api_set_ipfix_exporter_t::collector_port
u16 collector_port
Definition: ipfix_export.api:36
vl_api_ipfix_classify_table_dump_t
IPFIX classify tables dump request.
Definition: ipfix_export.api:129
vnet_flow_report_add_del_args_t::src_port
u16 src_port
Definition: flow_report.h:156
flow_report_main::ipfix_collector
ip4_address_t ipfix_collector
Definition: flow_report.h:116
udp_local.h
vl_api_ipfix_classify_table_add_del_t::client_index
u32 client_index
Definition: ipfix_export.api:117
uword
u64 uword
Definition: types.h:112
vl_api_set_ipfix_exporter_t::client_index
u32 client_index
Definition: ipfix_export.api:33
vl_api_set_ipfix_exporter_t::src_address
vl_api_address_t src_address
Definition: ipfix_export.api:37
vl_api_ipfix_classify_table_add_del_t::transport_protocol
vl_api_ip_proto_t transport_protocol
Definition: ipfix_export.api:121
vnet_flow_report_add_del_args_t::flow_data_callback
vnet_flow_data_callback_t * flow_data_callback
Definition: flow_report.h:149
interface.h
src_port
vl_api_ip_port_and_mask_t src_port
Definition: flow_types.api:91
vl_api_ipfix_exporter_dump_t_handler
static void vl_api_ipfix_exporter_dump_t_handler(vl_api_ipfix_exporter_dump_t *mp)
Definition: flow_api.c:137
vl_api_set_ipfix_classify_stream_t
IPFIX classify stream configure request.
Definition: ipfix_export.api:82
src
vl_api_address_t src
Definition: gre.api:54
flow_report_main
Definition: flow_report.h:110
ip4_address_t
Definition: ip4_packet.h:50
flow_report_classify_main
flow_report_classify_main_t flow_report_classify_main
Definition: flow_report_classify.c:29
vl_api_set_ipfix_exporter_t_handler
static void vl_api_set_ipfix_exporter_t_handler(vl_api_set_ipfix_exporter_t *mp)
Definition: flow_api.c:40
vl_api_ipfix_exporter_details_t::template_interval
u32 template_interval
Definition: ipfix_export.api:72
flow_report.h
flow_report_main::collector_port
u16 collector_port
Definition: flow_report.h:117
flow_report_main::path_mtu
u32 path_mtu
Definition: flow_report.h:122
flow_report_classify_main_t::src_port
u16 src_port
Definition: flow_report_classify.h:79
flow_report_main::src_address
ip4_address_t src_address
Definition: flow_report.h:118
format_fns.h
ASSERT
#define ASSERT(truth)
Definition: error_bootstrap.h:69
vl_api_ipfix_exporter_details_t::context
u32 context
Definition: ipfix_export.api:66
ipfix_classify_table_t::transport_protocol
u8 transport_protocol
Definition: flow_report_classify.h:73
u32
unsigned int u32
Definition: types.h:88
vl_api_set_ipfix_exporter_t::template_interval
u32 template_interval
Definition: ipfix_export.api:40
vl_api_ipfix_exporter_dump_t::context
u32 context
Definition: ipfix_export.api:51
vl_api_ipfix_classify_table_details_t::context
u32 context
Definition: ipfix_export.api:141
vnet_flow_report_add_del_args_t
Definition: flow_report.h:147
REPLY_MSG_ID_BASE
#define REPLY_MSG_ID_BASE
Definition: flow_api.c:36
api_helper_macros.h
ipfix_classify_template_rewrite
u8 * ipfix_classify_template_rewrite(flow_report_main_t *frm, flow_report_t *fr, ip4_address_t *collector_address, ip4_address_t *src_address, u16 collector_port, ipfix_report_element_t *elts, u32 n_elts, u32 *stream_index)
Definition: flow_report_classify.c:32
vl_api_set_ipfix_exporter_t
Configure IPFIX exporter process request.
Definition: ipfix_export.api:31
clib_memset
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
vlib_main_t
Definition: main.h:102
ip_address_encode
void ip_address_encode(const ip46_address_t *in, ip46_type_t type, vl_api_address_t *out)
Definition: ip_types_api.c:206
vlib_get_main
static vlib_main_t * vlib_get_main(void)
Definition: global_funcs.h:38
u8
unsigned char u8
Definition: types.h:56
clib_error_t
Definition: clib_error.h:21
ipfix_classify_table_t
Definition: flow_report_classify.h:69
vl_api_set_ipfix_classify_stream_t::src_port
u16 src_port
Definition: ipfix_export.api:86
flow_report_process_node
vlib_node_registration_t flow_report_process_node
(constructor) VLIB_REGISTER_NODE (flow_report_process_node)
Definition: flow_report.c:336
vl_api_set_ipfix_exporter_t::path_mtu
u32 path_mtu
Definition: ipfix_export.api:39
vl_api_ipfix_classify_table_details_t::ip_version
vl_api_address_family_t ip_version
Definition: ipfix_export.api:143
vl_api_ipfix_exporter_dump_t
IPFIX exporter dump request.
Definition: ipfix_export.api:48
ipfix_classify_table_t::ip_version
u8 ip_version
Definition: flow_report_classify.h:72
i
int i
Definition: flowhash_template.h:376
vl_api_ipfix_classify_table_dump_t::context
u32 context
Definition: ipfix_export.api:131
vl_api_ipfix_flush_t::client_index
u32 client_index
Definition: ipfix_export.api:148
vl_api_ipfix_classify_stream_details_t::src_port
u16 src_port
Definition: ipfix_export.api:106
vl_api_set_ipfix_classify_stream_t_handler
static void vl_api_set_ipfix_classify_stream_t_handler(vl_api_set_ipfix_classify_stream_t *mp)
Definition: flow_api.c:178
context
u32 context
Definition: ip.api:852
vl_api_ipfix_exporter_details_t::vrf_id
u32 vrf_id
Definition: ipfix_export.api:70
vl_api_ipfix_classify_table_add_del_t::table_id
u32 table_id
Definition: ipfix_export.api:119
rv
int __clib_unused rv
Definition: application.c:491
vrf_id
u32 vrf_id
Definition: nat44_ed.api:1053
vnet_flow_report_add_del
int vnet_flow_report_add_del(flow_report_main_t *frm, vnet_flow_report_add_del_args_t *a, u16 *template_id)
Definition: flow_report.c:344
vnet.h
api_errno.h
ipfix_classify_add_table
static_always_inline ipfix_classify_table_t * ipfix_classify_add_table(void)
Definition: flow_report_classify.h:94
vl_api_ipfix_exporter_details_t::collector_port
u16 collector_port
Definition: ipfix_export.api:68
udp_checksum
u16 udp_checksum(udp_header_t *uh, u32 udp_len, void *ih, u8 version)
Definition: packets.c:116
path_mtu
u16 path_mtu
Definition: ip.api:855
ADDRESS_IP4
@ ADDRESS_IP4
Definition: ip_types.api:22
vl_api_set_ipfix_exporter_t::collector_address
vl_api_address_t collector_address
Definition: ipfix_export.api:35
ip4_main_t
IPv4 main type.
Definition: ip4.h:107
ip_types_api.h
ipfix_classify_delete_table
static_always_inline void ipfix_classify_delete_table(u32 index)
Definition: flow_report_classify.h:107
vnet_flow_report_add_del_args_t::rewrite_callback
vnet_flow_rewrite_callback_t * rewrite_callback
Definition: flow_report.h:150
vl_api_ipfix_classify_table_dump_t::client_index
u32 client_index
Definition: ipfix_export.api:130
vl_api_ipfix_classify_table_details_t
Reply to IPFIX classify tables dump request.
Definition: ipfix_export.api:140
vl_api_ipfix_classify_stream_details_t::context
u32 context
Definition: ipfix_export.api:104
vl_api_ipfix_classify_stream_details_t
Reply to IPFIX classify stream dump request.
Definition: ipfix_export.api:103
vnet_flow_report_add_del_args_t::is_add
int is_add
Definition: flow_report.h:154
vl_msg_api_alloc
void * vl_msg_api_alloc(int nbytes)
Definition: memory_shared.c:199
classify_table_index
u32 classify_table_index
Definition: fib_types.api:68
send_ipfix_classify_table_details
static void send_ipfix_classify_table_details(u32 table_index, vl_api_registration_t *reg, u32 context)
Definition: flow_api.c:310