summaryrefslogtreecommitdiffstats
path: root/docs
AgeCommit message (Expand)AuthorFilesLines
2019-07-12docs: how to enable coredump with systemdBenoƮt Ganne1-0/+4
2019-06-27docs: Update the vhost sectionjdenisco4-8/+11
2019-05-30FIB: correctly report IPv6 FIB Unicast and Multicast memory usage (VPP-1578)"Neale Ranns3-2/+286
2019-05-28docs: Add some packages for building the docsjdenisco2-2/+13
2019-05-17docs: Fix Versions and Titlesjdenisco4-7/+7
2019-05-16docs: Update sphinx, requirements, support markdown tablesjdenisco9-30/+50
2019-05-16DOC ONLY: document VLIB_INIT_FUNCTION schemeDave Barach1-4/+49
2019-05-10docs: Add 1904jdenisco6-17/+133
2019-04-30Sphinx docs: Fix security vulnerability (VPP-1655)Dave Wallace1-1/+1
2019-04-29DOC ONLY: add a buffer metadata writeupDave Barach2-1/+192
2019-04-25docs: Add VPP inside the CloudFrancesco Spinelli9-4/+805
2019-04-08fixing typosJim Thompson1-1/+1
2019-03-22DOC-ONLY: improve multi-arch documentationDave Barach2-0/+88
2019-03-21docs: break up long lines in vmxnet3.rst to avoid line wrapSteven Luong1-21/+34
2019-03-19docs: Update vmxnet3 usecaseSteven Luong1-12/+36
2019-03-15DOC ONLY: fix g2 build documentationDave Barach2-49/+44
2019-03-12DOC ONLY: add packet handoff docDave Barach1-11/+117
2019-02-27Fix centos build and build documentationjdenisco3-4/+4
2019-02-27DOC ONLY: update bug report sectionDave Barach1-31/+58
2019-02-23Add support for 19.01jdenisco3-74/+15
2019-02-20docs: use python3 for make docs.Paul Vinciguerra1-3/+3
2019-02-19VPP-1504: Remove JVPPMichal Cmarada8-61/+6
2019-01-31docs: Instructions for using vmxnet3 on macjdenisco2-2/+24
2019-01-20buffers: don't init metadata, as it is already initializedDamjan Marion1-3/+0
2019-01-17DOC ONLY: wireshark dissector upstreamedDave Barach2-58/+48
2019-01-07Update tcpdump / wireshark packet format writeupDave Barach1-6/+14
2018-12-17docs: Add vmxmet3 driverjdenisco3-2/+131
2018-12-17docs: clarify vector element alignment description.Dave Wallace1-5/+8
2018-12-13docs: Update the requirementsjdenisco2-10/+10
2018-12-06nsim: add packet loss simulation, docsDave Barach2-1/+91
2018-12-06DOC-ONLY: MFIB documentationNeale Ranns4-5/+96
2018-12-05DOC ONLY: describe dispatch pcap tracingDave Barach3-2/+263
2018-11-27docs: Add more on trexjdenisco7-22/+225
2018-11-23doc: delete wrong description since VPP support 1G hugepageYulong Pei1-3/+3
2018-11-13docs and Config utility, package cloud supportjdenisco2-2/+6
2018-11-13vlib rename vlib_frame_args(...) to vlib_frame_scalar_args(..)Damjan Marion1-1/+1
2018-11-12docs: add 1810, including package cloudjdenisco10-131/+178
2018-11-06docs: Add version and build datejdenisco3-0/+15
2018-11-06docs: Small changes to plugin, updated the requirementsjdenisco4-47/+32
2018-10-30DOC-ONLY: document packet intialization from scratchDave Barach2-40/+126
2018-10-30docs: Add VPP with iperf and trexjdenisco12-3/+554
2018-10-30DOC-ONLY: upgrade the "requests" packageDave Barach1-1/+1
2018-10-26docs: add useful debug CLI Review UpdatesScott Keeler12-733/+755
2018-10-24docs: add useful debug CLIScott Keeler16-249/+1058
2018-10-24DOC ONLY: fix doc bugsDave Barach2-40/+44
2018-10-22add Contiv-VPP installation guidance on Aarch64Lijian Zhang1-0/+10
2018-10-05DOC ONLY: clean up plugin documentationDave Barach4-175/+277
2018-10-05docs: add contiv vppScott Keeler19-0/+2632
2018-09-24Add the sphinx docs build optionsjdenisco2-8/+26
2018-09-18docs: Added Related Projects and Archivejdenisco4-10/+102
/span> bdt->bdt_locks) { u32 ii; for (ii = 0; ii < BIER_BP_MAX; ii++) { bier_disp_entry_unlock(bdt->bdt_db[ii]); } hash_unset(bier_disp_table_id_to_index, bdt->bdt_table_id); pool_put(bier_disp_table_pool, bdt); } } void bier_disp_table_lock (index_t bdti) { bier_disp_table_lock_i(bier_disp_table_get(bdti)); } void bier_disp_table_contribute_forwarding (index_t bdti, dpo_id_t *dpo) { dpo_set(dpo, DPO_BIER_DISP_TABLE, DPO_PROTO_BIER, bdti); } u8* format_bier_disp_table (u8* s, va_list *ap) { index_t bdti = va_arg(*ap, index_t); u32 indent = va_arg(*ap, u32); bier_show_flags_t flags = va_arg(*ap, bier_show_flags_t); bier_disp_table_t *bdt; bdt = bier_disp_table_get(bdti); s = format(s, "bier-disp-table:[%d]; table-id:%d locks:%d", bdti, bdt->bdt_table_id, bdt->bdt_locks); if (flags & BIER_SHOW_DETAIL) { u32 ii; for (ii = 0; ii < BIER_BP_MAX; ii++) { if (INDEX_INVALID != bdt->bdt_db[ii]) { u16 src = ii; s = format(s, "\n%Usrc:%d", format_white_space, indent+1, clib_host_to_net_u16(src)); s = format(s, "\n%U", format_bier_disp_entry, bdt->bdt_db[ii], indent+4, BIER_SHOW_BRIEF); } } } return (s); } static u8* format_bier_disp_table_dpo (u8* s, va_list *ap) { index_t bdti = va_arg(*ap, index_t); u32 indent = va_arg(*ap, u32); return (format(s, "%U", format_bier_disp_table, bdti, indent, BIER_SHOW_BRIEF)); } static void bier_disp_table_entry_insert (index_t bdti, bier_bp_t src, index_t bdei) { bier_disp_table_t *bdt; bdt = bier_disp_table_get(bdti); bdt->bdt_db[clib_host_to_net_u16(src)] = bdei; } static void bier_disp_table_entry_remove (index_t bdti, bier_bp_t src) { bier_disp_table_t *bdt; bdt = bier_disp_table_get(bdti); bdt->bdt_db[clib_host_to_net_u16(src)] = INDEX_INVALID; } static index_t bier_disp_table_lookup_hton(index_t bdti, bier_bp_t bp) { bier_hdr_src_id_t src = bp; return (bier_disp_table_lookup(bdti, clib_host_to_net_u16(src))); } void bier_disp_table_entry_path_add (u32 table_id, bier_bp_t src, bier_hdr_proto_id_t payload_proto, const fib_route_path_t *rpaths) { index_t bdti, bdei; bdti = bier_disp_table_find(table_id); if (INDEX_INVALID == bdti) { return; } bdei = bier_disp_table_lookup_hton(bdti, src); if (INDEX_INVALID == bdei) { bdei = bier_disp_entry_add_or_lock(); bier_disp_table_entry_insert(bdti, src, bdei); } bier_disp_entry_path_add(bdei, payload_proto, rpaths); } void bier_disp_table_entry_path_remove (u32 table_id, bier_bp_t src, bier_hdr_proto_id_t payload_proto, const fib_route_path_t *rpath) { index_t bdti, bdei; bdti = bier_disp_table_find(table_id); if (INDEX_INVALID == bdti) { return; } bdei = bier_disp_table_lookup_hton(bdti, src); if (INDEX_INVALID != bdei) { int remove; remove = bier_disp_entry_path_remove(bdei, payload_proto, rpath); if (remove) { bier_disp_table_entry_remove(bdti, src); bier_disp_entry_unlock(bdei); } } } void bier_disp_table_walk (u32 table_id, bier_disp_table_walk_fn_t fn, void *ctx) { const bier_disp_table_t *bdt; const bier_disp_entry_t *bde; index_t bdti; u32 ii; bdti = bier_disp_table_find(table_id); if (INDEX_INVALID != bdti) { bdt = bier_disp_table_get(bdti); for (ii = 0; ii < BIER_BP_MAX; ii++) { if (INDEX_INVALID != bdt->bdt_db[ii]) { u16 src = ii; bde = bier_disp_entry_get(bdt->bdt_db[ii]); fn(bdt, bde, clib_host_to_net_u16(src), ctx); } } } } static void bier_disp_table_dpo_lock (dpo_id_t *dpo) { bier_disp_table_lock(dpo->dpoi_index); } static void bier_disp_table_dpo_unlock (dpo_id_t *dpo) { bier_disp_table_unlock(dpo->dpoi_index); } static void bier_disp_table_dpo_mem_show (void) { fib_show_memory_usage("BIER disposition table", pool_elts(bier_disp_table_pool), pool_len(bier_disp_table_pool), sizeof(bier_disp_table_t)); } const static dpo_vft_t bier_disp_table_dpo_vft = { .dv_lock = bier_disp_table_dpo_lock, .dv_unlock = bier_disp_table_dpo_unlock, .dv_mem_show = bier_disp_table_dpo_mem_show, .dv_format = format_bier_disp_table_dpo, }; const static char *const bier_disp_table_bier_nodes[] = { "bier-disp-lookup", NULL }; const static char * const * const bier_disp_table_nodes[DPO_PROTO_NUM] = { [DPO_PROTO_BIER] = bier_disp_table_bier_nodes, }; clib_error_t * bier_disp_table_module_init (vlib_main_t *vm) { dpo_register(DPO_BIER_DISP_TABLE, &bier_disp_table_dpo_vft, bier_disp_table_nodes); bier_disp_table_id_to_index = hash_create(0, sizeof(index_t)); return (NULL); } VLIB_INIT_FUNCTION (bier_disp_table_module_init); static clib_error_t * show_bier_disp_table (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { bier_disp_table_t *bdt; index_t bdti; bdti = INDEX_INVALID; while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, "%d", &bdti)) ; else if (unformat (input, "%d", &bdti)) ; else { break; } } if (INDEX_INVALID == bdti) { pool_foreach(bdt, bier_disp_table_pool, ({ vlib_cli_output(vm, "%U", format_bier_disp_table, bier_disp_table_get_index(bdt), 0, BIER_SHOW_BRIEF); })); } else { if (pool_is_free_index(bier_disp_table_pool, bdti)) { vlib_cli_output(vm, "No such BIER disp table: %d", bdti); } else { vlib_cli_output(vm, "%U", format_bier_disp_table, bdti, 0, BIER_SHOW_DETAIL); } } return (NULL); } VLIB_CLI_COMMAND (show_bier_disp_table_node, static) = { .path = "show bier disp table", .short_help = "show bier disp table [index]", .function = show_bier_disp_table, };