aboutsummaryrefslogtreecommitdiffstats
path: root/src/vppinfra/bihash_8_8.h
blob: 2deb64ef438a599aebad0c831d205be6d691e195 (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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 * Copyright (c) 2015 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.
 */
#undef BIHASH_TYPE
#undef BIHASH_KVP_CACHE_SIZE
#undef BIHASH_KVP_PER_PAGE

#define BIHASH_TYPE _8_8
#define BIHASH_KVP_PER_PAGE 4
#define BIHASH_KVP_CACHE_SIZE 0

#ifndef __included_bihash_8_8_h__
#define __included_bihash_8_8_h__

#include <vppinfra/heap.h>
#include <vppinfra/format.h>
#include <vppinfra/pool.h>
#include <vppinfra/xxhash.h>
#include <vppinfra/crc32.h>

/** 8 octet key, 8 octet key value pair */
typedef struct
{
  u64 key;			/**< the key */
  u64 value;			/**< the value */
} clib_bihash_kv_8_8_t;

/** Decide if a clib_bihash_kv_8_8_t instance is free
    @param v- pointer to the (key,value) pair
*/
static inline int
clib_bihash_is_free_8_8 (clib_bihash_kv_8_8_t * v)
{
  if (v->key == ~0ULL && v->value == ~0ULL)
    return 1;
  return 0;
}

/** Hash a clib_bihash_kv_8_8_t instance
    @param v - pointer to the (key,value) pair, hash the key (only)
*/
static inline u64
clib_bihash_hash_8_8 (clib_bihash_kv_8_8_t * v)
{
  /* Note: to torture-test linear scan, make this fn return a constant */
#ifdef clib_crc32c_uses_intrinsics
  return clib_crc32c ((u8 *) & v->key, 8);
#else
  return clib_xxhash (v->key);
#endif
}

/** Format a clib_bihash_kv_8_8_t instance
    @param s - u8 * vector under construction
    @param args (vararg) - the (key,value) pair to format
    @return s - the u8 * vector under construction
*/
static inline u8 *
format_bihash_kvp_8_8 (u8 * s, va_list * args)
{
  clib_bihash_kv_8_8_t *v = va_arg (*args, clib_bihash_kv_8_8_t *);

  s = format (s, "key %llu value %llu", v->key, v->value);
  return s;
}

/** Compare two clib_bihash_kv_8_8_t instances
    @param a - first key
    @param b - second key
*/
static inline int
clib_bihash_key_compare_8_8 (u64 a, u64 b)
{
  return a == b;
}

#undef __included_bihash_template_h__
#include <vppinfra/bihash_template.h>

#endif /* __included_bihash_8_8_h__ */

/*
 * fd.io coding-style-patch-verification: ON
 *
 * Local Variables:
 * eval: (c-set-style "gnu")
 * End:
 */
n class="n">ip6; if (vl_api_string_len (&mp->port_desc) > 0) { port_desc = vl_api_from_api_to_new_c_string (&mp->port_desc); } ip4_address_decode (mp->mgmt_ip4, &ip4); if (ip4.as_u32 != 0) { vec_validate (mgmt_ip4, sizeof (ip4_address_t) - 1); clib_memcpy (mgmt_ip4, &ip4, vec_len (mgmt_ip4)); } ip6_address_decode (mp->mgmt_ip6, &ip6); if (!ip6_address_is_zero (&ip6)) { vec_validate (mgmt_ip6, sizeof (ip6_address_t) - 1); clib_memcpy (mgmt_ip6, &ip6, vec_len (mgmt_ip6)); } if (memcmp (mp->mgmt_oid, no_data, strlen ((char *) mp->mgmt_oid)) != 0) { vec_validate (mgmt_oid, strlen ((char *) mp->mgmt_oid) - 1); strncpy ((char *) mgmt_oid, (char *) mp->mgmt_oid, vec_len (mgmt_oid)); } VALIDATE_SW_IF_INDEX (mp); if (lldp_cfg_intf_set (ntohl (mp->sw_if_index), (u8 **) & port_desc, &mgmt_ip4, &mgmt_ip6, &mgmt_oid, mp->enable) != lldp_ok) { vec_free (port_desc); vec_free (mgmt_ip4); vec_free (mgmt_ip6); vec_free (mgmt_oid); rv = VNET_API_ERROR_INVALID_VALUE; } BAD_SW_IF_INDEX_LABEL; REPLY_MACRO (VL_API_SW_INTERFACE_SET_LLDP_REPLY); } /* * * lldp_api_hookup * * Add vpe's API message handlers to the table. * * vlib has already mapped shared memory and * * added the client registration handlers. * * See .../vlib-api/vlibmemory/memclnt_vlib.c:memclnt_process() * */ #include <lldp/lldp.api.c> static clib_error_t * lldp_api_hookup (vlib_main_t * vm) { /* * Set up the (msg_name, crc, message-id) table */ lldp_base_msg_id = setup_message_id_table (); return 0; } VLIB_API_INIT_FUNCTION (lldp_api_hookup); #include <vlib/unix/plugin.h> #include <vpp/app/version.h> /* *INDENT-OFF* */ VLIB_PLUGIN_REGISTER () = { .version = VPP_BUILD_VER, .description = "Link Layer Discovery Protocol (LLDP)", }; /* *INDENT-ON* */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */