- if (fib_entry_has_multiple_srcs(fib_entry))
- {
- vec_add1(fib_entry->fe_u_src.fe_srcs, esrc);
-
- vec_sort_with_function(fib_entry->fe_u_src.fe_srcs,
- fib_entry_src_cmp_for_sort);
- }
- else
- {
- /*
- * is this the very first source
- */
- if (FIB_SOURCE_INVALID == fib_entry->fe_u_src.fe_src.fes_src)
- {
- clib_memcpy(&fib_entry->fe_u_src.fe_src, &esrc, sizeof(esrc));
- }
- else
- {
- /*
- * transitioning to multiple sources.
- * allocate the vecotr of sources.
- */
- fib_entry_src_t *srcs = NULL;
-
- vec_validate(srcs, 1);
-
- /*
- * sorted insert
- */
- if (fib_entry->fe_u_src.fe_src.fes_src < esrc.fes_src)
- {
- srcs[0] = fib_entry->fe_u_src.fe_src;
- srcs[1] = esrc;
- }
- else
- {
- srcs[0] = esrc;
- srcs[1] = fib_entry->fe_u_src.fe_src;
- }
- memset(&fib_entry->fe_u_src.fe_src, 0,
- sizeof(fib_entry->fe_u_src.fe_src));
- fib_entry->fe_u_src.fe_srcs = srcs;
-
- fib_entry->fe_node.fn_pad |= FIB_ENTRY_NODE_FLAG_MULTIPLE_SRCS;
- }
- }
-}
-
-u32
-fib_entry_has_multiple_srcs(const fib_entry_t * fib_entry)
-{
- return (fib_entry->fe_node.fn_pad & FIB_ENTRY_NODE_FLAG_MULTIPLE_SRCS);
+ vec_add1(fib_entry->fe_srcs, esrc);
+ vec_sort_with_function(fib_entry->fe_srcs,
+ fib_entry_src_cmp_for_sort);