summaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Expand)AuthorFilesLines
2020-12-29svm: allow mq attachments at random offsetsFlorin Coras23-179/+408
2020-12-28session: convert evt q segment to fifo segmentFlorin Coras3-19/+21
2020-12-28svm: move active fifo list to private sliceFlorin Coras2-16/+30
2020-12-28vlib: add missing file template descriptionsPaul Vinciguerra5-2/+16
2020-12-27ip: Use full reassembly for fragments in ip6-localNeale Ranns2-3/+1
2020-12-26svm: change fifo pointers to offsetsFlorin Coras6-167/+242
2020-12-25virtio: Extend vhost multi-queues support beyond 8 queue pairsSteven Luong3-60/+122
2020-12-25build: add plugin dependencies only when presentRuslan Babayev1-1/+3
2020-12-24svm: split fifo into private and shared structsFlorin Coras25-445/+590
2020-12-23hsa: detach fifo segments in echo appFlorin Coras3-38/+60
2020-12-23vppinfra: mem bulk testFlorin Coras3-1/+147
2020-12-23tests: move bier tests to src/vnet/bier/testDave Wallace2-0/+1155
2020-12-23svm: separate private from shared fifo segment ptrsFlorin Coras4-57/+62
2020-12-23svm: remove fifo segment heapFlorin Coras9-176/+203
2020-12-22vppinfra: add bulk memory allocatorDamjan Marion3-0/+249
2020-12-22tests: move bfd tests to src/vnet/bfd/testDave Wallace2-0/+3201
2020-12-21svm: honor max requested bytes in fifo segmentsFlorin Coras1-1/+1
2020-12-21tcp: terminate options with nopsFlorin Coras1-8/+4
2020-12-20tls: use fifo segments instead of chunksFlorin Coras3-33/+77
2020-12-19avf: fix gcc compiling warning on ArmJieqiang Wang1-4/+4
2020-12-18papi: remove import vpp_transport_socketPaul Vinciguerra1-2/+2
2020-12-18tls: add custom openssl bioFlorin Coras6-184/+245
2020-12-18perfmon: new perfmon pluginDamjan Marion18-2/+2268
2020-12-18misc: deprecate old perfmonDamjan Marion28-25597/+0
2020-12-18dpdk: rebase cryptodev engine for dpdk 20.11Fan Zhang2-121/+127
2020-12-18ipsec: fixed esp_decrypt pkt len after icv movedPiotrX Kleski1-6/+11
2020-12-18avf: optimized with NEON SIMD instructionLijian.Zhang1-1/+27
2020-12-18fib: Remove unused FIB path-list DB variableNeale Ranns2-7/+0
2020-12-17hsa: http server: memset after pool_put will cause ASAN issuejiangxiaoming1-1/+2
2020-12-17hsa: http server: fix http response format type errorjiangxiaoming1-1/+1
2020-12-16vppinfra: fix vec_max_lenFlorin Coras1-1/+2
2020-12-16tests: move fib tests to src/vnet/fib/testDave Wallace2-0/+456
2020-12-16ip: fix possible missing trace indexesKlement Sekera4-0/+28
2020-12-16nat: refactor & MW support for NAT testsFilip Varga3-3598/+3662
2020-12-15api: crchcecker ignore version < 1.0.0 and outside of src directoryOle Tr�an2-4/+0
2020-12-15nat: set out2in-dpo during plugin enablingAlexander Chernavin1-0/+1
2020-12-15classify: add pcap/trace classfier mgmt API callsJon Loeliger10-213/+723
2020-12-15api: crchcecker ignore version < 1.0.0 and outside of src directoryOle Troan2-0/+4
2020-12-14ikev2: add reason for deleted sa debug logBenoît Ganne1-5/+5
2020-12-14ikev2: fix show ikev2 profileBenoît Ganne1-38/+18
2020-12-14session: free segment manager only from mainFlorin Coras1-4/+32
2020-12-14misc: refactor clib_bitmap_foreach macroDamjan Marion33-108/+113
2020-12-14misc: move to new pool_foreach macrosDamjan Marion228-1442/+1396
2020-12-14vppinfra: simpler and faster pool_foreachDamjan Marion3-16/+33
2020-12-14api: add missing version infoPaul Vinciguerra10-3/+13
2020-12-13nat: revert 'fix byte order on ipfix message fields'Damjan Marion1-6/+3
2020-12-11dpdk: bump to dpdk 20.11Fan Zhang5-10/+28
2020-12-11pppoe: fix VLIB_RX into the pppoe-input nodeStanislav Zaikin3-0/+15
2020-12-11ip: ip4 rewrite prefetch optimizationPiotrX Kleski1-2/+5
2020-12-11virtio: fix vrings overflow in vhost_userBenoît Ganne1-1/+10
">* input, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; clib_error_t *error = NULL; u8 enable = 1; ip46_address_t saddr, *saddrs = NULL, gaddr; vnet_main_t *vnm = vnet_get_main (); u32 sw_if_index; int rv; if (!unformat_user (input, unformat_line_input, line_input)) { error = clib_error_return (0, "'help igmp listen' or 'igmp listen ?' for help"); return error; } while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "enable")) enable = 1; else if (unformat (line_input, "disable")) enable = 0; else if (unformat (line_input, "int %U", unformat_vnet_sw_interface, vnm, &sw_if_index)); else if (unformat (line_input, "saddr %U", unformat_ip46_address, &saddr)) vec_add1 (saddrs, saddr); else if (unformat (line_input, "gaddr %U", unformat_ip46_address, &gaddr)); else { error = clib_error_return (0, "unknown input '%U'", format_unformat_error, line_input); goto done; } } if ((vnet_sw_interface_get_flags (vnm, sw_if_index) && VNET_SW_INTERFACE_FLAG_ADMIN_UP) == 0) { error = clib_error_return (0, "Interface is down"); goto done; } rv = igmp_listen (vm, enable, sw_if_index, saddrs, &gaddr); if (rv == -1) { if (enable) error = clib_error_return (0, "This igmp configuration already exists"); else error = clib_error_return (0, "This igmp configuration does not exist"); } else if (rv == -2) error = clib_error_return (0, "Failed to add configuration, interface is in router mode"); done: unformat_free (line_input); vec_free (saddrs); return error; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (igmp_listen_command, static) = { .path = "igmp listen", .short_help = "igmp listen [<enable|disable>] " "int <interface> saddr <ip4-address> gaddr <ip4-address>", .function = igmp_listen_command_fn, }; /* *INDENT-ON* */ static clib_error_t * igmp_enable_cli (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; igmp_mode_t mode = IGMP_MODE_ROUTER; vnet_main_t *vnm = vnet_get_main (); clib_error_t *error = NULL; u32 sw_if_index = ~0; u8 enable = 1; int rv; if (!unformat_user (input, unformat_line_input, line_input)) return error; while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "enable")) enable = 1; else if (unformat (line_input, "disable")) enable = 0; if (unformat (line_input, "host")) mode = IGMP_MODE_HOST; else if (unformat (line_input, "router")) mode = IGMP_MODE_ROUTER; else if (unformat (line_input, "%U", unformat_vnet_sw_interface, vnm, &sw_if_index)); else { error = clib_error_return (0, "unknown input '%U'", format_unformat_error, line_input); goto done; } } if (~0 == sw_if_index) { error = clib_error_return (0, "interface must be specified"); goto done; } rv = igmp_enable_disable (sw_if_index, enable, mode); if (0 != rv) error = clib_error_return (0, "result: %d", rv); done: unformat_free (line_input); return error; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (igmp_enable_command, static) = { .path = "igmp", .short_help = "igmp <enable|disable> <host|router> <interface>", .function = igmp_enable_cli, }; /* *INDENT-ON* */ static clib_error_t * igmp_proxy_device_add_del_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; vnet_main_t *vnm = vnet_get_main (); clib_error_t *error = NULL; u32 sw_if_index = ~0; u32 vrf_id = ~0; u8 add = 1; int rv; if (!unformat_user (input, unformat_line_input, line_input)) return error; while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "add")) add = 1; else if (unformat (line_input, "del")) add = 0; else if (unformat (line_input, "vrf-id %u", &vrf_id)) ; else if (unformat (line_input, "%U", unformat_vnet_sw_interface, vnm, &sw_if_index)); else { error = clib_error_return (0, "unknown input '%U'", format_unformat_error, line_input); goto done; } } if (~0 == sw_if_index) { error = clib_error_return (0, "interface must be specified"); goto done; } if (~0 == vrf_id) { error = clib_error_return (0, "VRF must be specified"); goto done; } rv = igmp_proxy_device_add_del (vrf_id, sw_if_index, add); if (0 != rv) error = clib_error_return (0, "result: %d", rv); done: unformat_free (line_input); return error; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (igmp_proxy_device_add_del_command, static) = { .path = "igmp proxy-dev", .short_help = "igmp proxy-dev <add|del> vrf-id <table-id> <interface>", .function = igmp_proxy_device_add_del_command_fn, }; /* *INDENT-ON* */ static clib_error_t * igmp_proxy_device_add_del_interface_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; vnet_main_t *vnm = vnet_get_main (); clib_error_t *error = NULL; u32 sw_if_index = ~0; u32 vrf_id = ~0; u8 add = 1; int rv; if (!unformat_user (input, unformat_line_input, line_input)) return error; while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) { if (unformat (line_input, "add")) add = 1; else if (unformat (line_input, "del")) add = 0; else if (unformat (line_input, "vrf-id %u", &vrf_id)) ; else if (unformat (line_input, "%U", unformat_vnet_sw_interface, vnm, &sw_if_index)); else { error = clib_error_return (0, "unknown input '%U'", format_unformat_error, line_input); goto done; } } if (~0 == sw_if_index) { error = clib_error_return (0, "interface must be specified"); goto done; } if (~0 == vrf_id) { error = clib_error_return (0, "VRF must be specified"); goto done; } rv = igmp_proxy_device_add_del_interface (vrf_id, sw_if_index, add); if (0 != rv) error = clib_error_return (0, "result: %d", rv); done: unformat_free (line_input); return error; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (igmp_proxy_device_add_del_interface_command, static) = { .path = "igmp proxy-dev itf", .short_help = "igmp proxy-dev itf <add|del> vrf-id <table-id> <interface>", .function = igmp_proxy_device_add_del_interface_command_fn, }; /* *INDENT-ON* */ static clib_error_t * igmp_show_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { clib_error_t *error = NULL; igmp_main_t *im = &igmp_main; igmp_config_t *config; /* *INDENT-OFF* */ pool_foreach (config, im->configs, ({ vlib_cli_output (vm, "%U", format_igmp_config, config); })); /* *INDENT-ON* */ return error; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (igmp_show_command, static) = { .path = "show igmp config", .short_help = "show igmp config", .function = igmp_show_command_fn, }; /* *INDENT-ON* */ static clib_error_t * igmp_show_timers_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { #define _(n,f) vlib_cli_output (vm, "%s: %d", #f, igmp_timer_type_get(n)); foreach_igmp_timer_type #undef _ return (NULL); } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (igmp_show_timers_command, static) = { .path = "show igmp timers", .short_help = "show igmp timers", .function = igmp_show_timers_command_fn, }; /* *INDENT-ON* */ static clib_error_t * test_igmp_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { clib_error_t *error = NULL; u32 value; while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, "query %d", &value)) igmp_timer_type_set (IGMP_TIMER_QUERY, value); else if (unformat (input, "src %d", &value)) igmp_timer_type_set (IGMP_TIMER_SRC, value); else if (unformat (input, "leave %d", &value)) igmp_timer_type_set (IGMP_TIMER_LEAVE, value); else error = clib_error_return (0, "query or src timers only"); } return error; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (test_igmp_command, static) = { .path = "test igmp timers", .short_help = "Change the default values for IGMP timers - only sensible during unit tests", .function = test_igmp_command_fn, }; /* *INDENT-ON* */ clib_error_t * igmp_cli_init (vlib_main_t * vm) { return 0; } VLIB_INIT_FUNCTION (igmp_cli_init); /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */