Commit Graph

54 Commits

Author SHA1 Message Date
Dave Barach
c62ddb61a5 http_static: clean up http redirect generation
Don't redirect to "favicon.ico/index.html" if you can't find
"favicon.ico".

If asked to serve up a nonexistent path, see if the path ends with a
known suffix: ".jpg, .html, .ico" etc. If it does, flunk the request
on the spot: "Error 404 Not Found." Do not issue a redirect.

This change will not break the obvious corner case: if the browser
asks for "its_a_dir.mp3/index.html" - and the file exists - the server
will produce it.

Type: improvement

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I91aad90be05b98ba2b40e240d13d71816aed4526
2022-12-09 09:07:58 -05:00
Dave Barach
c0a2527a83 http_static: derive mime type from file extensions
Type: improvement

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I0f087477e257f5119d7d6182d19f8796773a1f19
2022-12-08 15:40:02 +00:00
Dave Barach
287c1252c1 http_static: misc bug fixes
The request vector generated by hss_ts_rx_callback() must be NULL
terminated.

The hss_main_t use_ptr_thresh member must be a u64 since
unformat_memory_size() expects it. Otherwise, the adjacent u8
enable_url_handlers may have an accident.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I2cc08e3cbd31b225fb03799283c055515add13bf
2022-12-07 04:01:11 +00:00
Dave Barach
55fbf55c17 http_static: fix http(s) redirects
Add an http redirect template to generate correct-looking "301 Moved
Permanently" replies.

Supply a default value of 1<<31 for the use_ptr_thresh config parameter.

Expose hss_session_get() so friend plugins which register GET / POST
handlers with the http_static server can add data to the session fifos.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Ie1452eaf61c6f67311fbab092bc1fe03050bf94f
2022-12-06 11:25:15 -05:00
Damjan Marion
fe45f8f5af api: replace print functions wth format
Type: improvement
Change-Id: I7f7050c19453a69a7fb6c5e62f8f57db847d9144
Signed-off-by: Damjan Marion <damarion@cisco.com>
2022-09-26 08:14:29 +00:00
Florin Coras
28d5c1231c http_static: validate session before sending
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I18b9d0d67f5fe4c1714427259df29026153d8dd1
2022-08-12 02:13:59 +00:00
Damjan Marion
8bea589cfe vppinfra: make _vec_len() read-only
Use of _vec_len() to set vector length breaks address sanitizer.
Users should use vec_set_len(), vec_inc_len(), vec_dec_len () instead.

Type: improvement
Change-Id: I441ae948771eb21c23a61f3ff9163bdad74a2cb8
Signed-off-by: Damjan Marion <damarion@cisco.com>
2022-04-04 23:17:13 +00:00
Florin Coras
f83d6668b0 http hsa: support multiple listeners for http tps
Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ie89326ed4e599231fc20de67c5dadbb428568bec
2022-02-23 21:24:47 +00:00
Florin Coras
cfcc42e290 hsa: add http throughput test server app
Can be used for throughput testing over http. For instance, start
server:

http tps #implicitly listens on port 80

Then, to test throughput with curl:

curl <server_ip>/test_file_10g
curl <server_ip>/test_file_123m

Similarly, for https:

http tps uri tls://<server_ip>/443
curl -k <server_ip>/test_file_1g

Type: feature

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I30ab7f0d94a7357b3f04546e4a3d3c410a733908
2022-02-13 23:34:51 +00:00
Florin Coras
023521fcb6 http_static: cleanup file handler and cache
Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I7aff3a02315f9f92039dd2e3af1cbd8312aec662
2022-02-08 16:44:06 -08:00
Florin Coras
7463900dbd http_static: fix coverity warning
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I6d5527c49e9085f35be988549c2f1460be7fd4f0
2022-02-06 16:58:04 -08:00
Florin Coras
6c33728a35 http_static: handle empty requests
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ic002444c51b1ecbbf18a49863cf01888d28c4632
2022-02-05 21:20:29 +00:00
Florin Coras
7285be2aab prom: basic builtin prometheus stats exporter
This is a vpp builtin alternative, not a replacement, for the existing
vpp_prometheus_exporter.

The plugin works by registering with http_static as a url handler for
stats.prom and handles requests by scraping the stats segment in the
main thread. It will therefore consume vpp process cpu cycles.

By default the plugin is disabled. To enable, first start the http
static server an then use "prom enable" cli.

Type: feature

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: If6888e965d1b2361f6a5546586068213d37079d1
2022-02-02 17:04:46 -08:00
Florin Coras
bd8013ee8c http_static: add support for async tx from handlers
URL handlers can send data asynchronously if needed.

Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I89eae690cb26543479c7659b5dc46604cbb22eba
2022-02-02 10:35:23 +00:00
Florin Coras
fdb5a5a0e4 http_static: incorporate builtinurl plugin
External handlers can still be registered via hss_register_url_handler
but url handlers must be enabled when server is created.

builtinurl plugin to be removed in a future patch

Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I94e103d908b9e118c7927b997a21ce3f67809889
2022-01-30 14:44:40 +00:00
Florin Coras
ae0e3e748f http_static: code cleanup
Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ic8838c8ef558d671740094a98b5a627a18c8c808
2022-01-27 20:01:18 +00:00
Florin Coras
6a4a11f479 http_static: refactor to use http transport
Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I66396a1879eb3c87ef64783eab82a22896413cd0
2022-01-26 16:54:46 +00:00
Florin Coras
03e40e6230 svm: merge want deq and leq threshold notifications
Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I2775af35386a4e52ba82991c68bce6c56f13410f
2021-12-30 09:11:17 -08:00
Michal Kalderon
fe2231f01f http_static: Fix timeout on large files
When trying to read files that are larger than the fifo
a timeout was reached on client side leading to an abort of the request
and a retry (sending another GET command).

The svm fifo notification request was set to notify when the fifo is no
longer full, this lead to an inefficient loop of sending small amounts
of data each time with a large overhead of context switch and waiting
for the next notification, eventually leading to a timeout.

Modifying the trigger on the svm-fifo to be notified on a preset threshold
value enabled sending larger amounts of data between context switches and
sending large files more efficiently. This solved the timeout issue.

In addition, cap the max write from application to 4MB to avoid running
into a case of trying to allocate chunks that are too large.

Reproduce:
Server:
http static server www-root /var/www/data uri tcp://0.0.0.0/80 cache-size 5m fifo-size 300

Client:
wget http://11.0.0.2/file_of_size_32M

Type: fix
Change-Id: Idfceedffd935da9486cde820e9dca5dad69d9ca5
Signed-off-by: Yuval Caduri <cyuval@marvell.com>
Signed-off-by: Michal Kalderon <mkalderon@marvell.com>
2021-12-29 22:48:40 +00:00
Florin Coras
94a6df005d session: connects seg manager is always first
By convention, connects segment manager will be first. Therefore it will
be the one with the first segment wherein lies the app's message queue.

Saves us the trouble of allocating it on first connect, if app started
by listening, and we no longer need to track if it's assignable to a
listener or if it can be removed.

Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Iba9a8ffaab618eeb41ec2144dcfee62d006dc7a2
2021-05-07 10:46:20 +00:00
Florin Coras
a54b62d777 vcl session: refactor passing of crypto context
Pass tls/quic crypto context using extended config instead of bloating
conect/listen messages.

Type: refactor

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I0bc637ae310e6c31ef1e16847501dcb81453ee94
2021-04-22 16:07:11 +00:00
Florin Coras
a5a9efd4d1 vcl session: switch to generic cert key apis
Remove the deprecated tls apis.

Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ia1e12bd813671146f0aca22e83d04c23ac13e595
2021-01-07 16:55:02 +00:00
Damjan Marion
b2c31b685f misc: move to new pool_foreach macros
Type: refactor
Change-Id: Ie67dc579e88132ddb1ee4a34cb69f96920101772
Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-12-14 12:14:21 +00:00
Damjan Marion
931c6f54ba misc: don't export symbols from plugins
Type: improvement
Change-Id: I2a176fe2871d2e54b010bffc4f1f7a3616f0c455
Signed-off-by: Damjan Marion <damarion@cisco.com>
2020-10-19 10:06:38 +00:00
Florin Coras
0f4e3c22ed http_static: fix session cleanup
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ibb380eecca76ed9c00ed14c167dfcf576f943db0
2020-07-28 12:18:03 +00:00
Dave Barach
1af730d0df misc: fix sonarclound warnings
Type: fix
Ticket: VPP-1888
Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I9c2fb926a5e010658088a74051c8c3462ff61734
2020-06-16 17:32:17 +00:00
Paul Vinciguerra
b5a575b092 docs: clean up make docs job
Type: docs

Change-Id: I9b5e5137eb4c1e89f6e8d7a278cd11a0fd496471
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2020-05-06 15:13:09 +00:00
Florin Coras
00e01d3e87 session: improve error reporting
Type: improvement

Change-Id: I9dd850a1ce85b0adb5136233f176117e0ee38817
Signed-off-by: Florin Coras <fcoras@cisco.com>
2020-04-03 22:10:22 +00:00
Dave Barach
197180031b vppinfra: refactor clib_timebase_t
Add a clib_time_t * argument to clib_timebase_init(...), to encourage
client code to share the vlib_main_t's clib_time_t object.

Display the current day / date in GMT via the "show time" debug CLI.

Fix the test framework so it processes the new "show time" output format.

Type: refactor

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I5e52d57eb164b7cdb6355362d520df6928491711
2020-03-12 20:55:17 +00:00
Jakub Grajciar
2dbee9361e api: improve api string safety
- Remove vl_api_from_api_string
  to prevent use of not nul-terminated strings.
- Rename vl_api_from_api_to_vec -> vl_api_from_api_to_new_vec
  to imply a new vector is created. NOT nul terminated.
- Add vl_api_from_api_to_new_c_string. Returns
  nul terminated string in a new vector.
- Add vl_api_c_string_to_api_string. Convert nul terminated
  string to vl_api_string_t
- Add vl_api_vec_to_api_string. Convert NON nul terminated
  vector to vl_api_string_t

Type: fix

Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Change-Id: Iadd59b612c0d960a34ad0dd07a9d17f56435c6ea
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2020-02-26 08:51:03 +00:00
Dave Barach
a690fdbfe1 vppinfra: numa vector placement support
Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I7e7d95a089dd849c1f01ecea84529d8dbf239f21
2020-02-05 23:38:56 +00:00
John DeNisco
7c9fe920ce docs: Edit FEATURE.yaml files so they can be published
Type: docs
Signed-off-by: John DeNisco <jdenisco@cisco.com>
Change-Id: I7280e5c5ad10a66c0787a5282291a2ef000bff5f
2020-01-10 17:20:21 +00:00
Dave Barach
9ce3b74750 http_static: add FEATURE.yaml
Type: docs

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I2f9a74541183af6c10abea2c29002842ddb88815
2020-01-02 16:44:19 +00:00
Dave Wallace
b101058890 http_static: fifo-size is u32
- Limit cli input to u32

Type: fix

Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: Ib1f8ee9764da91a7804cc08901112c3f074130bc
2019-10-30 20:09:09 +00:00
Dave Barach
9929561a5d http_static: pass http request type to builtin handlers
Makes it easy to tell GETs from POSTs, etc., in case one wants to
register the same handler for multiple request types.

Return interface stats as a json array, makes .js code a lot simpler.

Type: refactor

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Iadae7b909cf3e8ea179fe93620737fdf68f888ac
2019-10-17 20:59:14 +00:00
Dave Barach
e0fd9ed11f http_static: add "http static cache clear" CLI
Useful to force content reloads

Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Ieecb018bec61a1624574660842d7d92cd84520f9
2019-10-17 14:30:56 +00:00
Nathan Skrzypczak
82fc5fd447 hsa: use crypto_engine_type_t for TLS
Type: refactor

This patch does the following conversions
TLS_ENGINE_X -> CRYPTO_ENGINE_X
tls_engine_type_t -> crypto_engine_t
It does not change numbering of engines

Change-Id: I872dfaec3a6713bf4229c84d1ffd98b8b2419995
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
2019-10-09 01:11:11 +00:00
Ole Troan
83a49e12fd http_static: remove api boilerplate
Type: refactor
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: Ie1f0cccf0c9dc4c0d8ae1e1b5d8e6a75c325d1ce
2019-09-27 09:05:55 +00:00
Dave Barach
5554c56a65 http_static: add dynamic GET / POST method hooks
Add .json output to format_vnet_sw_interface_cntrs(...)

Type: feature

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Ied036ebfaaafbf1dfc2a4e396c00f09f40659400
2019-09-16 16:18:10 -04:00
Ole Troan
e5ff5a36dd api: enforce vla is last and fixed string type
Enforce that variable length fields are the last element of API messages.

Add a 'fixed' version of string type, since dealing with
multiple variable length strings turned out too painful
for the C language bindings.

The string type is now:
{
  string name[64]; // NUL terminated C-string. Essentially decays to u8 name[64]
  string name[];   // Variable length string with embedded len field (vl_api_string_t)
};

The latter notation could be made available to other types as well.
e.g.
{
  vl_api_address_t addresses[];
}
instead of

{
  u32 n_addr;
  vl_api_address_t addresses[n_addr];
};

Type: fix
Change-Id: I18fa17ef47227633752ab50453e8d20a652a9f9b
Signed-off-by: Ole Troan <ot@cisco.com>
2019-09-03 20:04:13 +00:00
Dave Barach
3705980a22 http_static: fix session expiration timer bugs
Type: fix
Fixes: 21231

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Iefdd961ba1dcfd0a8d82e5dc1205b3cd4547943d
2019-08-12 14:42:03 -04:00
Dave Barach
12b245e161 http_static: debug spew control, session expiration timers
Type: refactor

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I015390b703ef502b8b41efa08bff45e65b5eed83
2019-08-12 08:06:20 -04:00
Dave Barach
6b53fd5163 http_static: tls support
Type: refactor

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I45745e568cd943293d0015a61f67ec799b6804d8
2019-08-10 11:30:39 -04:00
Dave Barach
21a438465c vat: unload unused vat plugins
If the corresponding vpp plugin is absent, return a non-zero
clib_error_t * from vat_plugin_register ("xxx plugin not loaded"). The
vat plugin calls dlclose on the vat plugin, and it disappears.

Depending on the plugin configuration, this can reduce the vpp virtual
size by several gigabytes.

Added a VAT_PLUGIN(<plugin-name>) macro to vat_helper_macros, clean up
boilerplate vat_plugin_register() implementations. Fixed a number of
non-standard vat_plugin_register methods.

Type: refactor

Change-Id: Iac908e5af7d5497c78d6aa9c3c51cdae08374045
Signed-off-by: Dave Barach <dave@barachs.net>
2019-07-09 15:24:41 +00:00
Neale Ranns
377860a739 api: Remove the inlines file and replace with library functions
using inlines exposes the users to the internal data types used by VPP, namely vec.h. This file does not compile with a C++ compiler.

Type: feature

Change-Id: I1544fdd9eae998309f865df61df78571bdb96903
Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-06-26 11:29:09 +00:00
Ole Troan
283cd2e9af api: string type to convert to vector
Previous use of strndup() required user to remember to call free().
Now return a vector pointing directly to the API message string.
Of course user must remember to copy the string out if lifetime
is longer than API message lifetime.

Change-Id: Ib5e2b3d52d258e1a42ea9ea9a9e04abbe360e2bf
Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
2019-06-18 11:47:21 +00:00
Paul Vinciguerra
0f87dfeec6 static_http: Typo in short_help.
Type: fix.

Change-Id: I48587c5eba6de6de820d348177b6733d0b048013
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-06-12 20:43:09 +00:00
Paul Vinciguerra
68b24e2c9a plugins: http_static. Migrate to use api string type.
This is not my core competency.
Reviews/feedback/suggestions welcomed. ;)

Tested with:
  rv = self.vapi.http_static_enable(
             fifo_size = 1,
             cache_size_limit = 1000000,
             prealloc_fifos = 0,
             private_segment_size = 0,
             uri="tcp://0.0.0.0/80",
             www_root = "/var/tmp/run/vpp/html"
             )

  DBGvpp# show http static server
  www_root /var/tmp/run/vpp/html, cache size 0 bytes, limit 1000000 bytes, evictions 0

Change-Id: I0f660753317ceedab89da1b65701a24d6f7145de
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2019-05-29 07:40:56 +00:00
Dave Barach
18874913fb Fix punctuation fails in 2x plugins
More to the point: fix the Python API binding for the plugins.

The http_static and ct6 plugin setup_message_id_table calls didn't
have "_"'s between message names and CRCs. I would have expected this
to originate in the emacs skeleton, but the skeleton is correct.

Punctuation saves lives: "Let's eat Grandma..." != "Let's eat,
Grandma..." More or less.

Change-Id: Icd87813308701d203cf6f147b2bb90d39d51ddeb
Signed-off-by: Dave Barach <dave@barachs.net>
2019-05-17 14:49:00 -04:00
Dave Wallace
1d1985de91 plugins: clean up plugin descriptions
- Make plugin descriptions more consistent
  so the output of "show plugin" can be
  used in the wiki.

Change-Id: I4c6feb11e7dcc5a4cf0848eed37f1d3b035c7dda
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2019-05-03 09:30:46 +00:00