|
FD.io VPP
v21.06-3-gbb25fbf28
Vector Packet Processing
|
Go to the documentation of this file.
106 if ((1<<attr) & flag) {
121 if ((1<<sattr) & flag) {
140 level = va_arg (*args,
int);
154 s =
format (s,
" refs:%d",
src->fes_ref_count);
156 s =
format(s,
" entry-flags:%U",
160 s =
format(s,
" src-flags:%U",
172 s =
format (s,
"\n forwarding: ");
183 s =
format (s,
" UNRESOLVED\n");
188 s =
format(s,
" %U-chain\n %U",
199 s =
format (s,
" Delegates:\n");
209 s =
format(s,
" Children:");
519 return (&fib_entry->
fe_lb);
652 if (!was_import && is_import)
669 else if (was_import && !is_import)
692 if (!was_attached && is_attached)
753 return (fib_entry_index);
782 return (fib_entry_index);
871 old_flags, new_source));
921 ASSERT(NULL != fib_entry);
938 int has_only_inherited_sources = 1;
944 has_only_inherited_sources = 0;
948 if (has_only_inherited_sources)
1018 ASSERT(NULL != fib_entry);
1109 ASSERT(NULL != fib_entry);
1239 ASSERT(NULL != fib_entry);
1427 int was_looped, is_looped;
1442 if (!!was_looped != !!is_looped)
1603 return ((clib_net_to_host_u32(a1->
data_u32) >
1604 clib_net_to_host_u32(a2->
data_u32) ) ?
1610 const ip6_address_t * a2)
1615 int cmp = (clib_net_to_host_u16 (a1->as_u16[
i]) -
1616 clib_net_to_host_u16 (a2->as_u16[
i]));
1665 *fib_entry_index2));
1724 return (
ctx.rpaths);
1819 .path =
"show fib entry",
1821 .short_help =
"show fib entry",
@ FIB_NODE_BW_REASON_FLAG_ADJ_DOWN
void fib_entry_unlock(fib_node_index_t fib_entry_index)
fib_entry_t * fib_entry_src_action_path_swap(fib_entry_t *fib_entry, fib_source_t source, fib_entry_flag_t flags, const fib_route_path_t *rpaths)
fib_entry_flag_t fib_entry_get_flags_i(const fib_entry_t *fib_entry)
Result from a cover update/change.
u32 fib_entry_pool_size(void)
index_t dpoi_index
the index of objects of that type
static fib_entry_src_flag_t fib_entry_source_removed(fib_entry_t *fib_entry, fib_entry_flag_t old_flags)
#define DPO_INVALID
An initialiser for DPOs declared on the stack.
void fib_entry_src_mk_lb(fib_entry_t *fib_entry, fib_source_t source, fib_forward_chain_type_t fct, dpo_id_t *dpo_lb)
static fib_entry_t * fib_entry_alloc(u32 fib_index, const fib_prefix_t *prefix, fib_node_index_t *fib_entry_index)
void fib_entry_delegate_remove(fib_entry_t *fib_entry, fib_entry_delegate_type_t type)
static const fib_node_vft_t fib_entry_vft
fib_forward_chain_type_t fib_entry_delegate_type_to_chain_type(fib_entry_delegate_type_t fdt)
static clib_error_t * show_fib_entry_command(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
@ FIB_NODE_BW_REASON_FLAG_INTERFACE_UP
static const char * fib_src_attribute_names[]
void fib_entry_special_add(fib_node_index_t fib_entry_index, fib_source_t source, fib_entry_flag_t flags, const dpo_id_t *dpo)
const fib_prefix_t * fib_entry_get_prefix(fib_node_index_t fib_entry_index)
void fib_attached_export_cover_update(fib_entry_t *fib_entry)
If this entry is tracking a cover (in another table) then that cover has been updated.
enum fib_node_back_walk_rc_t_ fib_node_back_walk_rc_t
Return code from a back walk function.
void fib_entry_contribute_urpf(fib_node_index_t entry_index, index_t urpf)
Contribute the set of Adjacencies that this entry forwards with to build the uRPF list of its childre...
@ FIB_NODE_BW_REASON_FLAG_NONE
Path encode context to use when walking a path-list to encode paths.
enum fib_entry_src_attribute_t_ fib_entry_src_attribute_t
Flags for the source data.
enum dpo_proto_t_ dpo_proto_t
Data path protocol.
u8 * format_fib_path_ext_list(u8 *s, va_list *args)
static fib_entry_src_flag_t fib_entry_src_burn_only_inherited(fib_entry_t *fib_entry)
u8 * format_fib_forw_chain_type(u8 *s, va_list *args)
void fib_entry_cover_updated(fib_node_index_t fib_entry_index)
dpo_type_t dpoi_type
the type
void fib_entry_set_flow_hash_config(fib_node_index_t fib_entry_index, flow_hash_config_t hash_config)
#define ADJ_INDEX_INVALID
Invalid ADJ index - used when no adj is known likewise blazoned capitals INVALID speak volumes where ...
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
int fib_entry_cmp_for_sort(void *i1, void *i2)
#define FIB_ENTRY_FORMAT_DETAIL
u8 * fib_path_list_format(fib_node_index_t path_list_index, u8 *s)
#define FIB_ENTRY_FORMAT_DETAIL2
enum fib_entry_attribute_t_ fib_entry_attribute_t
The different sources that can create a route.
@ FIB_FORW_CHAIN_TYPE_MPLS_EOS
Contribute an object that is to be used to forward end-of-stack MPLS packets.
vlib_log_class_t vlib_log_register_class(char *class, char *subclass)
static int fib_ip6_address_compare(const ip6_address_t *a1, const ip6_address_t *a2)
void fib_table_assert_empty(const fib_table_t *fib_table)
Debug function.
vlib_main_t vlib_node_runtime_t * node
fib_node_list_t fn_children
Vector of nodes that depend upon/use/share this node.
flow_hash_config_t lb_hash_config
the hash config to use when selecting a bucket.
A FIB graph nodes virtual function table.
@ FIB_ENTRY_FLAG_ATTACHED
Information related to the source of a FIB entry.
#define FIB_NODE_INDEX_INVALID
@ FIB_FORW_CHAIN_TYPE_MCAST_IP4
Contribute an object that is to be used to forward IP4 packets.
void fib_entry_src_action_reactivate(fib_entry_t *fib_entry, fib_source_t source)
fib_node_index_t fe_parent
the path-list for which this entry is a child.
u32 fn_locks
Number of dependents on this node.
@ FIB_FORW_CHAIN_TYPE_ETHERNET
Contribute an object that is to be used to forward Ethernet packets.
u16 fp_len
The mask length.
#define pool_put(P, E)
Free an object E in pool P.
u32 fib_path_list_get_resolving_interface(fib_node_index_t path_list_index)
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
static fib_forward_chain_type_t fib_entry_chain_type_mcast_to_ucast(fib_forward_chain_type_t fct)
u8 * fib_node_children_format(fib_node_list_t list, u8 *s)
fib_entry_src_flag_t fib_entry_src_action_path_remove(fib_entry_t *fib_entry, fib_source_t source, const fib_route_path_t *rpaths)
fib_source_priority_cmp_t fib_source_cmp(fib_source_t s1, fib_source_t s2)
void fib_entry_src_inherit(const fib_entry_t *cover, fib_entry_t *covered)
static fib_source_t fib_entry_src_get_source(const fib_entry_src_t *esrc)
fib_entry_delegate_t * fib_entry_delegate_find(const fib_entry_t *fib_entry, fib_entry_delegate_type_t type)
void fib_entry_inherit(fib_node_index_t cover, fib_node_index_t covered)
fib_entry_inherit
adj_index_t fib_entry_get_adj(fib_node_index_t fib_entry_index)
fib_entry_src_flag_t fib_entry_src_action_remove_or_update_inherit(fib_entry_t *fib_entry, fib_source_t source)
enum fib_node_type_t_ fib_node_type_t
The types of nodes in a FIB graph.
static fib_entry_src_t * fib_entry_get_best_src_i(const fib_entry_t *fib_entry)
u8 * format_fib_entry_src_flags(u8 *s, va_list *args)
void fib_entry_contribute_forwarding(fib_node_index_t fib_entry_index, fib_forward_chain_type_t fct, dpo_id_t *dpo)
void fib_entry_src_action_uninstall(fib_entry_t *fib_entry)
@ FIB_ENTRY_SRC_FLAG_INHERITED
fib_path_ext_list_t fes_path_exts
A vector of path extensions.
u32 fib_node_get_n_children(fib_node_type_t parent_type, fib_node_index_t parent_index)
#define FOR_EACH_FIB_SRC_ATTRIBUTE(_item)
static vlib_cli_command_t show_fib_entry
(constructor) VLIB_CLI_COMMAND (show_fib_entry)
@ FIB_FORW_CHAIN_TYPE_NSH
Contribute an object that is to be used to forward NSH packets.
fib_node_bw_reason_flag_t fnbw_reason
The reason/trigger for the backwalk.
int fib_entry_is_resolved(fib_node_index_t fib_entry_index)
Return !0 is the entry is resolved, i.e.
#define pool_is_free_index(P, I)
Use free bitmap to query whether given index is free.
@ FIB_NODE_BW_REASON_FLAG_EVALUATE
@ FIB_FORW_CHAIN_TYPE_UNICAST_IP4
Contribute an object that is to be used to forward IP4 packets.
static fib_node_back_walk_rc_t fib_entry_back_walk_notify(fib_node_t *node, fib_node_back_walk_ctx_t *ctx)
A protocol Independent FIB table.
#define pool_foreach(VAR, POOL)
Iterate through pool.
fib_entry_delegate_type_t fib_entry_chain_type_to_delegate_type(fib_forward_chain_type_t fct)
u32 fib_entry_child_add(fib_node_index_t fib_entry_index, fib_node_type_t child_type, fib_node_index_t child_index)
const dpo_id_t * load_balance_get_bucket(index_t lbi, u32 bucket)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
enum fib_entry_flag_t_ fib_entry_flag_t
fib_node_index_t fib_entry_create_special(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, const dpo_id_t *dpo)
u32 fe_fib_index
The index of the FIB table this entry is in.
#define MPLS_IS_REPLICATE
The top bit of the index, which is the result of the MPLS lookup is used to determine if the DPO is a...
fib_entry_src_t * fe_srcs
Vector of source infos.
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
fib_node_index_t ft_index
Index into FIB vector.
@ FIB_SOURCE_INVALID
An invalid source This is not a real source, so don't use it to source a prefix.
enum fib_forward_chain_type_t_ fib_forward_chain_type_t
FIB output chain type.
void fib_entry_lock(fib_node_index_t fib_entry_index)
const dpo_id_t * fib_entry_contribute_ip_forwarding(fib_node_index_t fib_entry_index)
void fib_entry_cover_update_notify(fib_entry_t *fib_entry)
static void fib_entry_last_lock_gone(fib_node_t *node)
static int fib_ip4_address_compare(const ip4_address_t *a1, const ip4_address_t *a2)
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
dpo_proto_t fib_forw_chain_type_to_dpo_proto(fib_forward_chain_type_t fct)
Convert from a chain type to the DPO proto it will install.
void fib_entry_special_update(fib_node_index_t fib_entry_index, fib_source_t source, fib_entry_flag_t flags, const dpo_id_t *dpo)
@ FIB_ENTRY_SRC_FLAG_NONE
enum flow_hash_config_t_ flow_hash_config_t
A flow hash configuration is a mask of the flow hash options.
void fib_entry_track_module_init(void)
static fib_node_t * fib_entry_get_node(fib_node_index_t index)
A list of path-extensions.
#define FIB_ENTRY_ATTRIBUTES
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
int fib_entry_is_host(fib_node_index_t fib_entry_index)
Return !0 is the entry represents a host prefix.
u8 * format_fib_source(u8 *s, va_list *args)
u32 fib_node_index_t
A typedef of a node index.
fib_node_index_t fib_entry_get_index(const fib_entry_t *fib_entry)
static fib_entry_t * fib_entry_from_fib_node(fib_node_t *node)
void fib_attached_export_import(fib_entry_t *fib_entry, fib_node_index_t export_fib)
FIB attached export.
void fib_show_memory_usage(const char *name, u32 in_use_elts, u32 allocd_elts, size_t size_elt)
Show the memory usage for a type.
void fib_entry_module_init(void)
fib_entry_t * fib_entry_src_action_add(fib_entry_t *fib_entry, fib_source_t source, fib_entry_flag_t flags, const dpo_id_t *dpo)
void fib_entry_path_add(fib_node_index_t fib_entry_index, fib_source_t source, fib_entry_flag_t flags, const fib_route_path_t *rpaths)
static int dpo_id_is_valid(const dpo_id_t *dpoi)
Return true if the DPO object is valid, i.e.
static fib_entry_t * fib_entry_pool
fib_entry_src_flag_t fib_entry_src_action_remove(fib_entry_t *fib_entry, fib_source_t source)
index_t * fe_delegates
A vector of delegate indices.
sll srl srl sll sra u16x4 i
fib_entry_delegate_t * fib_entry_delegate_find_or_add(fib_entry_t *fib_entry, fib_entry_delegate_type_t fdt)
void fib_entry_src_action_activate(fib_entry_t *fib_entry, fib_source_t source)
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
enum fib_entry_src_flag_t_ fib_entry_src_flag_t
@ FIB_NODE_BW_REASON_FLAG_ADJ_UPDATE
dpo_proto_t fp_payload_proto
This protocol determines the payload protocol of packets that will be forwarded by this entry once th...
fib_entry_flag_t fib_entry_get_flags_for_source(fib_node_index_t fib_entry_index, fib_source_t source)
fib_bfd_state_t fd_bfd_state
BFD state.
#define VLIB_CLI_COMMAND(x,...)
#define FIB_ENTRY_DBG(_e, _fmt, _args...)
enum fib_protocol_t_ fib_protocol_t
Protocol Type.
int fib_path_list_is_looped(fib_node_index_t path_list_index)
u32 fib_entry_get_resolving_interface(fib_node_index_t entry_index)
void fib_node_register_type(fib_node_type_t type, const fib_node_vft_t *vft)
fib_node_register_type
fib_entry_t * fib_entry_src_action_path_add(fib_entry_t *fib_entry, fib_source_t source, fib_entry_flag_t flags, const fib_route_path_t *rpaths)
int fib_path_ext_list_length(const fib_path_ext_list_t *list)
@ FIB_NODE_BACK_WALK_CONTINUE
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
void fib_attached_export_cover_change(fib_entry_t *fib_entry)
If this entry is tracking a cover (in another table) then that cover has changed.
dpo_proto_t fib_proto_to_dpo(fib_protocol_t fib_proto)
ip46_address_t fp_addr
The address type is not deriveable from the fp_addr member.
u8 * format_dpo_id(u8 *s, va_list *args)
Format a DPO_id_t oject.
@ FIB_NODE_BW_REASON_FLAG_INTERFACE_DOWN
@ FIB_ENTRY_DELEGATE_BFD
BFD session state.
void fib_attached_export_purge(fib_entry_t *fib_entry)
All the imported entries need to be purged.
fib_entry_t * fib_entry_src_action_installed(fib_entry_t *fib_entry, fib_source_t source)
u8 * fib_entry_src_format(fib_entry_t *fib_entry, fib_source_t source, u8 *s)
static fib_entry_t * fib_entry_post_flag_update_actions(fib_entry_t *fib_entry, fib_entry_flag_t old_flags)
void fib_path_list_walk_w_ext(fib_node_index_t path_list_index, const fib_path_ext_list_t *ext_list, fib_path_list_walk_w_ext_fn_t func, void *ctx)
enum fib_entry_delegate_type_t_ fib_entry_delegate_type_t
Delegate types.
@ DPO_LOAD_BALANCE
load-balancing over a choice of [un]equal cost paths
u8 * format_fib_entry_flags(u8 *s, va_list *args)
void fib_walk_sync(fib_node_type_t parent_type, fib_node_index_t parent_index, fib_node_back_walk_ctx_t *ctx)
Back walk all the children of a FIB node.
int fib_entry_recursive_loop_detect(fib_node_index_t entry_index, fib_node_index_t **entry_indicies)
#define vec_free(V)
Free vector's memory (no header).
#define pool_len(p)
Number of elements in pool vector.
fib_node_index_t fib_entry_create(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, const fib_route_path_t *paths)
void dpo_copy(dpo_id_t *dst, const dpo_id_t *src)
atomic copy a data-plane object.
fib_entry_src_flag_t fib_entry_delete(fib_node_index_t fib_entry_index, fib_source_t source)
fib_entry_delete
@ FIB_FORW_CHAIN_TYPE_MPLS_NON_EOS
Contribute an object that is to be used to forward non-end-of-stack MPLS packets.
#define pool_foreach_index(i, v)
fib_entry_t * fib_entry_get(fib_node_index_t index)
fib_entry_t * fib_entry_src_action_update(fib_entry_t *fib_entry, fib_source_t source, fib_entry_flag_t flags, const dpo_id_t *dpo)
void fib_entry_src_action_deactivate(fib_entry_t *fib_entry, fib_source_t source)
fib_entry_src_cover_res_t fib_entry_src_action_cover_change(fib_entry_t *fib_entry, fib_entry_src_t *esrc)
description fragment has unexpected format
u32 fib_entry_get_any_resolving_interface(fib_node_index_t entry_index)
static void fib_entry_source_change_w_flags(fib_entry_t *fib_entry, fib_source_t old_source, fib_entry_flag_t old_flags, fib_source_t new_source)
void fib_entry_recalculate_forwarding(fib_node_index_t fib_entry_index)
u32 fib_table_get_index_for_sw_if_index(fib_protocol_t proto, u32 sw_if_index)
Get the index of the FIB bound to the interface.
dpo_id_t fe_lb
The load-balance used for forwarding.
#define FOR_EACH_SRC_ADDED(_entry, _src, _source, action)
static void fib_entry_show_memory(void)
fib_source_t fes_src
Which source this info block is for.
A representation of a path as described by a route producer.
fib_path_list_walk_rc_t fib_path_encode(fib_node_index_t path_list_index, fib_node_index_t path_index, const fib_path_ext_t *path_ext, void *args)
u8 * format_fib_prefix(u8 *s, va_list *args)
#define vec_foreach(var, vec)
Vector iterator.
static load_balance_t * load_balance_get(index_t lbi)
fib_node_t fe_node
Base class.
@ FIB_NODE_BW_REASON_FLAG_INTERFACE_DELETE
void fib_node_lock(fib_node_t *node)
fib_entry_flag_t fib_entry_get_flags(fib_node_index_t fib_entry_index)
static uword pool_elts(void *v)
Number of active elements in a pool.
static void fib_entry_post_update_actions(fib_entry_t *fib_entry, fib_source_t source, fib_entry_flag_t old_flags)
void fib_entry_source_change(fib_entry_t *fib_entry, fib_source_t old_source, fib_source_t new_source)
@ FIB_FORW_CHAIN_TYPE_BIER
Contribute an object that is to be used to forward BIER packets.
#define FIB_ENTRY_FORMAT_BRIEF
fib_protocol_t fp_proto
protocol type
u32 fib_entry_get_fib_index(fib_node_index_t fib_entry_index)
static fib_entry_flag_t fib_entry_src_get_flags(const fib_entry_src_t *esrc)
@ FIB_FORW_CHAIN_TYPE_MCAST_IP6
Contribute an object that is to be used to forward IP6 packets.
An node in the FIB graph.
fib_node_bw_reason_flag_t bw_reason
dpo_proto_t fib_entry_get_dpo_proto(const fib_entry_t *fib_entry)
u32 adj_index_t
An index for adjacencies.
#define FOR_EACH_FIB_ATTRIBUTE(_item)
fib_route_path_t * fib_entry_encode(fib_node_index_t fib_entry_index)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
@ FIB_SOURCE_FIRST
Marker.
void fib_path_list_contribute_urpf(fib_node_index_t path_list_index, index_t urpf)
Contribute (add) this path list's uRPF list.
const dpo_id_t * drop_dpo_get(dpo_proto_t proto)
void fib_node_init(fib_node_t *node, fib_node_type_t type)
static const char * fib_attribute_names[]
vlib_log_class_t fib_entry_logger
the logger
const fib_prefix_t fe_prefix
The prefix of the route.
void fib_node_unlock(fib_node_t *node)
fib_entry_flag_t fes_entry_flags
Flags the source contributes to the entry.
u32 fib_entry_get_stats_index(fib_node_index_t fib_entry_index)
int dpo_is_adj(const dpo_id_t *dpo)
Return TRUE is the DPO is any type of adjacency.
fib_entry_src_cover_res_t fib_entry_src_action_cover_update(fib_entry_t *fib_entry, fib_entry_src_t *esrc)
A path extension is a per-entry addition to the forwarding information when packets are sent for that...
#define FIB_ENTRY_SRC_ATTRIBUTES
fib_entry_src_flag_t fes_flags
Flags on the source.
u8 * format_fib_entry_delegate(u8 *s, va_list *args)
#define clib_error(format, args...)
Context passed between object during a back walk.
void fib_node_child_remove(fib_node_type_t parent_type, fib_node_index_t parent_index, fib_node_index_t sibling_index)
fib_forward_chain_type_t fib_entry_get_default_chain_type(const fib_entry_t *fib_entry)
int fib_prefix_is_host(const fib_prefix_t *prefix)
Return true is the prefix is a host prefix.
@ FIB_NODE_BW_FLAG_FORCE_SYNC
Force the walk to be synchronous.
fib_entry_src_flag_t fib_entry_special_remove(fib_node_index_t fib_entry_index, fib_source_t source)
The identity of a DPO is a combination of its type and its instance number/index of objects of that t...
enum fib_source_t_ fib_source_t
The different sources that can create a route.
@ FIB_ENTRY_SRC_FLAG_ADDED
fib_entry_src_flag_t fib_entry_path_remove(fib_node_index_t fib_entry_index, fib_source_t source, const fib_route_path_t *rpaths)
void fib_node_deinit(fib_node_t *node)
@ FIB_FORW_CHAIN_TYPE_UNICAST_IP6
Contribute an object that is to be used to forward IP6 packets.
A Delagate is a means to implmenet the Delagation design pattern; the extension of an objects functio...
void fib_entry_update(fib_node_index_t fib_entry_index, fib_source_t source, fib_entry_flag_t flags, const fib_route_path_t *paths)
fib_entry_update
void fib_entry_child_remove(fib_node_index_t fib_entry_index, u32 sibling_index)
void fib_entry_cover_changed(fib_node_index_t fib_entry_index)
fib_protocol_t fib_entry_get_proto(const fib_entry_t *fib_entry)
vl_api_interface_index_t sw_if_index
static int fib_entry_cmp(fib_node_index_t fib_entry_index1, fib_node_index_t fib_entry_index2)
static fib_entry_t * fib_entry_post_install_actions(fib_entry_t *fib_entry, fib_source_t source, fib_entry_flag_t old_flags)
void dpo_reset(dpo_id_t *dpo)
reset a DPO ID The DPO will be unlocked.
u8 * format_fib_node_bw_reason(u8 *s, va_list *args)
u32 fib_entry_get_resolving_interface_for_source(fib_node_index_t fib_entry_index, fib_source_t source)
Aggregate type for a prefix.
int fib_path_list_recursive_loop_detect(fib_node_index_t path_list_index, fib_node_index_t **entry_indicies)
u32 fib_node_child_add(fib_node_type_t parent_type, fib_node_index_t parent_index, fib_node_type_t type, fib_node_index_t index)
fib_source_t fib_entry_get_best_source(fib_node_index_t entry_index)
#define FOR_EACH_DELEGATE_CHAIN(_entry, _fdt, _fed, _body)
dpo_id_t fd_dpo
Valid for the forwarding chain delegates.
@ FIB_ENTRY_SRC_FLAG_CONTRIBUTING
fib_node_index_t fib_entry_get_path_list(fib_node_index_t fib_entry_index)
vl_api_wireguard_peer_flags_t flags
u8 * format_fib_entry(u8 *s, va_list *args)