summaryrefslogtreecommitdiffstats
path: root/src/vppinfra/test_fpool.c
blob: e2d67f1690793cbfbdbf590f6c7d937527bfd3be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
 * Copyright (c) 2017 Cisco and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
*/

#include <vppinfra/pool.h>

/* can be a very large size */
#define NELTS 1024

int
main (int argc, char *argv[])
{
  u32 *junk = 0;
  int i;
  u32 *tp = 0;
  u32 *indices = 0;

  clib_mem_init (0, 3ULL << 30);

  vec_validate (indices, NELTS - 1);
  _vec_len (indices) = 0;

  pool_init_fixed (tp, NELTS);

  for (i = 0; i < NELTS; i++)
    {
      pool_get (tp, junk);
      vec_add1 (indices, junk - tp);
      *junk = i;
    }

  for (i = 0; i < NELTS; i++)
    {
      junk = pool_elt_at_index (tp, indices[i]);
      ASSERT (*junk == i);
    }

  fformat (stdout, "%d pool elts before deletes\n", pool_elts (tp));

  pool_put_index (tp, indices[12]);
  pool_put_index (tp, indices[43]);

  fformat (stdout, "%d pool elts after deletes\n", pool_elts (tp));

  pool_validate (tp);

  pool_free (tp);
  return 0;
}

/*
 * fd.io coding-style-patch-verification: ON
 *
 * Local Variables:
 * eval: (c-set-style "gnu")
 * End:
 */
sh_16_8_t b4_hash; /* B4 pool */ dslite_b4_t *b4s; /* Session pool */ dslite_session_t *sessions; /* Pool of doubly-linked list elements */ dlist_elt_t *list_pool; } dslite_per_thread_data_t; typedef struct { ip6_address_t aftr_ip6_addr; ip4_address_t aftr_ip4_addr; ip6_address_t b4_ip6_addr; ip4_address_t b4_ip4_addr; dslite_per_thread_data_t *per_thread_data; snat_address_t *addr_pool; u32 num_workers; u32 first_worker_index; u16 port_per_thread; /* If set then the DSLite component behaves as CPE/B4 * otherwise it behaves as AFTR */ u8 is_ce; } dslite_main_t; typedef struct { u32 next_index; u32 session_index; } dslite_trace_t; typedef struct { u32 next_index; } dslite_ce_trace_t; #define foreach_dslite_error \ _(IN2OUT, "valid in2out DS-Lite packets") \ _(OUT2IN, "valid out2in DS-Lite packets") \ _(CE_ENCAP, "valid CE encap DS-Lite packets") \ _(CE_DECAP, "valid CE decap DS-Lite packets") \ _(NO_TRANSLATION, "no translation") \ _(BAD_IP6_PROTOCOL, "bad ip6 protocol") \ _(OUT_OF_PORTS, "out of ports") \ _(UNSUPPORTED_PROTOCOL, "unsupported protocol") \ _(BAD_ICMP_TYPE, "unsupported icmp type") \ _(UNKNOWN, "unknown") typedef enum { #define _(sym,str) DSLITE_ERROR_##sym, foreach_dslite_error #undef _ DSLITE_N_ERROR, } dslite_error_t; extern dslite_main_t dslite_main; extern vlib_node_registration_t dslite_in2out_node; extern vlib_node_registration_t dslite_in2out_slowpath_node; extern vlib_node_registration_t dslite_out2in_node; extern vlib_node_registration_t dslite_ce_encap_node; extern vlib_node_registration_t dslite_ce_decap_node; void dslite_init (vlib_main_t * vm); void dslite_set_ce (dslite_main_t * dm, u8 set); int dslite_set_aftr_ip6_addr (dslite_main_t * dm, ip6_address_t * addr); int dslite_set_b4_ip6_addr (dslite_main_t * dm, ip6_address_t * addr); int dslite_set_aftr_ip4_addr (dslite_main_t * dm, ip4_address_t * addr); int dslite_set_b4_ip4_addr (dslite_main_t * dm, ip4_address_t * addr); int dslite_add_del_pool_addr (dslite_main_t * dm, ip4_address_t * addr, u8 is_add); u8 *format_dslite_trace (u8 * s, va_list * args); u8 *format_dslite_ce_trace (u8 * s, va_list * args); #endif /* __included_dslite_h__ */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */