Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Harmonize vec/pool_get_aligned object sizes and alignment requests
[vpp.git]
/
src
/
vnet
/
fib
/
mpls_fib.c
diff --git
a/src/vnet/fib/mpls_fib.c
b/src/vnet/fib/mpls_fib.c
index
5cd0fd2
..
223a0dd
100644
(file)
--- a/
src/vnet/fib/mpls_fib.c
+++ b/
src/vnet/fib/mpls_fib.c
@@
-61,11
+61,6
@@
*/
static index_t mpls_fib_drop_dpo_index = INDEX_INVALID;
*/
static index_t mpls_fib_drop_dpo_index = INDEX_INVALID;
-/**
- * FIXME
- */
-#define MPLS_FLOW_HASH_DEFAULT 0
-
static inline u32
mpls_fib_entry_mk_key (mpls_label_t label,
mpls_eos_bit_t eos)
static inline u32
mpls_fib_entry_mk_key (mpls_label_t label,
mpls_eos_bit_t eos)
@@
-88,7
+83,8
@@
mpls_fib_index_from_table_id (u32 table_id)
}
static u32
}
static u32
-mpls_fib_create_with_table_id (u32 table_id)
+mpls_fib_create_with_table_id (u32 table_id,
+ fib_source_t src)
{
dpo_id_t dpo = DPO_INVALID;
fib_table_t *fib_table;
{
dpo_id_t dpo = DPO_INVALID;
fib_table_t *fib_table;
@@
-96,23
+92,23
@@
mpls_fib_create_with_table_id (u32 table_id)
mpls_fib_t *mf;
int i;
mpls_fib_t *mf;
int i;
- pool_get_aligned(mpls_main.fibs, fib_table, CLIB_CACHE_LINE_BYTES);
+ pool_get(mpls_main.fibs, fib_table);
+ pool_get_aligned(mpls_main.mpls_fibs, mf, CLIB_CACHE_LINE_BYTES);
+
+ ASSERT((fib_table - mpls_main.fibs) ==
+ (mf - mpls_main.mpls_fibs));
+
memset(fib_table, 0, sizeof(*fib_table));
fib_table->ft_proto = FIB_PROTOCOL_MPLS;
memset(fib_table, 0, sizeof(*fib_table));
fib_table->ft_proto = FIB_PROTOCOL_MPLS;
- fib_table->ft_index =
- (fib_table - mpls_main.fibs);
+ fib_table->ft_index = (fib_table - mpls_main.fibs);
hash_set (mpls_main.fib_index_by_table_id, table_id, fib_table->ft_index);
hash_set (mpls_main.fib_index_by_table_id, table_id, fib_table->ft_index);
- fib_table->ft_table_id =
- table_id;
- fib_table->ft_flow_hash_config =
- MPLS_FLOW_HASH_DEFAULT;
- fib_table->v4.fwd_classify_table_index = ~0;
- fib_table->v4.rev_classify_table_index = ~0;
+ fib_table->ft_table_id = table_id;
+ fib_table->ft_flow_hash_config = MPLS_FLOW_HASH_DEFAULT;
- fib_table_lock(fib_table->ft_index, FIB_PROTOCOL_MPLS);
+ fib_table_lock(fib_table->ft_index, FIB_PROTOCOL_MPLS
, src
);
if (INDEX_INVALID == mpls_fib_drop_dpo_index)
{
if (INDEX_INVALID == mpls_fib_drop_dpo_index)
{
@@
-122,7
+118,6
@@
mpls_fib_create_with_table_id (u32 table_id)
drop_dpo_get(DPO_PROTO_MPLS));
}
drop_dpo_get(DPO_PROTO_MPLS));
}
- mf = &fib_table->mpls;
mf->mf_entries = hash_create(0, sizeof(fib_node_index_t));
for (i = 0; i < MPLS_FIB_DB_SIZE; i++)
{
mf->mf_entries = hash_create(0, sizeof(fib_node_index_t));
for (i = 0; i < MPLS_FIB_DB_SIZE; i++)
{
@@
-164,6
+159,7
@@
mpls_fib_create_with_table_id (u32 table_id)
lookup_dpo_add_or_lock_w_fib_index(0, // unused
DPO_PROTO_IP4,
lookup_dpo_add_or_lock_w_fib_index(0, // unused
DPO_PROTO_IP4,
+ LOOKUP_UNICAST,
LOOKUP_INPUT_DST_ADDR,
LOOKUP_TABLE_FROM_INPUT_INTERFACE,
&dpo);
LOOKUP_INPUT_DST_ADDR,
LOOKUP_TABLE_FROM_INPUT_INTERFACE,
&dpo);
@@
-178,6
+174,7
@@
mpls_fib_create_with_table_id (u32 table_id)
lookup_dpo_add_or_lock_w_fib_index(0, //unsued
DPO_PROTO_MPLS,
lookup_dpo_add_or_lock_w_fib_index(0, //unsued
DPO_PROTO_MPLS,
+ LOOKUP_UNICAST,
LOOKUP_INPUT_DST_ADDR,
LOOKUP_TABLE_FROM_INPUT_INTERFACE,
&dpo);
LOOKUP_INPUT_DST_ADDR,
LOOKUP_TABLE_FROM_INPUT_INTERFACE,
&dpo);
@@
-196,6
+193,7
@@
mpls_fib_create_with_table_id (u32 table_id)
lookup_dpo_add_or_lock_w_fib_index(0, //unused
DPO_PROTO_IP6,
lookup_dpo_add_or_lock_w_fib_index(0, //unused
DPO_PROTO_IP6,
+ LOOKUP_UNICAST,
LOOKUP_INPUT_DST_ADDR,
LOOKUP_TABLE_FROM_INPUT_INTERFACE,
&dpo);
LOOKUP_INPUT_DST_ADDR,
LOOKUP_TABLE_FROM_INPUT_INTERFACE,
&dpo);
@@
-209,6
+207,7
@@
mpls_fib_create_with_table_id (u32 table_id)
prefix.fp_eos = MPLS_NON_EOS;
lookup_dpo_add_or_lock_w_fib_index(0, // unsued
DPO_PROTO_MPLS,
prefix.fp_eos = MPLS_NON_EOS;
lookup_dpo_add_or_lock_w_fib_index(0, // unsued
DPO_PROTO_MPLS,
+ LOOKUP_UNICAST,
LOOKUP_INPUT_DST_ADDR,
LOOKUP_TABLE_FROM_INPUT_INTERFACE,
&dpo);
LOOKUP_INPUT_DST_ADDR,
LOOKUP_TABLE_FROM_INPUT_INTERFACE,
&dpo);
@@
-222,28
+221,30
@@
mpls_fib_create_with_table_id (u32 table_id)
}
u32
}
u32
-mpls_fib_table_find_or_create_and_lock (u32 table_id)
+mpls_fib_table_find_or_create_and_lock (u32 table_id,
+ fib_source_t src)
{
u32 index;
index = mpls_fib_index_from_table_id(table_id);
if (~0 == index)
{
u32 index;
index = mpls_fib_index_from_table_id(table_id);
if (~0 == index)
- return mpls_fib_create_with_table_id(table_id);
+ return mpls_fib_create_with_table_id(table_id
, src
);
- fib_table_lock(index, FIB_PROTOCOL_MPLS);
+ fib_table_lock(index, FIB_PROTOCOL_MPLS
, src
);
return (index);
}
u32
return (index);
}
u32
-mpls_fib_table_create_and_lock (
void
)
+mpls_fib_table_create_and_lock (
fib_source_t src
)
{
{
- return (mpls_fib_create_with_table_id(~0));
+ return (mpls_fib_create_with_table_id(~0
, src
));
}
void
}
void
-mpls_fib_table_destroy (
mpls_fib_t *mf
)
+mpls_fib_table_destroy (
u32 fib_index
)
{
{
- fib_table_t *fib_table = (fib_table_t*)mf;
+ fib_table_t *fib_table = pool_elt_at_index(mpls_main.fibs, fib_index);
+ mpls_fib_t *mf = pool_elt_at_index(mpls_main.mpls_fibs, fib_index);
fib_prefix_t prefix = {
.fp_proto = FIB_PROTOCOL_MPLS,
};
fib_prefix_t prefix = {
.fp_proto = FIB_PROTOCOL_MPLS,
};
@@
-274,6
+275,7
@@
mpls_fib_table_destroy (mpls_fib_t *mf)
}
hash_free(mf->mf_entries);
}
hash_free(mf->mf_entries);
+ pool_put(mpls_main.mpls_fibs, mf);
pool_put(mpls_main.fibs, fib_table);
}
pool_put(mpls_main.fibs, fib_table);
}
@@
-317,8
+319,15
@@
mpls_fib_forwarding_table_update (mpls_fib_t *mf,
{
mpls_label_t key;
{
mpls_label_t key;
- ASSERT(DPO_LOAD_BALANCE == dpo->dpoi_type);
-
+ ASSERT((DPO_LOAD_BALANCE == dpo->dpoi_type) ||
+ (DPO_REPLICATE == dpo->dpoi_type));
+ if (CLIB_DEBUG > 0)
+ {
+ if (DPO_REPLICATE == dpo->dpoi_type)
+ ASSERT(dpo->dpoi_index & MPLS_IS_REPLICATE);
+ if (DPO_LOAD_BALANCE == dpo->dpoi_type)
+ ASSERT(!(dpo->dpoi_index & MPLS_IS_REPLICATE));
+ }
key = mpls_fib_entry_mk_key(label, eos);
mf->mf_lbs[key] = dpo->dpoi_index;
key = mpls_fib_entry_mk_key(label, eos);
mf->mf_lbs[key] = dpo->dpoi_index;
@@
-336,13
+345,6
@@
mpls_fib_forwarding_table_reset (mpls_fib_t *mf,
mf->mf_lbs[key] = mpls_fib_drop_dpo_index;
}
mf->mf_lbs[key] = mpls_fib_drop_dpo_index;
}
-flow_hash_config_t
-mpls_fib_table_get_flow_hash_config (u32 fib_index)
-{
- // FIXME.
- return (0);
-}
-
void
mpls_fib_table_walk (mpls_fib_t *mpls_fib,
fib_table_walk_fn_t fn,
void
mpls_fib_table_walk (mpls_fib_t *mpls_fib,
fib_table_walk_fn_t fn,
@@
-357,6
+359,18
@@
mpls_fib_table_walk (mpls_fib_t *mpls_fib,
}));
}
}));
}
+u8 *
+format_mpls_fib_table_memory (u8 * s, va_list * args)
+{
+ u64 n_tables, mem;
+
+ n_tables = pool_elts(mpls_main.fibs);
+ mem = n_tables * sizeof(mpls_fib_t);
+ s = format(s, "%=30s %=6ld %=8ld\n", "MPLS", n_tables, mem);
+
+ return (s);
+}
+
static void
mpls_fib_table_show_all (const mpls_fib_t *mpls_fib,
vlib_main_t * vm)
static void
mpls_fib_table_show_all (const mpls_fib_t *mpls_fib,
vlib_main_t * vm)
@@
-436,11
+450,11
@@
mpls_fib_show (vlib_main_t * vm,
if (MPLS_LABEL_INVALID == label)
{
if (MPLS_LABEL_INVALID == label)
{
- mpls_fib_table_show_all(
&(fib_table->mpls
), vm);
+ mpls_fib_table_show_all(
mpls_fib_get(fib_table->ft_index
), vm);
}
else
{
}
else
{
- mpls_fib_table_show_one(
&(fib_table->mpls
), label, vm);
+ mpls_fib_table_show_one(
mpls_fib_get(fib_table->ft_index
), label, vm);
}
}));
}
}));