diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 38c2e7ac5..9e577962f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -528,7 +528,7 @@ jobs: run: | echo "coredump.%e.%p" > /proc/sys/kernel/core_pattern ulimit -c unlimited - + threads=12 if [[ "${{ matrix.runtimeCheck }}" == "tsan" ]]; then threads=6 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bcb3a9bac..ef0e66bf6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,6 +20,15 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: + +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + # https://betterprogramming.pub/2-use-cases-of-python-pre-commit-hooks-to-tidy-up-your-git-repositories-8d86c9c4f06b - repo: local hooks: diff --git a/CMakeLists.txt b/CMakeLists.txt index 754b046d0..db508f82a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,22 +77,22 @@ if(NOT DEFINED VERSION) OUTPUT_VARIABLE DEFAULT_VERSION RESULT_VARIABLE GIT_RESULT OUTPUT_STRIP_TRAILING_WHITESPACE) - - + + # You might sometimes get a fatal error when running the above command (when this is not a git repo). # GIT_RESULT will contain the result of last child process. It will be zero if successful. if (GIT_RESULT EQUAL 0) # Git succeeded, we will use the DEFAULT_VERSION as the QPID_DISPATCH_VERSION set(QPID_DISPATCH_VERSION ${DEFAULT_VERSION}) else() - # The git command failed, set QPID_DISPATCH_VERSION to "UNKNOWN" + # The git command failed, set QPID_DISPATCH_VERSION to "UNKNOWN" set(QPID_DISPATCH_VERSION "UNKNOWN") endif(GIT_RESULT EQUAL 0) else(Git_FOUND) # Git executable was not available, we will not be able to determine the version, just set it to "UNKNOWN" set(QPID_DISPATCH_VERSION "UNKNOWN") endif(Git_FOUND) - + else(NOT DEFINED VERSION) # What if VERSION is defined but someone passed in an empty value for VERSION? Deal with that case here. @@ -105,7 +105,7 @@ else(NOT DEFINED VERSION) else() set(QPID_DISPATCH_VERSION ${VERSION}) endif() - endif(VERSION STREQUAL "") + endif(VERSION STREQUAL "") endif(NOT DEFINED VERSION) message(STATUS "Setting skupper-router version to ${QPID_DISPATCH_VERSION}") diff --git a/README.adoc b/README.adoc index 05631e47b..d7f3e78e7 100644 --- a/README.adoc +++ b/README.adoc @@ -75,7 +75,7 @@ From the `` directory you can run all the system- and unit-tests with: $ ctest -VV ---- -The `ctest` tool uses the script `/test/run.py` to set up the correct environment for tests. +The `ctest` tool uses the script `/test/run.py` to set up the correct environment for tests. You can use it to run tests individually from the `/tests` directory. .Example @@ -185,8 +185,8 @@ And run the following command to generate grpc code: python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./friendship.proto ---- -The system tests are implemented using Python's unittest library. -This library is used to run the tests by default. +The system tests are implemented using Python's unittest library. +This library is used to run the tests by default. The tests can be also run using `xmlrunner` or `pytest`. Pytest can generate a JUnit-compatible XML report containing an entry for each Python test method. After running the tests, all XML reports can be found under `tests/junitxmls` in your build directory: @@ -209,7 +209,7 @@ cmake .. -DQDROUTERD_RUNNER="gdb -quiet -iex 'set pagination off' -iex 'set debu === Test Suite Code Coverage (GNU tools only) -Use coverage analysis to ensure that all code paths are exercised by the test suite. +Use coverage analysis to ensure that all code paths are exercised by the test suite. To run the tests and perform code coverage analysis: . Install the lcov package @@ -250,11 +250,11 @@ This script then does the following: The CTest test suite can be configured to enable extra run time validation checks against the skupper router. -Since run time validation slows down `skrouterd` considerably it is disabled by default. +Since run time validation slows down `skrouterd` considerably it is disabled by default. It can be enabled by setting the `RUNTIME_CHECK` build flag via the `cmake` command. -NOTE: Depending on your environment the `ctest` suite may time out if validation is enabled due to the additional run time overhead it adds. +NOTE: Depending on your environment the `ctest` suite may time out if validation is enabled due to the additional run time overhead it adds. You can extend the default test time via the `ctest --timeout` option. @@ -269,7 +269,7 @@ The Skupper Router test suite supports the following run time validation tools: ==== Valgrind Memcheck Memcheck runs `skrouterd` under Valgrind's memcheck leak checker during the CTest suite. -This causes tests to fail if a memory error is encountered. +This causes tests to fail if a memory error is encountered. Use the grinder tool (in the bin directory) to create a summary of the errors found during the test run. The valgrind toolset must be installed in order to use memcheck. @@ -281,7 +281,7 @@ To enable memcheck set the RUNTIME_CHECK build flag to "memcheck": cmake .. -DRUNTIME_CHECK=memcheck ---- -If valgrind detects errors, the `skrouterd` process exits with an exit code of `42` and a message is displayed in the CTest output. +If valgrind detects errors, the `skrouterd` process exits with an exit code of `42` and a message is displayed in the CTest output. For example: [source] diff --git a/bin/export.sh b/bin/export.sh index 5ca250203..e874f5010 100755 --- a/bin/export.sh +++ b/bin/export.sh @@ -21,17 +21,17 @@ # export.sh - Create a release archive. -# run this script like this - +# run this script like this - # Before executing this script, change directory to the folder in which this file is located, for example. # 1. cd /home/jdoe/skupper-router/bin -# Run the script like so - -# 2. ./export.sh -# (Example : ./export.sh /home/jdoe/ 1.5.1 -# (/home/jdoe is the folder you want the tar.gz file to be put - specify the full path) +# Run the script like so - +# 2. ./export.sh +# (Example : ./export.sh /home/jdoe/ 1.5.1 +# (/home/jdoe is the folder you want the tar.gz file to be put - specify the full path) # 1.5.1 is the tag name # A file named skupper-router-.tar.gz will be created at -# Simply running ./export.sh will put the tar.gz file in the current folder and use the very latest createed tag +# Simply running ./export.sh will put the tar.gz file in the current folder and use the very latest createed tag set -e trap "cleanup" 0 1 2 3 9 11 13 15 diff --git a/bin/find_ports.sh b/bin/find_ports.sh index 4c1239e8c..cbdea3684 100755 --- a/bin/find_ports.sh +++ b/bin/find_ports.sh @@ -25,4 +25,3 @@ # With no dir search under current directory. find "$@" -name '*.log' | xargs gawk 'match($0, /Listening on .* ([0-9]+)/, m) { print m[1] } match($0, /Configured Listener: .*:([0-9]+)/, m) { print m[1] }' - diff --git a/bin/record-coverage.sh b/bin/record-coverage.sh index 33fe278e0..6481d9ac8 100755 --- a/bin/record-coverage.sh +++ b/bin/record-coverage.sh @@ -77,4 +77,3 @@ lcov --remove dispatch-total-raw.info "/usr/include*" "/usr/share*" "${SRCPATH}/ # Generate report rm -rf html genhtml -p $SRCPATH -p $BLDPATH dispatch-total.info --title "Dispatch Router Test Coverage" --demangle-cpp -o html - diff --git a/docs/man/skmanage.8.adoc b/docs/man/skmanage.8.adoc index 2884628f0..467225963 100644 --- a/docs/man/skmanage.8.adoc +++ b/docs/man/skmanage.8.adoc @@ -31,9 +31,9 @@ SYNOPSIS DESCRIPTION ----------- -An AMQP management client for use with the skupper-router daemon -('skrouterd'). Sends AMQP management operations requests and prints -the response in JSON format. This is a generic AMQP management tool +An AMQP management client for use with the skupper-router daemon +('skrouterd'). Sends AMQP management operations requests and prints +the response in JSON format. This is a generic AMQP management tool and can be used with any AMQP endpoint that follows the AMQP Management specification, not just with 'skrouterd'. diff --git a/docs/notes/router-annotations.adoc b/docs/notes/router-annotations.adoc index 2b2f5ae20..bf0fd1ceb 100644 --- a/docs/notes/router-annotations.adoc +++ b/docs/notes/router-annotations.adoc @@ -131,4 +131,3 @@ Interior routers will include the full set of router annotations - including the ingress-router and trace list fields - on messages sent to an edge router. It is expected that the edge router can safely ignore the ingress-router and trace field values in this case. - diff --git a/docs/notes/shutdown.adoc b/docs/notes/shutdown.adoc index 1365dc954..71f08c5be 100644 --- a/docs/notes/shutdown.adoc +++ b/docs/notes/shutdown.adoc @@ -34,7 +34,7 @@ How does the router shut down when interrupted with ctrl-C ? including itself as one of the worker threads. ... thread_run() + - is in a loop processing batches of events, calling + is in a loop processing batches of events, calling handle() on each event. .... handle() + @@ -43,9 +43,9 @@ How does the router shut down when interrupted with ctrl-C ? thread, and then returns 'false'. ... thread_run() receives false return from handle(), indicating - that the thread is no longer running. It drops out of the - running loop. If there is a connection, it calls - qd_conn_event_batch_complete() with last arg false, indicating that + that the thread is no longer running. It drops out of the + running loop. If there is a connection, it calls + qd_conn_event_batch_complete() with last arg false, indicating that the connection has not closed. It then calls pn_proactor_done() and returns, to be joined by qd_server_run(). @@ -61,8 +61,8 @@ How does the router shut down when interrupted with ctrl-C ? . main_process() + nulls out and dispatch pointer, and calls qd_dispatch_free(). - It then flushes any remaining content in stdout, disables its - SIGINT handler, and sends SIGINT + It then flushes any remaining content in stdout, disables its + SIGINT handler, and sends SIGINT to itself, terminating the qdrouterd process. .. qd_dispatch_free() + @@ -126,9 +126,3 @@ How does the router shut down when interrupted with ctrl-C ? ... qd_alloc_finalize() + All allocated items should have been released by now, and there should be only a single thread running. No locking will be done. Clean up all items on the types list. Reclaim the items on the global free pool. Reclaim items on thread pools. Check stats to detect allocated items that have not been freed. - - - - - - diff --git a/etc/sasl2/skrouterd.conf b/etc/sasl2/skrouterd.conf index c8d866643..48047b35c 100644 --- a/etc/sasl2/skrouterd.conf +++ b/etc/sasl2/skrouterd.conf @@ -22,14 +22,14 @@ #--------------------------------- # # This default mech list allows for PLAIN, but that -# mechanism sends credentials in the clear, and is normally +# mechanism sends credentials in the clear, and is normally # only used along with SSL transport-layer security. # # This default also permits DIGEST-MD5, but you must have # a user and password defined in your sasldb file to use # this mechanism. ( See notes below. ) # -# PLEASE NOTE +# PLEASE NOTE # For production messaging systems, a high-security mechanism such as # DIGEST-MD5 or PLAIN+SSL should be used. # @@ -50,23 +50,23 @@ mech_list: ANONYMOUS DIGEST-MD5 EXTERNAL PLAIN # configuration attribute. # # If your nonstandard sasl directory is $MY_SASL_DIR, put a copy -# of this file at $MY_SASL_DIR/skrouterd.conf, alter the mech list as -# appropriate for your installation, and then use the saslpasswd2 +# of this file at $MY_SASL_DIR/skrouterd.conf, alter the mech list as +# appropriate for your installation, and then use the saslpasswd2 # command to add new user+passwd pairs: # echo $PASSWD | saslpasswd2 -c -p -f $MY_SASL_DIR/skrouterd.sasldb -u QPID $USERNAME -# # -# 2. The standard location for the skrouterd sasldb file is +# +# 2. The standard location for the skrouterd sasldb file is # /var/lib/skrouterd/skrouterd.sasldb # # 3. You can see what usernames have been stored in the sasldb, with the # command "sasldblistusers2 -f /var/lib/skrouterd/skrouterd.sasldb" # # 4. The sasldb file must be readable by the user running the skrouterd -# daemon, ( the user name is skrouterd ) and should be readable only +# daemon, ( the user name is skrouterd ) and should be readable only # by that user. # -# 5. The EXTERNAL mechanism allows you to use SSL transport layer +# 5. The EXTERNAL mechanism allows you to use SSL transport layer # security. In that case, you can also set the broker option # --ssl-require-client-authentication . @@ -75,6 +75,3 @@ mech_list: ANONYMOUS DIGEST-MD5 EXTERNAL PLAIN # The following line stops spurious 'sql_select option missing' errors when # cyrus-sql-sasl plugin is installed sql_select: dummy select - - - diff --git a/etc/skrouterd.conf b/etc/skrouterd.conf index 6eaa08278..fa7226bc0 100644 --- a/etc/skrouterd.conf +++ b/etc/skrouterd.conf @@ -55,5 +55,3 @@ address { prefix: broadcast distribution: multicast } - - diff --git a/include/qpid/dispatch/atomic.h b/include/qpid/dispatch/atomic.h index 7a5754a8c..10a95cc54 100644 --- a/include/qpid/dispatch/atomic.h +++ b/include/qpid/dispatch/atomic.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/bitmask.h b/include/qpid/dispatch/bitmask.h index 7b168082e..ae8f580c2 100644 --- a/include/qpid/dispatch/bitmask.h +++ b/include/qpid/dispatch/bitmask.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -58,4 +58,3 @@ void _qdbm_next(qd_bitmask_t *b, int *v); ///@} #endif - diff --git a/include/qpid/dispatch/buffer.h b/include/qpid/dispatch/buffer.h index d2608a6f3..b0ddcf6e5 100644 --- a/include/qpid/dispatch/buffer.h +++ b/include/qpid/dispatch/buffer.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/compose.h b/include/qpid/dispatch/compose.h index 7a1a5f0ef..319dbfc19 100644 --- a/include/qpid/dispatch/compose.h +++ b/include/qpid/dispatch/compose.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -25,10 +25,9 @@ /** A linked list of buffers composing a sequence of AMQP data objects. */ typedef struct qd_composed_field_t qd_composed_field_t; - /**@file * Composing AMQP data trees. - * + * * @defgroup compose compose * * Compose a tree-structure representing an AMQP datatype that can @@ -263,4 +262,3 @@ void qd_compose_insert_double(qd_composed_field_t *field, double value); ///@} #endif - diff --git a/include/qpid/dispatch/container.h b/include/qpid/dispatch/container.h index f2eadc09a..46715b2d6 100644 --- a/include/qpid/dispatch/container.h +++ b/include/qpid/dispatch/container.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/ctools.h b/include/qpid/dispatch/ctools.h index ba5936e6e..c97c471c2 100644 --- a/include/qpid/dispatch/ctools.h +++ b/include/qpid/dispatch/ctools.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/delivery_state.h b/include/qpid/dispatch/delivery_state.h index 36ac87868..44f655a0f 100644 --- a/include/qpid/dispatch/delivery_state.h +++ b/include/qpid/dispatch/delivery_state.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -74,4 +74,3 @@ static inline bool qd_delivery_state_is_terminal(uint64_t type) } #endif - diff --git a/include/qpid/dispatch/discriminator.h b/include/qpid/dispatch/discriminator.h index 077cf81b3..5c575fc24 100644 --- a/include/qpid/dispatch/discriminator.h +++ b/include/qpid/dispatch/discriminator.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -19,8 +19,6 @@ * under the License. */ - - // QD_DISCRIMINATOR_SIZE includes null terminator byte. The // strlen() of a discriminator will be 15 @@ -33,6 +31,4 @@ */ void qd_generate_discriminator(char *string); - #endif - diff --git a/include/qpid/dispatch/failoverlist.h b/include/qpid/dispatch/failoverlist.h index 0a0526ab3..361e392de 100644 --- a/include/qpid/dispatch/failoverlist.h +++ b/include/qpid/dispatch/failoverlist.h @@ -9,9 +9,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/hash.h b/include/qpid/dispatch/hash.h index cacd2a842..6efa1ef14 100644 --- a/include/qpid/dispatch/hash.h +++ b/include/qpid/dispatch/hash.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/message.h b/include/qpid/dispatch/message.h index 80f747629..9413bd09f 100644 --- a/include/qpid/dispatch/message.h +++ b/include/qpid/dispatch/message.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -30,7 +30,7 @@ #include /**@file - * Message representation. + * Message representation. * * @defgroup message message * @@ -582,7 +582,7 @@ uint8_t qd_message_get_priority(qd_message_t *msg); /** * True if message is larger that maxMessageSize * @param msg A pointer to the message - * @return + * @return */ bool qd_message_oversize(const qd_message_t *msg); diff --git a/include/qpid/dispatch/parse.h b/include/qpid/dispatch/parse.h index 6193bc369..90a9b78a8 100644 --- a/include/qpid/dispatch/parse.h +++ b/include/qpid/dispatch/parse.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -303,4 +303,3 @@ static inline uint32_t qd_parse_uint32_decode(const uint8_t buf[]) ///@} #endif - diff --git a/include/qpid/dispatch/protocol_adaptor.h b/include/qpid/dispatch/protocol_adaptor.h index 58ffffa9c..7c0fce5af 100644 --- a/include/qpid/dispatch/protocol_adaptor.h +++ b/include/qpid/dispatch/protocol_adaptor.h @@ -265,13 +265,12 @@ qdr_protocol_adaptor_t *qdr_protocol_adaptor(qdr_core_t *core, qdr_connection_close_t conn_close, qdr_connection_trace_t conn_trace); - /** * qdr_protocol_adaptor_free * * Free the resources used for a protocol adaptor. This should be called during adaptor * finalization. - * + * * @param core Pointer to the core object * @param adaptor Pointer to a protocol adaptor object returned by qdr_protocol_adaptor */ diff --git a/include/qpid/dispatch/proton_utils.h b/include/qpid/dispatch/proton_utils.h index bb69dd432..6a68fe2f6 100644 --- a/include/qpid/dispatch/proton_utils.h +++ b/include/qpid/dispatch/proton_utils.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -41,4 +41,3 @@ char *qdpn_data_as_string(pn_data_t *data); int qdpn_data_insert(pn_data_t *dest, pn_data_t *src); #endif - diff --git a/include/qpid/dispatch/router.h b/include/qpid/dispatch/router.h index 791a16d36..43afee031 100644 --- a/include/qpid/dispatch/router.h +++ b/include/qpid/dispatch/router.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h index 4111c5997..aa8d16189 100644 --- a/include/qpid/dispatch/router_core.h +++ b/include/qpid/dispatch/router_core.h @@ -71,10 +71,9 @@ qd_dispatch_t *qdr_core_dispatch(qdr_core_t *core); */ void qdr_process_tick(qdr_core_t *core); - /** * Return true iff the test hooks option is enabled for this process. - * + * * @param core Pointer to the core object returned by qd_core() * @return true iff test hooks are enabled */ @@ -101,11 +100,11 @@ typedef void (*qdr_set_mobile_seq_t) (void *context, int router_maskbit, uint typedef void (*qdr_set_my_mobile_seq_t) (void *context, uint64_t mobile_seq); typedef void (*qdr_link_lost_t) (void *context, int link_maskbit); -void qdr_core_route_table_handlers(qdr_core_t *core, - void *context, - qdr_set_mobile_seq_t set_mobile_seq, - qdr_set_my_mobile_seq_t set_my_mobile_seq, - qdr_link_lost_t link_lost); +void qdr_core_route_table_handlers(qdr_core_t *core, + void *context, + qdr_set_mobile_seq_t set_mobile_seq, + qdr_set_my_mobile_seq_t set_my_mobile_seq, + qdr_link_lost_t link_lost); /** ****************************************************************************** @@ -184,7 +183,7 @@ typedef uint32_t qdr_watch_handle_t; /** * Handler for updates on watched addresses. This function shall be invoked on an IO thread. - * + * * Note: This function will be invoked when a watched address has a change in reachability. * It is possible that the function may be called when no change occurs, particularly when an * address is removed from the core address table. @@ -216,7 +215,7 @@ typedef void (*qdr_address_watch_cancel_t)(void *context); * * Subscribe to watch for changes in the reachability for an address. It is safe to invoke this * function from an IO thread. - * + * * @param core Pointer to the core module * @param address The address to be watched * @param aclass Address class character @@ -235,12 +234,12 @@ qdr_watch_handle_t qdr_core_watch_address(qdr_core_t *core, /** * qdr_core_unwatch_address - * + * * Cancel an address watch subscription. It is safe to invoke this function from an IO thread. * * Note that it is possible for the watch update handler to be invoked after the unwatch call is made. * Wait until the on_cancel handler is invoked to clean up any related resources. - * + * * @param core Pointer to the core module * @param handle Watch handle returned by qdr_core_watch_address */ diff --git a/include/qpid/dispatch/server.h b/include/qpid/dispatch/server.h index 4f17bd6cd..c8a3fe742 100644 --- a/include/qpid/dispatch/server.h +++ b/include/qpid/dispatch/server.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -338,7 +338,7 @@ typedef struct qd_server_config_t { uint32_t max_frame_size; /** - * The max_sessions value is the number of sessions allowed on the Connection. + * The max_sessions value is the number of sessions allowed on the Connection. */ uint32_t max_sessions; diff --git a/include/qpid/dispatch/threading.h b/include/qpid/dispatch/threading.h index 53381be1f..e6920f0ce 100644 --- a/include/qpid/dispatch/threading.h +++ b/include/qpid/dispatch/threading.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/timer.h b/include/qpid/dispatch/timer.h index a3089bb95..01dd7e7b3 100644 --- a/include/qpid/dispatch/timer.h +++ b/include/qpid/dispatch/timer.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -26,7 +26,7 @@ /**@file * Server Timer Functions - * + * * @defgroup timer timer * * Server Timer Functions diff --git a/include/qpid/dispatch/trace_mask.h b/include/qpid/dispatch/trace_mask.h index 7863c8517..44735eebe 100644 --- a/include/qpid/dispatch/trace_mask.h +++ b/include/qpid/dispatch/trace_mask.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/include/qpid/dispatch/vanflow.h b/include/qpid/dispatch/vanflow.h index 0b4075216..cf2cb22c2 100644 --- a/include/qpid/dispatch/vanflow.h +++ b/include/qpid/dispatch/vanflow.h @@ -106,13 +106,12 @@ typedef enum vflow_attribute { #define VALID_STRING_ATTRS 0x00000005787ffe00 #define VALID_TRACE_ATTRS 0x0000000080000000 - /** * vflow_start_record - * + * * Open a new protocol-log record, specifying the parent record that the new record is * a child of. - * + * * @param record_type The type for the newly opened record * @param parent Pointer to the parent record. If NULL, it will reference the local SOURCE record. * @return Pointer to the new record @@ -121,42 +120,40 @@ vflow_record_t *vflow_start_record(vflow_record_type_t record_type, vflow_record /** * vflow_end_record - * + * * Close a record when it is no longer needed. After a record is closed, it cannot be referenced * or accessed in any way thereafter. - * + * * @param record The record pointer returned by vflow_start_record */ void vflow_end_record(vflow_record_t *record); /** * vflow_serialize_identity - * + * * Encode the identity of the indicated record into the supplied composed-field. - * + * * @param record Pointer to the record from which to obtain the identity * @param field Pointer to the composed-field into which to serialize the identity */ void vflow_serialize_identity(const vflow_record_t *record, qd_composed_field_t *field); - /** * vflow_set_ref_from_record - * + * * Set a reference-typed attribute in a record from the ID of another record. - * + * * @param record The record pointer returned by vflow_start_record * @param attribute_type The type of the attribute (see enumerated above) to be set * @param record Pointer to the referenced record. */ void vflow_set_ref_from_record(vflow_record_t *record, vflow_attribute_t attribute_type, vflow_record_t *referenced_record); - /** * vflow_set_ref_from_parsed - * + * * Set a reference-typed attribute in a record from a parsed field (a serialized identity). - * + * * @param record The record pointer returned by vflow_start_record * @param attribute_type The type of the attribute (see enumerated above) to be set * @param field Pointer to a parsed field containing the serialized form of a record identity @@ -165,9 +162,9 @@ void vflow_set_ref_from_parsed(vflow_record_t *record, vflow_attribute_t attribu /** * vflow_set_string - * + * * Set a string-typed attribute in a record. - * + * * @param record The record pointer returned by vflow_start_record * @param attribute_type The type of the attribute (see enumerated above) to be set * @param value The string value to be set @@ -176,22 +173,21 @@ void vflow_set_string(vflow_record_t *record, vflow_attribute_t attribute_type, /** * vflow_set_uint64 - * + * * Set a uint64-typed attribute in a record. - * + * * @param record The record pointer returned by vflow_start_record * @param attribute_type The type of the attribute (see enumerated above) to be set * @param value The unsigned integer value to be set */ void vflow_set_uint64(vflow_record_t *record, vflow_attribute_t attribute_type, uint64_t value); - /** * vflow_set_trace - * + * * Set the VFLOW_ATTRIBUTE_TRACE attribute of the record using the trace annotation from the * referenced message. - * + * * @param record The record pointer returned by vflow_start_record * @param msg Pointer to a message from which to extract the path trace */ diff --git a/python/skupper_router/management/skrouter.json b/python/skupper_router/management/skrouter.json index 8f6ae132c..6d0817c1f 100644 --- a/python/skupper_router/management/skrouter.json +++ b/python/skupper_router/management/skrouter.json @@ -1,5 +1,5 @@ { - "description": "Schema for the Skupper Router management model. See skrouter.json.readme.txt.", + "description": "Schema for the Skupper Router management model. See skrouter.json.readme.txt.", "prefix": "io.skupper.router", @@ -137,7 +137,14 @@ "description": "The standard AMQP management node interface.", "fullName": true, "extends": "operationalEntity", - "operations": ["QUERY", "GET-TYPES", "GET-ANNOTATIONS", "GET-OPERATIONS", "GET-ATTRIBUTES", "GET-MGMT-NODES"], + "operations": [ + "QUERY", + "GET-TYPES", + "GET-ANNOTATIONS", + "GET-OPERATIONS", + "GET-ATTRIBUTES", + "GET-MGMT-NODES" + ], "operationDefs": { "QUERY": { "description": "Query for attribute values of multiple entities.", @@ -148,21 +155,25 @@ "type": "string" }, "entityType": { - "description": "If set, restrict query results to entities that extend (directly or indirectly) this type", + "description": + "If set, restrict query results to entities that extend (directly or indirectly) this type", "type": "string" }, "offset": { - "description": "If set, specifies the number of the first element of the result set to be returned.", + "description": + "If set, specifies the number of the first element of the result set to be returned.", "type": "integer", "default": 0 }, "count": { - "description": "If set, specifies the number of entries from the result set to return. If not set return all from `offset`", + "description": + "If set, specifies the number of entries from the result set to return. If not set return all from `offset`", "type": "integer" } }, "body": { - "description": "A map containing the key `attributeNames` with value a list of (string) attribute names to return. If the list or the map is empty or the body is missing all attributes are returned.", + "description": + "A map containing the key `attributeNames` with value a list of (string) attribute names to return. If the list or the map is empty or the body is missing all attributes are returned.", "type": "map" } }, @@ -178,7 +189,8 @@ } }, "body": { - "description": "A map with two entries. `attributeNames` is a list of the attribute names returned. `results` is a list of lists each containing the attribute values for a single entity in the same order as the names in the `attributeNames` entry. If an attribute name is not applicable for an entity then the corresponding value is `null`", + "description": + "A map with two entries. `attributeNames` is a list of the attribute names returned. `results` is a list of lists each containing the attribute values for a single entity in the same order as the names in the `attributeNames` entry. If an attribute name is not applicable for an entity then the corresponding value is `null`", "type": "map" } } @@ -192,14 +204,16 @@ "type": "string" }, "entityType": { - "description": "If set, restrict query results to entities that extend (directly or indirectly) this type", + "description": + "If set, restrict query results to entities that extend (directly or indirectly) this type", "type": "string" } } }, "response": { "body": { - "description": "A map where each key is an entity type name (string) and the corresponding value is the list of the entity types (strings) that it extends.", + "description": + "A map where each key is an entity type name (string) and the corresponding value is the list of the entity types (strings) that it extends.", "type": "map" } } @@ -213,14 +227,16 @@ "type": "string" }, "entityType": { - "description": "If set, restrict query results to entities that extend (directly or indirectly) this type", + "description": + "If set, restrict query results to entities that extend (directly or indirectly) this type", "type": "string" } } }, "response": { "body": { - "description": "A map where each key is an entity type name (string) and the corresponding value is the list of operation names (strings) that it supports.", + "description": + "A map where each key is an entity type name (string) and the corresponding value is the list of operation names (strings) that it supports.", "type": "map" } } @@ -233,14 +249,16 @@ "type": "string" }, "entityType": { - "description": "If set, restrict query results to entities that extend (directly or indirectly) this type", + "description": + "If set, restrict query results to entities that extend (directly or indirectly) this type", "type": "string" } } }, "response": { "body": { - "description": "A map where each key is an entity type name (string) and the corresponding value is the list of annotations (strings) that it implements.", + "description": + "A map where each key is an entity type name (string) and the corresponding value is the list of annotations (strings) that it implements.", "type": "map" } } @@ -254,14 +272,16 @@ "type": "string" }, "entityType": { - "description": "If set, restrict query results to entities that extend (directly or indirectly) this type", + "description": + "If set, restrict query results to entities that extend (directly or indirectly) this type", "type": "string" } } }, "response": { "body": { - "description": "A map where each key is an entity type name (string) and the corresponding value is a list (of strings) of attributes on that entity type.", + "description": + "A map where each key is an entity type name (string) and the corresponding value is a list (of strings) of attributes on that entity type.", "type": "map" } } @@ -278,7 +298,8 @@ }, "response": { "body": { - "description": "A list of addresses (strings) of management nodes known to this management node.", + "description": + "A list of addresses (strings) of management nodes known to this management node.", "type": "list" } } @@ -290,7 +311,12 @@ "description": "Qpid Dispatch Router extensions to the standard org.amqp.management interface.", "extends": "org.amqp.management", "singleton": true, - "operations": ["GET-SCHEMA", "GET-JSON-SCHEMA", "GET-LOG", "PROFILE"], + "operations": [ + "GET-SCHEMA", + "GET-JSON-SCHEMA", + "GET-LOG", + "PROFILE" + ], "operationDefs": { "GET-SCHEMA": { "description": "Get the skrouterd schema for this router in AMQP map format", @@ -318,7 +344,8 @@ "type": "string" }, "indent": { - "description": "Number of spaces to indent the formatted result. If not specified, the result is in minimal format, no unnecessary spaces or newlines.", + "description": + "Number of spaces to indent the formatted result. If not specified, the result is in minimal format, no unnecessary spaces or newlines.", "type": "integer" } } @@ -346,7 +373,8 @@ }, "response": { "body": { - "description": "A list of log entries where each entry is a list of: module name(string), level name(string), message text(string), file name(string or None), line number(integer or None) , timestamp(integer)", + "description": + "A list of log entries where each entry is a list of: module name(string), level name(string), message text(string), file name(string or None), line number(integer or None) , timestamp(integer)", "type": "string" } } @@ -358,23 +386,29 @@ "description": "Base type for entities containing configuration information.", "extends": "entity", "attributes": {}, - "operations": ["READ"] + "operations": [ + "READ" + ] }, "operationalEntity": { "description": "Base type for entities containing current operational information.", "extends": "entity", - "operations": ["READ"], + "operations": [ + "READ" + ], "attributes": {} }, "router": { - "description":"Tracks peer routers and computes routes to destinations. This entity is mandatory. The router will not start without this entity.", + "description": + "Tracks peer routers and computes routes to destinations. This entity is mandatory. The router will not start without this entity.", "extends": "configurationEntity", "singleton": true, "attributes": { "id": { - "description":"Router's unique identity. This field may not contain whitespace or control characters. If not specified, a random identity will be assigned at startup.", + "description": + "Router's unique identity. This field may not contain whitespace or control characters. If not specified, a random identity will be assigned at startup.", "type": "string", "required": false, "create": true @@ -386,7 +420,8 @@ "edge" ], "default": "standalone", - "description": "In standalone mode, the router operates as a single component. It does not participate in the routing protocol and therefore will not cooperate with other routers. In interior mode, the router operates in cooperation with other interior routers in an interconnected network. In edge mode, the router can make a connection to an interior router and join a network without causing that network to recompute paths.", + "description": + "In standalone mode, the router operates as a single component. It does not participate in the routing protocol and therefore will not cooperate with other routers. In interior mode, the router operates in cooperation with other interior routers in an interconnected network. In edge mode, the router can make a connection to an interior router and join a network without causing that network to recompute paths.", "create": true }, "area": { @@ -417,13 +452,15 @@ "raIntervalSeconds": { "type": "integer", "default": 30, - "description": "Interval in seconds between Router-Advertisements sent to all routers in a stable network.", + "description": + "Interval in seconds between Router-Advertisements sent to all routers in a stable network.", "create": true }, "raIntervalFluxSeconds": { "type": "integer", "default": 4, - "description": "Interval in seconds between Router-Advertisements sent to all routers during topology fluctuations.", + "description": + "Interval in seconds between Router-Advertisements sent to all routers during topology fluctuations.", "create": true }, "remoteLsMaxAgeSeconds": { @@ -435,12 +472,14 @@ "workerThreads": { "type": "integer", "default": 4, - "description": "The number of threads that will be created to process message traffic and other application work (timers, non-amqp file descriptors, etc.) .", + "description": + "The number of threads that will be created to process message traffic and other application work (timers, non-amqp file descriptors, etc.) .", "create": true }, "debugDumpFile": { "type": "path", - "description": "The absolute path to the location for the debug dump file. The router writes debug-level information to this file if the logger is not available.", + "description": + "The absolute path to the location for the debug dump file. The router writes debug-level information to this file if the logger is not available.", "create": true }, "saslConfigDir": { @@ -451,7 +490,8 @@ }, "saslConfigName": { "type": "string", - "description": "Name of the SASL configuration. This string + '.conf' is the name of the configuration file.", + "description": + "Name of the SASL configuration. This string + '.conf' is the name of the configuration file.", "default": "skrouterd", "required": false, "create": true @@ -467,121 +507,138 @@ "create": true }, "defaultDistribution": { - "type": ["multicast", "closest", "balanced", "unavailable"], - "description": "Default forwarding treatment for any address without a specified treatment. multicast - one copy of each message delivered to all subscribers; closest - messages delivered to only the closest subscriber; balanced - messages delivered to one subscriber with load balanced across subscribers; unavailable - this address is unavailable, messages sent and link attaches to the address will be rejected.", + "type": [ + "multicast", + "closest", + "balanced", + "unavailable" + ], + "description": + "Default forwarding treatment for any address without a specified treatment. multicast - one copy of each message delivered to all subscribers; closest - messages delivered to only the closest subscriber; balanced - messages delivered to one subscriber with load balanced across subscribers; unavailable - this address is unavailable, messages sent and link attaches to the address will be rejected.", "create": true, "required": false, "default": "balanced" }, "metadata": { "type": "string", - "description": "Optional metadata text to describe or label this router. This text does not affect the function of the router, but it can be used by external tools (such as orchestration software) to control how the router is displayed.", + "description": + "Optional metadata text to describe or label this router. This text does not affect the function of the router, but it can be used by external tools (such as orchestration software) to control how the router is displayed.", "create": true, "required": false }, - "addrCount": { - "type": "integer", - "description":"Number of addresses known to the router.", - "graph": true - }, - "linkCount": { - "type": "integer", - "description":"Number of links attached to the router node.", - "graph": true - }, + "addrCount": { + "type": "integer", + "description": "Number of addresses known to the router.", + "graph": true + }, + "linkCount": { + "type": "integer", + "description": "Number of links attached to the router node.", + "graph": true + }, "blockedLinkCount": { "type": "integer", - "description": "The number of links that are flagged as blocked. A blocked link is one in which the available credit has remained zero for more than 10 seconds.", + "description": + "The number of links that are flagged as blocked. A blocked link is one in which the available credit has remained zero for more than 10 seconds.", + "graph": true + }, + "nodeCount": { + "type": "integer", + "description": "Number of known peer router nodes.", + "graph": true + }, + "autoLinkCount": { + "type": "integer", + "description": "Number of auto links attached to the router node.", + "graph": true + }, + "connectionCount": { + "type": "integer", + "description": "Number of open connections to the router node.", + "graph": true + }, + "tcpConnectionCount": { + "type": "integer", + "description": "Number of open tcp connections at this router node.", "graph": true }, - "nodeCount": { - "type": "integer", - "description":"Number of known peer router nodes.", - "graph": true - }, - "autoLinkCount": { - "type": "integer", - "description":"Number of auto links attached to the router node.", - "graph": true - }, - "connectionCount": { - "type": "integer", - "description":"Number of open connections to the router node.", - "graph": true - }, - "tcpConnectionCount": { - "type": "integer", - "description":"Number of open tcp connections at this router node.", - "graph": true - }, "presettledDeliveries": { "type": "integer", - "description":"Number of presettled deliveries handled by the router.", + "description": "Number of presettled deliveries handled by the router.", "graph": true }, "droppedPresettledDeliveries": { "type": "integer", - "description":"Number of presettled deliveries that were dropped by the router.", + "description": "Number of presettled deliveries that were dropped by the router.", "graph": true }, "acceptedDeliveries": { "type": "integer", - "description":"Number of deliveries whose delivery state was set to ACCEPTED by the router. These deliveries were successfully processed by the router.", + "description": + "Number of deliveries whose delivery state was set to ACCEPTED by the router. These deliveries were successfully processed by the router.", "graph": true }, "rejectedDeliveries": { "type": "integer", - "description":"Number of deliveries whose delivery state was set to REJECTED by the router. These deliveries were Invalid and unprocessable.", + "description": + "Number of deliveries whose delivery state was set to REJECTED by the router. These deliveries were Invalid and unprocessable.", "graph": true }, "releasedDeliveries": { "type": "integer", - "description":"Number of deliveries whose delivery state was set to RELEASED by the router. These deliveries was not (and will not be) processed", + "description": + "Number of deliveries whose delivery state was set to RELEASED by the router. These deliveries was not (and will not be) processed", "graph": true }, "modifiedDeliveries": { "type": "integer", - "description":"Number of deliveries whose delivery state was set to MODIFIED by the router. These deliveries were modified but not processed.", + "description": + "Number of deliveries whose delivery state was set to MODIFIED by the router. These deliveries were modified but not processed.", "graph": true }, "deliveriesDelayed1Sec": { "type": "integer", "graph": true, - "description": "The total number of settled deliveries that were held in the router for 1 to 10 seconds." + "description": + "The total number of settled deliveries that were held in the router for 1 to 10 seconds." }, "deliveriesDelayed10Sec": { "type": "integer", "graph": true, - "description": "The total number of settled deliveries that were held in the router for more than 10 seconds." + "description": + "The total number of settled deliveries that were held in the router for more than 10 seconds." }, "deliveriesStuck": { "type": "integer", "graph": true, - "description": "The current number of deliveries that are unsettled and have been held in the router for more than 10 seconds." + "description": + "The current number of deliveries that are unsettled and have been held in the router for more than 10 seconds." }, "deliveriesIngress": { "type": "integer", - "description":"Number of deliveries that were sent to it by a sender that is directly attached to the router.", + "description": + "Number of deliveries that were sent to it by a sender that is directly attached to the router.", "graph": true }, "deliveriesEgress": { "type": "integer", - "description":"Number of deliveries that were sent by the router to a receiver that is directly attached to the router.", + "description": + "Number of deliveries that were sent by the router to a receiver that is directly attached to the router.", "graph": true }, "deliveriesTransit": { "type": "integer", - "description":"Number of deliveries that were sent to another router in the network.", + "description": "Number of deliveries that were sent to another router in the network.", "graph": true }, "deliveriesIngressRouteContainer": { "type": "integer", - "description":"Number of deliveries that were received from router container connections.", + "description": "Number of deliveries that were received from router container connections.", "graph": true }, "deliveriesEgressRouteContainer": { "type": "integer", - "description":"Number of deliveries that were sent to route container connections.", + "description": "Number of deliveries that were sent to route container connections.", "graph": true }, "uptimeSeconds": { @@ -592,52 +649,63 @@ "memoryUsage": { "type": "integer", "graph": true, - "description": "The current amount of memory in use by the router process in bytes. This includes memory provisioned for stack, data, and code (VmSize). This value is set to Null if the platform does not provide access to the process memory size." + "description": + "The current amount of memory in use by the router process in bytes. This includes memory provisioned for stack, data, and code (VmSize). This value is set to Null if the platform does not provide access to the process memory size." } } }, "sslProfile": { - "description":"Attributes for setting TLS/SSL configuration for connections.", + "description": "Attributes for setting TLS/SSL configuration for connections.", "referential": true, "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], + "operations": [ + "CREATE", + "DELETE" + ], "attributes": { "ciphers": { "type": "string", - "description": "Specifies the enabled ciphers so the SSL Ciphers can be hardened. In other words, use this field to disable weak ciphers. The ciphers are specified in the format understood by the OpenSSL library. For example, ciphers can be set to ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; -- The full list of allowed ciphers can be viewed using the openssl ciphers command", + "description": + "Specifies the enabled ciphers so the SSL Ciphers can be hardened. In other words, use this field to disable weak ciphers. The ciphers are specified in the format understood by the OpenSSL library. For example, ciphers can be set to ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; -- The full list of allowed ciphers can be viewed using the openssl ciphers command", "create": true }, "protocols": { "type": "string", - "description": "The TLS protocols that this sslProfile can use. You can specify a list of one or more of TLSv1, TLSv1.1, or TLSv1.2. To specify multiple protocols, separate the protocols with a space. For example, to permit the sslProfile to use TLS v1.1 and TLS v1.2 only, you would set the value to TLSv1.1 TLSv1.2. If you do not specify a value, the sslProfile uses the TLS protocol specified by the system-wide configuration.", + "description": + "The TLS protocols that this sslProfile can use. You can specify a list of one or more of TLSv1, TLSv1.1, or TLSv1.2. To specify multiple protocols, separate the protocols with a space. For example, to permit the sslProfile to use TLS v1.1 and TLS v1.2 only, you would set the value to TLSv1.1 TLSv1.2. If you do not specify a value, the sslProfile uses the TLS protocol specified by the system-wide configuration.", "create": true }, "caCertFile": { "type": "path", - "description": "The absolute path to the database that contains the public certificates of trusted certificate authorities (CA).", + "description": + "The absolute path to the database that contains the public certificates of trusted certificate authorities (CA).", "create": true }, "certFile": { "type": "path", - "description": "The absolute path to the file containing the PEM-formatted public certificate to be used on the local end of any connections using this profile.", + "description": + "The absolute path to the file containing the PEM-formatted public certificate to be used on the local end of any connections using this profile.", "create": true }, "privateKeyFile": { "type": "path", - "description": "The absolute path to the file containing the PEM-formatted private key for the above certificate.", + "description": + "The absolute path to the file containing the PEM-formatted private key for the above certificate.", "create": true }, "password": { "type": "string", - "description": "The password that unlocks the certificate key. You can specify the password by specifying an environment variable that stores the password, a file that stores the password, or by entering the password in clear text. To use an environment variable, specify 'password: env:'. Use this option with caution, because the environment of other processes is visible on certain platforms (for example, ps on certain Unix OSs). To use a file, specify 'password: file:'. This option is the most secure, because permissions can be set on the file that contains the password. To specify the password in clear text, specify 'password: pass:', or 'password: literal:', or 'password: '. This option is insecure, so it should only be used if security is not a concern.", + "description": + "The password that unlocks the certificate key. You can specify the password by specifying an environment variable that stores the password, a file that stores the password, or by entering the password in clear text. To use an environment variable, specify 'password: env:'. Use this option with caution, because the environment of other processes is visible on certain platforms (for example, ps on certain Unix OSs). To use a file, specify 'password: file:'. This option is the most secure, because permissions can be set on the file that contains the password. To specify the password in clear text, specify 'password: pass:', or 'password: literal:', or 'password: '. This option is insecure, so it should only be used if security is not a concern.", "create": true }, "uidFormat": { "type": "string", - "description": "A list of x509 client certificate fields that will be used to build a string that will uniquely identify the client certificate owner. For e.g. a value of 'cou' indicates that the uid will consist of c - common name concatenated with o - organization-company name concatenated with u - organization unit; or a value of 'o2' indicates that the uid will consist of o (organization name) concatenated with 2 (the sha256 fingerprint of the entire certificate) . Allowed values can be any combination of 'c'( ISO3166 two character country code), 's'(state or province), 'l'(Locality; generally - city), 'o'(Organization - Company Name), 'u'(Organization Unit - typically certificate type or brand), 'n'(CommonName - typically a user name for client certificates) and '1'(sha1 certificate fingerprint, as displayed in the fingerprints section when looking at a certificate with say a web browser is the hash of the entire certificate) and 2 (sha256 certificate fingerprint) and 5 (sha512 certificate fingerprint). The user identifier (uid) that is generated based on the uidFormat is a string which has a semi-colon as a separator between the components", + "description": + "A list of x509 client certificate fields that will be used to build a string that will uniquely identify the client certificate owner. For e.g. a value of 'cou' indicates that the uid will consist of c - common name concatenated with o - organization-company name concatenated with u - organization unit; or a value of 'o2' indicates that the uid will consist of o (organization name) concatenated with 2 (the sha256 fingerprint of the entire certificate) . Allowed values can be any combination of 'c'( ISO3166 two character country code), 's'(state or province), 'l'(Locality; generally - city), 'o'(Organization - Company Name), 'u'(Organization Unit - typically certificate type or brand), 'n'(CommonName - typically a user name for client certificates) and '1'(sha1 certificate fingerprint, as displayed in the fingerprints section when looking at a certificate with say a web browser is the hash of the entire certificate) and 2 (sha256 certificate fingerprint) and 5 (sha512 certificate fingerprint). The user identifier (uid) that is generated based on the uidFormat is a string which has a semi-colon as a separator between the components", "create": true }, "uidNameMappingFile": { @@ -648,185 +716,225 @@ } }, - "listener": { - "description": "Listens for incoming connections to the router.", - "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], - "attributes": { - "host": { - "description":"A host name, IPV4 or IPV6 literal, or the empty string. The empty string listens on all local addresses. A host name listens on all addresses associated with the name. An IPV6 literal address (or wildcard '[::]') listens only for IPV6. An IPV4 literal address (or wildcard '0.0.0.0') listens only for IPV4.", - "type": "string", - "default": "", - "create": true - }, - "port": { - "description": "Port number or symbolic service name. If '0', the router shall assign an ephemeral port to the listener and log the port number with a log of the form 'SERVER (notice) Listening on : ()'", - "type": "string", - "default": "amqp", - "create": true + "listener": + { + "description": "Listens for incoming connections to the router.", + "extends": "configurationEntity", + "operations": [ + "CREATE", + "DELETE" + ], + "attributes": + { + "host": { + "description": + "A host name, IPV4 or IPV6 literal, or the empty string. The empty string listens on all local addresses. A host name listens on all addresses associated with the name. An IPV6 literal address (or wildcard '[::]') listens only for IPV6. An IPV4 literal address (or wildcard '0.0.0.0') listens only for IPV4.", + "type": "string", + "default": "", + "create": true + }, + "port": { + "description": + "Port number or symbolic service name. If '0', the router shall assign an ephemeral port to the listener and log the port number with a log of the form 'SERVER (notice) Listening on : ()'", + "type": "string", + "default": "amqp", + "create": true - }, - "socketAddressFamily": { - "type": ["IPv4", "IPv6"], - "required": false, - "description": "['IPv4', 'IPv6'] IPv4: Internet Protocol version 4; IPv6: Internet Protocol version 6. If not specified, the protocol family will be automatically determined from the address.", - "create": true - }, - "role": { - "type": [ - "normal", - "inter-router", - "route-container", - "edge" - ], - "default": "normal", - "description": "The role of an established connection. In the normal role, the connection is assumed to be used for AMQP clients that are doing normal message delivery over the connection. In the inter-router role, the connection is assumed to be to another router in the network. Inter-router discovery and routing protocols can only be used over inter-router connections. route-container role can be used for router-container connections, for example, a router-broker connection. In the edge role, the connection is assumed to be between an edge router and an interior router.", - "create": true - }, - "cost": { - "type": "integer", - "default": 1, - "required": false, - "create": true, - "description": "For the 'inter-router' role only. This value assigns a cost metric to the inter-router connection. The default (and minimum) value is one. Higher values represent higher costs. The cost is used to influence the routing algorithm as it attempts to use the path with the lowest total cost from ingress to egress." - }, - "sslProfile": { - "type": "string", - "required": false, - "description": "Name of the sslProfile.", - "create": true - }, - "saslMechanisms": { - "type": "string", - "required": false, - "description": "Space separated list of accepted SASL authentication mechanisms.", - "create": true - }, - "authenticatePeer": { - "type": "boolean", - "default": false, - "description": "yes: Require the peer's identity to be authenticated; no: Do not require any peer authentication.", - "create": true - }, - "requireEncryption": { - "type": "boolean", - "default": false, - "description": "yes: Require the connection to the peer to be encrypted; no: Permit non-encrypted communication with the peer", - "create": true - }, - "requireSsl": { - "type": "boolean", - "default": false, - "description": "yes: Require the use of SSL or TLS on the connection; no: Allow clients to connect without SSL or TLS.", - "create": true - }, - "maxFrameSize": { - "type": "integer", - "default": 16384, - "description": "The maximum frame size in octets that will be used in the connection-open negotiation with a connected peer. The frame size is the largest contiguous set of uninterrupted data that can be sent for a message delivery over the connection. Interleaving of messages on different links is done at frame granularity. Policy settings, if specified, will overwrite this value. Defaults to 16384.", - "create": true - }, - "maxSessions": { - "type": "integer", - "default": 32768, - "description": "The maximum number of sessions that can be simultaneously active on the connection. Setting this value to zero selects the default number of sessions. Policy settings, if specified, will overwrite this value. Defaults to 32768.", - "create": true - }, - "maxSessionFrames": { - "type": "integer", - "description": "Session incoming window measured in transfer frames for sessions created on this connection. This is the number of transfer frames that may simultaneously be in flight for all links in the session. Setting this value to zero selects the default session window size. Policy settings, if specified, will overwrite this value. The numerical product of maxFrameSize and maxSessionFrames may not exceed 2^31-1. If (maxFrameSize x maxSessionFrames) exceeds 2^31-1 then maxSessionFrames is reduced to (2^31-1 / maxFrameSize). maxSessionFrames has a minimum value of 1. Defaults to 0 (unlimited window).", - "required": false, - "create": true - }, - "idleTimeoutSeconds": { - "type": "integer", - "default": 16, - "description": "The idle timeout, in seconds, for connections through this listener. If no frames are received on the connection for this time interval, the connection shall be closed.", - "required": false, - "create": true - }, - "initialHandshakeTimeoutSeconds": { - "type": "integer", - "default": 0, - "description": "The timeout, in seconds, for the initial handshake for connections coming in through listeners. If the time interval expires before the peer sends the AMQP OPEN frame, the connection shall be closed. A value of zero (the default) disables this timeout.", - "required": false, - "create": true - }, - "stripAnnotations": { - "type": ["in", "out", "both", "no"], - "default": "both", - "description": "['in', 'out', 'both', 'no'] in: Strip the dispatch router specific annotations only on ingress; out: Strip the dispatch router specific annotations only on egress; both: Strip the dispatch router specific annotations on both ingress and egress; no - do not strip dispatch router specific annotations", - "create": true - }, - "linkCapacity": { - "type": "integer", - "create": true, - "required": false, - "description": "The capacity of links within this connection, in terms of message deliveries. The capacity is the number of messages that can be in-flight concurrently for each link." - }, - "failoverUrls": { - "type": "string", - "create": true, - "required": false, - "description": "A comma-separated list of failover urls to be supplied to connected clients. Form: [(amqp|amqps|ws|wss)://]host_or_ip[:port]" - }, - "healthz": { - "type": "boolean", - "default": true, - "description": "Provide a simple HTTP based liveness test (using path /healthz). Assumes listener is enabled for http.", - "create": true - }, - "metrics": { - "type": "boolean", - "default": true, - "description": "Export metrics in prometheus text format for the router (using path /metrics). Assumes listener is enabled for http.", - "create": true - }, - "websockets": { - "type": "boolean", - "default": true, - "description": "For an http enabled listener, determines whether websockets access is enabled (true by default).", - "create": true - }, - "http": { - "type": "boolean", - "default": false, - "description": "Accept HTTP connections that can upgrade to AMQP over WebSocket. Plain AMQP connections are not accepted on this listener.", - "create": true - }, - "httpRootDir": { - "type": "path", - "description": "Absolute path to a directory from which to serve static HTML files (typically /usr/share/skupper-router/html).", - "create": true - }, - "messageLoggingComponents": { - "type": "string", - "default": "none", - "description": "A comma separated list that indicates which components of the message should be logged. Defaults to 'none' (log nothing). If you want all properties and application properties of the message logged use 'all'. Specific components of the message can be logged by indicating the components via a comma separated list. The components are message-id, user-id, to, subject, reply-to, correlation-id, content-type, content-encoding, absolute-expiry-time, creation-time, group-id, group-sequence, reply-to-group-id, app-properties. The application-data part of the bare message will not be logged. No spaces are allowed", - "create": true - }, - "policyVhost": { - "type": "string", - "required": false, - "description": "A listener may optionally define a virtual host to index to a specific policy to restrict the remote container to access only specific resources. This attribute defines the name of the policy vhost for this listener. If multi-tenancy is enabled for the listener, this vhost will override the peer-supplied vhost for the purposes of identifying the desired policy settings for the connections.", - "create": true - }, - "openProperties": { - "description": "A JSON map containing connection properties. These will be sent to the peer on connection open. All map keys are restricted to strings containing only valid ASCII characters, Keys must not start with prefixes 'qd.' or 'x-opt-qd.'. The following key values are also reserved: 'product', 'version', 'failover-server-list', 'network-host', 'port', 'scheme' 'hostname'", - "type": "properties", - "required": false, - "create": true - } - } - }, + }, + "socketAddressFamily": { + "type": [ + "IPv4", + "IPv6" + ], + "required": false, + "description": + "['IPv4', 'IPv6'] IPv4: Internet Protocol version 4; IPv6: Internet Protocol version 6. If not specified, the protocol family will be automatically determined from the address.", + "create": true + }, + "role": { + "type": [ + "normal", + "inter-router", + "route-container", + "edge" + ], + "default": "normal", + "description": + "The role of an established connection. In the normal role, the connection is assumed to be used for AMQP clients that are doing normal message delivery over the connection. In the inter-router role, the connection is assumed to be to another router in the network. Inter-router discovery and routing protocols can only be used over inter-router connections. route-container role can be used for router-container connections, for example, a router-broker connection. In the edge role, the connection is assumed to be between an edge router and an interior router.", + "create": true + }, + "cost": { + "type": "integer", + "default": 1, + "required": false, + "create": true, + "description": + "For the 'inter-router' role only. This value assigns a cost metric to the inter-router connection. The default (and minimum) value is one. Higher values represent higher costs. The cost is used to influence the routing algorithm as it attempts to use the path with the lowest total cost from ingress to egress." + }, + "sslProfile": { + "type": "string", + "required": false, + "description": "Name of the sslProfile.", + "create": true + }, + "saslMechanisms": { + "type": "string", + "required": false, + "description": "Space separated list of accepted SASL authentication mechanisms.", + "create": true + }, + "authenticatePeer": { + "type": "boolean", + "default": false, + "description": + "yes: Require the peer's identity to be authenticated; no: Do not require any peer authentication.", + "create": true + }, + "requireEncryption": { + "type": "boolean", + "default": false, + "description": + "yes: Require the connection to the peer to be encrypted; no: Permit non-encrypted communication with the peer", + "create": true + }, + "requireSsl": { + "type": "boolean", + "default": false, + "description": + "yes: Require the use of SSL or TLS on the connection; no: Allow clients to connect without SSL or TLS.", + "create": true + }, + "maxFrameSize": { + "type": "integer", + "default": 16384, + "description": + "The maximum frame size in octets that will be used in the connection-open negotiation with a connected peer. The frame size is the largest contiguous set of uninterrupted data that can be sent for a message delivery over the connection. Interleaving of messages on different links is done at frame granularity. Policy settings, if specified, will overwrite this value. Defaults to 16384.", + "create": true + }, + "maxSessions": { + "type": "integer", + "default": 32768, + "description": + "The maximum number of sessions that can be simultaneously active on the connection. Setting this value to zero selects the default number of sessions. Policy settings, if specified, will overwrite this value. Defaults to 32768.", + "create": true + }, + "maxSessionFrames": { + "type": "integer", + "description": + "Session incoming window measured in transfer frames for sessions created on this connection. This is the number of transfer frames that may simultaneously be in flight for all links in the session. Setting this value to zero selects the default session window size. Policy settings, if specified, will overwrite this value. The numerical product of maxFrameSize and maxSessionFrames may not exceed 2^31-1. If (maxFrameSize x maxSessionFrames) exceeds 2^31-1 then maxSessionFrames is reduced to (2^31-1 / maxFrameSize). maxSessionFrames has a minimum value of 1. Defaults to 0 (unlimited window).", + "required": false, + "create": true + }, + "idleTimeoutSeconds": { + "type": "integer", + "default": 16, + "description": + "The idle timeout, in seconds, for connections through this listener. If no frames are received on the connection for this time interval, the connection shall be closed.", + "required": false, + "create": true + }, + "initialHandshakeTimeoutSeconds": { + "type": "integer", + "default": 0, + "description": + "The timeout, in seconds, for the initial handshake for connections coming in through listeners. If the time interval expires before the peer sends the AMQP OPEN frame, the connection shall be closed. A value of zero (the default) disables this timeout.", + "required": false, + "create": true + }, + "stripAnnotations": { + "type": [ + "in", + "out", + "both", + "no" + ], + "default": "both", + "description": + "['in', 'out', 'both', 'no'] in: Strip the dispatch router specific annotations only on ingress; out: Strip the dispatch router specific annotations only on egress; both: Strip the dispatch router specific annotations on both ingress and egress; no - do not strip dispatch router specific annotations", + "create": true + }, + "linkCapacity": { + "type": "integer", + "create": true, + "required": false, + "description": + "The capacity of links within this connection, in terms of message deliveries. The capacity is the number of messages that can be in-flight concurrently for each link." + }, + "failoverUrls": { + "type": "string", + "create": true, + "required": false, + "description": + "A comma-separated list of failover urls to be supplied to connected clients. Form: [(amqp|amqps|ws|wss)://]host_or_ip[:port]" + }, + "healthz": { + "type": "boolean", + "default": true, + "description": + "Provide a simple HTTP based liveness test (using path /healthz). Assumes listener is enabled for http.", + "create": true + }, + "metrics": { + "type": "boolean", + "default": true, + "description": + "Export metrics in prometheus text format for the router (using path /metrics). Assumes listener is enabled for http.", + "create": true + }, + "websockets": { + "type": "boolean", + "default": true, + "description": + "For an http enabled listener, determines whether websockets access is enabled (true by default).", + "create": true + }, + "http": { + "type": "boolean", + "default": false, + "description": + "Accept HTTP connections that can upgrade to AMQP over WebSocket. Plain AMQP connections are not accepted on this listener.", + "create": true + }, + "httpRootDir": { + "type": "path", + "description": + "Absolute path to a directory from which to serve static HTML files (typically /usr/share/skupper-router/html).", + "create": true + }, + "messageLoggingComponents": { + "type": "string", + "default": "none", + "description": + "A comma separated list that indicates which components of the message should be logged. Defaults to 'none' (log nothing). If you want all properties and application properties of the message logged use 'all'. Specific components of the message can be logged by indicating the components via a comma separated list. The components are message-id, user-id, to, subject, reply-to, correlation-id, content-type, content-encoding, absolute-expiry-time, creation-time, group-id, group-sequence, reply-to-group-id, app-properties. The application-data part of the bare message will not be logged. No spaces are allowed", + "create": true + }, + "policyVhost": { + "type": "string", + "required": false, + "description": + "A listener may optionally define a virtual host to index to a specific policy to restrict the remote container to access only specific resources. This attribute defines the name of the policy vhost for this listener. If multi-tenancy is enabled for the listener, this vhost will override the peer-supplied vhost for the purposes of identifying the desired policy settings for the connections.", + "create": true + }, + "openProperties": { + "description": + "A JSON map containing connection properties. These will be sent to the peer on connection open. All map keys are restricted to strings containing only valid ASCII characters, Keys must not start with prefixes 'qd.' or 'x-opt-qd.'. The following key values are also reserved: 'product', 'version', 'failover-server-list', 'network-host', 'port', 'scheme' 'hostname'", + "type": "properties", + "required": false, + "create": true + } + } + }, "connector": { "description": "Establishes an outgoing connection from the router.", "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], + "operations": [ + "CREATE", + "DELETE" + ], "attributes": { "host": { - "description":"IP address: ipv4 or ipv6 literal or a host name", + "description": "IP address: ipv4 or ipv6 literal or a host name", "type": "string", "default": "127.0.0.1", "create": true @@ -839,9 +947,13 @@ }, "socketAddressFamily": { - "type": ["IPv4", "IPv6"], + "type": [ + "IPv4", + "IPv6" + ], "required": false, - "description": "['IPv4', 'IPv6'] IPv4: Internet Protocol version 4; IPv6: Internet Protocol version 6. If not specified, the protocol family will be automatically determined from the address.", + "description": + "['IPv4', 'IPv6'] IPv4: Internet Protocol version 4; IPv6: Internet Protocol version 6. If not specified, the protocol family will be automatically determined from the address.", "create": true }, @@ -853,7 +965,8 @@ "edge" ], "default": "normal", - "description": "The role of an established connection. In the normal role, the connection is assumed to be used for AMQP clients that are doing normal message delivery over the connection. In the inter-router role, the connection is assumed to be to another router in the network. Inter-router discovery and routing protocols can only be used over inter-router connections. route-container role can be used for router-container connections, for example, a router-broker connection. In the edge role, the connection is assumed to be between and edge router and an interior router.", + "description": + "The role of an established connection. In the normal role, the connection is assumed to be used for AMQP clients that are doing normal message delivery over the connection. In the inter-router role, the connection is assumed to be to another router in the network. Inter-router discovery and routing protocols can only be used over inter-router connections. route-container role can be used for router-container connections, for example, a router-broker connection. In the edge role, the connection is assumed to be between and edge router and an interior router.", "create": true }, "cost": { @@ -861,7 +974,8 @@ "default": 1, "required": false, "create": true, - "description": "For the 'inter-router' role only. This value assigns a cost metric to the inter-router connection. The default (and minimum) value is one. Higher values represent higher costs. The cost is used to influence the routing algorithm as it attempts to use the path with the lowest total cost from ingress to egress." + "description": + "For the 'inter-router' role only. This value assigns a cost metric to the inter-router connection. The default (and minimum) value is one. Higher values represent higher costs. The cost is used to influence the routing algorithm as it attempts to use the path with the lowest total cost from ingress to egress." }, "sslProfile": { "type": "string", @@ -884,43 +998,55 @@ "maxFrameSize": { "type": "integer", "default": 16384, - "description": "The maximum frame size in octets that will be used in the connection-open negotiation with a connected peer. The frame size is the largest contiguous set of uninterrupted data that can be sent for a message delivery over the connection. Interleaving of messages on different links is done at frame granularity. Policy settings will not overwrite this value. Defaults to 16384.", + "description": + "The maximum frame size in octets that will be used in the connection-open negotiation with a connected peer. The frame size is the largest contiguous set of uninterrupted data that can be sent for a message delivery over the connection. Interleaving of messages on different links is done at frame granularity. Policy settings will not overwrite this value. Defaults to 16384.", "create": true }, "maxSessions": { "type": "integer", "default": 32768, - "description": "The maximum number of sessions that can be simultaneously active on the connection. Setting this value to zero selects the default number of sessions. Policy settings will not overwrite this value. Defaults to 32768.", + "description": + "The maximum number of sessions that can be simultaneously active on the connection. Setting this value to zero selects the default number of sessions. Policy settings will not overwrite this value. Defaults to 32768.", "create": true }, "maxSessionFrames": { "type": "integer", - "description": "Session incoming window measured in transfer frames for sessions created on this connection. This is the number of transfer frames that may simultaneously be in flight for all links in the session. Setting this value to zero selects the default session window size. Policy settings will not overwrite this value. The numerical product of maxFrameSize and maxSessionFrames may not exceed 2^31-1. If (maxFrameSize x maxSessionFrames) exceeds 2^31-1 then maxSessionFrames is reduced to (2^31-1 / maxFrameSize). maxSessionFrames has a minimum value of 1. Defaults to 0 (unlimited window).", + "description": + "Session incoming window measured in transfer frames for sessions created on this connection. This is the number of transfer frames that may simultaneously be in flight for all links in the session. Setting this value to zero selects the default session window size. Policy settings will not overwrite this value. The numerical product of maxFrameSize and maxSessionFrames may not exceed 2^31-1. If (maxFrameSize x maxSessionFrames) exceeds 2^31-1 then maxSessionFrames is reduced to (2^31-1 / maxFrameSize). maxSessionFrames has a minimum value of 1. Defaults to 0 (unlimited window).", "required": false, "create": true }, "idleTimeoutSeconds": { "type": "integer", "default": 16, - "description": "The idle timeout, in seconds, for connections through this connector. If no frames are received on the connection for this time interval, the connection shall be closed.", + "description": + "The idle timeout, in seconds, for connections through this connector. If no frames are received on the connection for this time interval, the connection shall be closed.", "create": true }, "stripAnnotations": { - "type": ["in", "out", "both", "no"], + "type": [ + "in", + "out", + "both", + "no" + ], "default": "both", - "description": "['in', 'out', 'both', 'no'] in: Strip the dispatch router specific annotations only on ingress; out: Strip the dispatch router specific annotations only on egress; both: Strip the dispatch router specific annotations on both ingress and egress; no - do not strip dispatch router specific annotations", + "description": + "['in', 'out', 'both', 'no'] in: Strip the dispatch router specific annotations only on ingress; out: Strip the dispatch router specific annotations only on egress; both: Strip the dispatch router specific annotations on both ingress and egress; no - do not strip dispatch router specific annotations", "create": true }, "linkCapacity": { "type": "integer", "create": true, "required": false, - "description": "The capacity of links within this connection, in terms of message deliveries. The capacity is the number of messages that can be in-flight concurrently for each link." + "description": + "The capacity of links within this connection, in terms of message deliveries. The capacity is the number of messages that can be in-flight concurrently for each link." }, "verifyHostname": { "type": "boolean", "default": true, - "description": "yes: Ensures that when initiating a connection (as a client) the host name in the URL to which this connector connects to matches the host name in the digital certificate that the peer sends back as part of the SSL connection; no: Does not perform host name verification", + "description": + "yes: Ensures that when initiating a connection (as a client) the host name in the URL to which this connector connects to matches the host name in the digital certificate that the peer sends back as part of the SSL connection; no: Does not perform host name verification", "create": true }, "saslUsername": { @@ -932,14 +1058,16 @@ "saslPassword": { "type": "string", "required": false, - "description": "The password that the connector is using to connect to a peer. You can specify the password by specifying an environment variable that stores the password, a file that stores the password, or by entering the password in clear text. To use an environment variable, specify 'saslPassword: env:'. Use this option with caution, because the environment of other processes is visible on certain platforms (for example, ps on certain Unix OSs). To use a file, specify 'saslPassword: file:'. This option is the most secure, because permissions can be set on the file that contains the password. To specify the password in clear text, specify 'saslPassword: pass:' or 'saslPassword: '. This option is insecure, so it should only be used if security is not a concern.", + "description": + "The password that the connector is using to connect to a peer. You can specify the password by specifying an environment variable that stores the password, a file that stores the password, or by entering the password in clear text. To use an environment variable, specify 'saslPassword: env:'. Use this option with caution, because the environment of other processes is visible on certain platforms (for example, ps on certain Unix OSs). To use a file, specify 'saslPassword: file:'. This option is the most secure, because permissions can be set on the file that contains the password. To specify the password in clear text, specify 'saslPassword: pass:' or 'saslPassword: '. This option is insecure, so it should only be used if security is not a concern.", "create": true, "hidden": true }, "messageLoggingComponents": { "type": "string", "default": "none", - "description": "A comma separated list that indicates which components of the message should be logged (no spaces allowed between list components). Defaults to 'none' (log nothing). If you want all properties and application properties of the message logged use 'all'. Specific components of the message can be logged by indicating the components via a comma separated list. The components are message-id, user-id, to, subject, reply-to, correlation-id, content-type, content-encoding, absolute-expiry-time, creation-time, group-id, group-sequence, reply-to-group-id, app-properties. The application-data part of the bare message will not be logged. This log message is written to the MESSAGE logging module. In the 'log' entity, set 'module' property to MESSAGE or DEFAULT and 'enable' to trace+ to see this log message", + "description": + "A comma separated list that indicates which components of the message should be logged (no spaces allowed between list components). Defaults to 'none' (log nothing). If you want all properties and application properties of the message logged use 'all'. Specific components of the message can be logged by indicating the components via a comma separated list. The components are message-id, user-id, to, subject, reply-to, correlation-id, content-type, content-encoding, absolute-expiry-time, creation-time, group-id, group-sequence, reply-to-group-id, app-properties. The application-data part of the bare message will not be logged. This log message is written to the MESSAGE logging module. In the 'log' entity, set 'module' property to MESSAGE or DEFAULT and 'enable' to trace+ to see this log message", "create": true }, "failoverUrls": { @@ -961,11 +1089,13 @@ "policyVhost": { "type": "string", "required": false, - "description": "A connector may optionally define a policy to restrict the remote container to access only specific resources. This attribute defines the name of the policy vhost for this connector. Within the vhost the connector will use the vhost policy settings from user group '$connector'. If the vhost policy is absent or if the user group '$connector' within that policy is absent then the connector will fail to start. In policy specified via connector attribute 'policyVhost' the following vhostUserGroupSettings attributes are unused: 'users', 'remoteHosts', 'maxFrameSize', 'maxSessionWindow', 'maxSessions'.", + "description": + "A connector may optionally define a policy to restrict the remote container to access only specific resources. This attribute defines the name of the policy vhost for this connector. Within the vhost the connector will use the vhost policy settings from user group '$connector'. If the vhost policy is absent or if the user group '$connector' within that policy is absent then the connector will fail to start. In policy specified via connector attribute 'policyVhost' the following vhostUserGroupSettings attributes are unused: 'users', 'remoteHosts', 'maxFrameSize', 'maxSessionWindow', 'maxSessions'.", "create": true }, "openProperties": { - "description": "A JSON map containing connection properties. These will be sent to the peer on connection open. All map keys are restricted to strings containing only valid ASCII characters, Keys must not start with prefixes 'qd.' or 'x-opt-qd.'. The following key values are also reserved: 'product', 'version', 'failover-server-list', 'network-host', 'port', 'scheme' 'hostname'", + "description": + "A JSON map containing connection properties. These will be sent to the peer on connection open. All map keys are restricted to strings containing only valid ASCII characters, Keys must not start with prefixes 'qd.' or 'x-opt-qd.'. The following key values are also reserved: 'product', 'version', 'failover-server-list', 'network-host', 'port', 'scheme' 'hostname'", "type": "properties", "required": false, "create": true @@ -983,21 +1113,26 @@ "httpListener": { "description": "Ingress HTTP bridge.", "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], + "operations": [ + "CREATE", + "DELETE" + ], "attributes": { "host": { - "description":"A host name, IPV4 or IPV6 literal, or the empty string. The empty string listens on all local addresses. A host name listens on all addresses associated with the name. An IPV6 literal address (or wildcard '[::]') listens only for IPV6. An IPV4 literal address (or wildcard '0.0.0.0') listens only for IPV4.", + "description": + "A host name, IPV4 or IPV6 literal, or the empty string. The empty string listens on all local addresses. A host name listens on all addresses associated with the name. An IPV6 literal address (or wildcard '[::]') listens only for IPV6. An IPV4 literal address (or wildcard '0.0.0.0') listens only for IPV4.", "type": "string", "default": "0.0.0.0", "create": true }, "address": { - "description":"Address of this http bridge", + "description": "Address of this http bridge", "type": "string", "create": true }, "port": { - "description": "Port number or symbolic service name. If '0', the router shall assign an ephemeral port to the listener and log the port number with a log of the form 'SERVER (notice) Listening on : ()'", + "description": + "Port number or symbolic service name. If '0', the router shall assign an ephemeral port to the listener and log the port number with a log of the form 'SERVER (notice) Listening on : ()'", "type": "string", "create": true }, @@ -1023,7 +1158,8 @@ "authenticatePeer": { "type": "boolean", "default": false, - "description": "yes: Require the peer's identity to be authenticated; no: Do not require any authentication.", + "description": + "yes: Require the peer's identity to be authenticated; no: Do not require any authentication.", "create": true }, "protocolVersion": { @@ -1048,12 +1184,17 @@ "eventChannel": { "type": "boolean", "required": false, - "description": "Enables restricted event mode where no responses are sent to request and only post is allowed", + "description": + "Enables restricted event mode where no responses are sent to request and only post is allowed", "create": true }, "operStatus": { - "type": ["up", "down"], - "description": "The operational status of the HTTP socket listener: up - the service is active and incoming connections are permitted; down - the service is not active and incoming connection attempts will be refused.", + "type": [ + "up", + "down" + ], + "description": + "The operational status of the HTTP socket listener: up - the service is active and incoming connections are permitted; down - the service is not active and incoming connection attempts will be refused.", "create": false } } @@ -1062,15 +1203,18 @@ "httpConnector": { "description": "Egress HTTP bridge.", "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], + "operations": [ + "CREATE", + "DELETE" + ], "attributes": { "address": { - "description":"Address of this bridge", + "description": "Address of this bridge", "type": "string", "create": true }, "host": { - "description":"IP address: ipv4 or ipv6 literal or a host name", + "description": "IP address: ipv4 or ipv6 literal or a host name", "type": "string", "default": "127.0.0.1", "create": true @@ -1115,13 +1259,15 @@ "eventChannel": { "type": "boolean", "required": false, - "description": "Enables restricted event mode where no responses are sent to request and only post is allowed", + "description": + "Enables restricted event mode where no responses are sent to request and only post is allowed", "create": true }, "verifyHostname": { "type": "boolean", "default": true, - "description": "yes: Ensures that when initiating a connection (as a client) the host name in the URL to which this connector connects to matches the host name in the digital certificate that the peer sends back as part of the TLS connection; no: Does not perform host name verification", + "description": + "yes: Ensures that when initiating a connection (as a client) the host name in the URL to which this connector connects to matches the host name in the digital certificate that the peer sends back as part of the TLS connection; no: Does not perform host name verification", "deprecationName": "verifyHostName", "create": true }, @@ -1143,16 +1289,21 @@ "type": "string" }, "host": { - "description": "IP address and port number of peer (i.e. the client for direction=in and the server for direction=out) in the form addr:port.", + "description": + "IP address and port number of peer (i.e. the client for direction=in and the server for direction=out) in the form addr:port.", "type": "string" }, "site": { - "description": "The site identifier of the router in which the request originated (for direction=out) or was handled (for direction=in).", + "description": + "The site identifier of the router in which the request originated (for direction=out) or was handled (for direction=in).", "type": "string" }, "direction": { "description": "Direction of connection establishment in or out of the router.", - "type": ["in", "out"] + "type": [ + "in", + "out" + ] }, "requests": { "type": "integer", @@ -1181,19 +1332,22 @@ } }, - "tcpListener": { "description": "Ingress TCP bridge.", "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], + "operations": [ + "CREATE", + "DELETE" + ], "attributes": { "address": { - "description":"Address of this bridge", + "description": "Address of this bridge", "type": "string", "create": true }, "host": { - "description":"A host name, IPV4 or IPV6 literal, or the empty string. The empty string listens on all local addresses. A host name listens on all addresses associated with the name. An IPV6 literal address (or wildcard '[::]') listens only for IPV6. An IPV4 literal address (or wildcard '0.0.0.0') listens only for IPV4.", + "description": + "A host name, IPV4 or IPV6 literal, or the empty string. The empty string listens on all local addresses. A host name listens on all addresses associated with the name. An IPV6 literal address (or wildcard '[::]') listens only for IPV6. An IPV4 literal address (or wildcard '0.0.0.0') listens only for IPV4.", "type": "string", "default": "0.0.0.0", "create": true @@ -1206,7 +1360,8 @@ "required": false }, "port": { - "description": "Port number or symbolic service name. If '0', the router shall assign an ephemeral port to the listener and log the port number with a log of the form 'SERVER (notice) Listening on : ()'", + "description": + "Port number or symbolic service name. If '0', the router shall assign an ephemeral port to the listener and log the port number with a log of the form 'SERVER (notice) Listening on : ()'", "type": "string", "create": true }, @@ -1229,12 +1384,14 @@ "bytesIn": { "type": "integer", "graph": true, - "description": "The number of bytes sent from clients to servers on all connections to this listener." + "description": + "The number of bytes sent from clients to servers on all connections to this listener." }, "bytesOut": { "type": "integer", "graph": true, - "description": "The number of bytes sent from servers to clients on all connections to this listener." + "description": + "The number of bytes sent from servers to clients on all connections to this listener." }, "sslProfile": { "type": "string", @@ -1249,8 +1406,12 @@ "create": true }, "operStatus": { - "type": ["up", "down"], - "description": "The operational status of TCP socket listener: up - the service is active and incoming connections are permitted; down - the service is not active and incoming connection attempts will be refused.", + "type": [ + "up", + "down" + ], + "description": + "The operational status of TCP socket listener: up - the service is active and incoming connections are permitted; down - the service is not active and incoming connection attempts will be refused.", "create": false } } @@ -1259,15 +1420,18 @@ "tcpConnector": { "description": "Egress TCP bridge.", "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], + "operations": [ + "CREATE", + "DELETE" + ], "attributes": { "address": { - "description":"Address of this bridge", + "description": "Address of this bridge", "type": "string", "create": true }, "host": { - "description":"IP address: ipv4 or ipv6 literal or a host name", + "description": "IP address: ipv4 or ipv6 literal or a host name", "type": "string", "create": true }, @@ -1295,12 +1459,14 @@ "bytesIn": { "type": "integer", "graph": true, - "description": "The number of bytes sent from servers to clients on all connections created by this connector." + "description": + "The number of bytes sent from servers to clients on all connections created by this connector." }, "bytesOut": { "type": "integer", "graph": true, - "description": "The number of bytes sent from clients to servers on all connections created by this connector." + "description": + "The number of bytes sent from clients to servers on all connections created by this connector." }, "sslProfile": { "type": "string", @@ -1318,12 +1484,15 @@ }, "log": { - "description": "Configure logging for a particular module. You can use the `UPDATE` operation to change log settings while the router is running.", + "description": + "Configure logging for a particular module. You can use the `UPDATE` operation to change log settings while the router is running.", "extends": "configurationEntity", - "operations": ["UPDATE"], + "operations": [ + "UPDATE" + ], "attributes": { "module": { - "type":[ + "type": [ "ROUTER", "ROUTER_CORE", "ROUTER_HELLO", @@ -1345,11 +1514,13 @@ "DEFAULT" ], "required": true, - "description": "Module to configure. The special module 'DEFAULT' specifies defaults for all modules." + "description": + "Module to configure. The special module 'DEFAULT' specifies defaults for all modules." }, "enable": { "type": "string", - "description": "Levels are: trace, debug, info, notice, warning, error, critical. The enable string is a comma-separated list of levels. A level may have a trailing '\\+' to enable that level and above. For example 'trace,debug,warning+' means enable trace, debug, warning, error and critical. The value 'none' means disable logging for the module.", + "description": + "Levels are: trace, debug, info, notice, warning, error, critical. The enable string is a comma-separated list of levels. A level may have a trailing '\\+' to enable that level and above. For example 'trace,debug,warning+' means enable trace, debug, warning, error and critical. The value 'none' means disable logging for the module.", "update": true }, "includeTimestamp": { @@ -1378,32 +1549,32 @@ "description": "How many trace-level events have happened on this log.", "graph": true, "type": "integer" - } , + }, "debugCount": { "description": "How many debug-level events have happened on this log.", "graph": true, "type": "integer" - } , + }, "infoCount": { "description": "How many info-level events have happened on this log.", "graph": true, "type": "integer" - } , + }, "noticeCount": { "description": "How many notice-level events have happened on this log.", "graph": true, "type": "integer" - } , + }, "warningCount": { "description": "How many warning-level events have happened on this log.", "graph": true, "type": "integer" - } , + }, "errorCount": { "description": "How many error-level events have happened on this log.", "graph": true, "type": "integer" - } , + }, "criticalCount": { "description": "How many critical-level events have happened on this log.", "graph": true, @@ -1413,24 +1584,35 @@ }, "router.config.address": { - "description": "Entity type for address configuration. This is used to configure the treatment of message-routed deliveries within a particular address-space. The configuration controls distribution and address phasing.", + "description": + "Entity type for address configuration. This is used to configure the treatment of message-routed deliveries within a particular address-space. The configuration controls distribution and address phasing.", "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], + "operations": [ + "CREATE", + "DELETE" + ], "attributes": { "prefix": { "type": "string", - "description": "The address prefix for the configured settings. Cannot be used with a pattern attribute.", + "description": + "The address prefix for the configured settings. Cannot be used with a pattern attribute.", "create": true, "required": false }, "pattern": { "type": "string", - "description": "A wildcarded pattern for address matching. Incoming addresses are matched against this pattern. Matching addresses use the configured settings. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. Cannot be used with a prefix attribute.", + "description": + "A wildcarded pattern for address matching. Incoming addresses are matched against this pattern. Matching addresses use the configured settings. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. Cannot be used with a prefix attribute.", "create": true, "required": false }, "distribution": { - "type": ["multicast", "closest", "balanced", "unavailable"], + "type": [ + "multicast", + "closest", + "balanced", + "unavailable" + ], "description": "Treatment of traffic associated with the address", "create": true, "required": false, @@ -1438,7 +1620,8 @@ }, "priority": { "type": "integer", - "description": "All messages sent to this address which lack an intrinsic priority will be assigned this priority.", + "description": + "All messages sent to this address which lack an intrinsic priority will be assigned this priority.", "create": true, "required": false } @@ -1446,90 +1629,135 @@ }, "router.config.autoLink": { - "description": "Entity type for configuring auto-links. Auto-links are links whose lifecycle is managed by the router.", + "description": + "Entity type for configuring auto-links. Auto-links are links whose lifecycle is managed by the router.", "extends": "configurationEntity", - "operations": ["CREATE", "DELETE"], - "attributes": { - "address": { - "type": "string", - "description": "The address of the provisioned object", - "create": true, - "required": true - }, - "direction": { - "type": ["in", "out"], - "description": "The direction of the link to be created. In means into the router, out means out of the router.", - "create": true, - "required": true - }, - "containerId": { - "type": "string", - "description": "ContainerID for the target container. Only one of containerId or connection should be specified for an autoLink. Specifying both will result in the autoLink not being created", - "create": true, - "required": false - }, - "connection": { - "type": "string", - "description": "The name from a connector or listener. Only one of containerId or connection should be specified for an autoLink. Specifying both will result in the autoLink not being created", - "create": true, - "required": false - }, - "externalAddress": { - "type": "string", - "description": "If present, an alternate address of the node on the remote container. This is used if the node has a different address than the address used internally by the router to route deliveries.", - "create": true, - "required": false - }, - "linkRef": { - "type": "string", - "description": "Reference to the io.skupper.router.router.link if the link exists", - "create": false - }, - "operStatus": { - "type": ["inactive", "attaching", "failed", "active", "quiescing", "idle"], - "description": "The operational status of this autoLink: inactive - The remote container is not connected; attaching - the link is attaching to the remote node; failed - the link attach failed; active - the link is attached and operational; quiescing - the link is transitioning to idle state; idle - the link is attached but there are no deliveries flowing and no unsettled deliveries.", - "create": false - }, - "lastError": { - "type": "string", - "description": "The error description from the last attach failure", - "create": false + "operations": [ + "CREATE", + "DELETE" + ], + "attributes": + { + "address": { + "type": "string", + "description": "The address of the provisioned object", + "create": true, + "required": true + }, + "direction": { + "type": [ + "in", + "out" + ], + "description": + "The direction of the link to be created. In means into the router, out means out of the router.", + "create": true, + "required": true + }, + "containerId": + { + "type": "string", + "description": + "ContainerID for the target container. Only one of containerId or connection should be specified for an autoLink. Specifying both will result in the autoLink not being created", + "create": true, + "required": false + }, + "connection": + { + "type": "string", + "description": + "The name from a connector or listener. Only one of containerId or connection should be specified for an autoLink. Specifying both will result in the autoLink not being created", + "create": true, + "required": false + }, + "externalAddress": + { + "type": "string", + "description": + "If present, an alternate address of the node on the remote container. This is used if the node has a different address than the address used internally by the router to route deliveries.", + "create": true, + "required": false + }, + "linkRef": + { + "type": "string", + "description": "Reference to the io.skupper.router.router.link if the link exists", + "create": false + }, + "operStatus": + { + "type": [ + "inactive", + "attaching", + "failed", + "active", + "quiescing", + "idle" + ], + "description": "The operational status of this autoLink: inactive - The remote container is not connected; attaching - the link is attaching to the remote node; failed - the link attach failed; active - the link is attached and operational; quiescing - the link is transitioning to idle state; idle - the link is attached but there are no deliveries flowing and no unsettled deliveries.", + "create": false + }, + "lastError": { + "type": "string", + "description": "The error description from the last attach failure", + "create": false + } } - } }, "router.link": { "description": "Link to another AMQP endpoint: router node, client or other AMQP process.", "extends": "operationalEntity", - "operations": ["UPDATE"], + "operations": [ + "UPDATE" + ], "attributes": { "adminStatus": { - "type": ["enabled", "disabled"], + "type": [ + "enabled", + "disabled" + ], "default": "enabled", "update": true }, "operStatus": { - "type": ["up", "down", "quiescing", "idle"] + "type": [ + "up", + "down", + "quiescing", + "idle" + ] }, "linkName": { "type": "string", "description": "Name assigned to the link in the Attach." }, "linkType": { - "type": ["endpoint", "router-control", "inter-router"], - "description": "Type of link: endpoint: a link to a normally connected endpoint; inter-router: a link to another router in the network." + "type": [ + "endpoint", + "router-control", + "inter-router" + ], + "description": + "Type of link: endpoint: a link to a normally connected endpoint; inter-router: a link to another router in the network." }, "linkDir": { - "type": ["in", "out"], - "description": "Direction of delivery flow over the link, inbound or outbound to or from the router." + "type": [ + "in", + "out" + ], + "description": + "Direction of delivery flow over the link, inbound or outbound to or from the router." }, "owningAddr": { "type": "string", - "description": "Address assigned to this link during attach: The target for inbound links or the source for outbound links." + "description": + "Address assigned to this link during attach: The target for inbound links or the source for outbound links." }, "capacity": { "type": "integer", - "description": "The capacity, in deliveries, for the link. The number of undelivered plus unsettled deliveries shall not exceed the capacity. This is enforced by link flow control." + "description": + "The capacity, in deliveries, for the link. The number of undelivered plus unsettled deliveries shall not exceed the capacity. This is enforced by link flow control." }, "peer": { "type": "string", @@ -1583,17 +1811,20 @@ "deliveriesDelayed1Sec": { "type": "integer", "graph": true, - "description": "The total number of settled deliveries that were held in the router for 1 to 10 seconds." + "description": + "The total number of settled deliveries that were held in the router for 1 to 10 seconds." }, "deliveriesDelayed10Sec": { "type": "integer", "graph": true, - "description": "The total number of settled deliveries that were held in the router for more than 10 seconds." + "description": + "The total number of settled deliveries that were held in the router for more than 10 seconds." }, "deliveriesStuck": { "type": "integer", "graph": true, - "description": "The current number of deliveries that are unsettled and have been held in the router for more than 10 seconds." + "description": + "The current number of deliveries that are unsettled and have been held in the router for more than 10 seconds." }, "creditAvailable": { "type": "integer", @@ -1607,11 +1838,13 @@ "settleRate": { "type": "integer", "graph": true, - "description": "The average rate (over five seconds) of settlement in deliveries-per-second. This is included for egress links only." + "description": + "The average rate (over five seconds) of settlement in deliveries-per-second. This is included for egress links only." }, "ingressHistogram": { "type": "list", - "description": "For outgoing links on connections with 'normal' role. This histogram shows the number of settled deliveries on the link that ingressed the network at each interior router node." + "description": + "For outgoing links on connections with 'normal' role. This histogram shows the number of settled deliveries on the link that ingressed the network at each interior router node." }, "priority": { "type": "integer", @@ -1625,8 +1858,16 @@ "extends": "operationalEntity", "attributes": { "distribution": { - "type": ["flood", "multicast", "closest", "balanced", "linkBalanced", "unavailable"], - "description": "Forwarding treatment for the address: flood - messages delivered to all subscribers along all available paths (this will cause duplicate deliveries if there are redundant paths); multicast - one copy of each message delivered to all subscribers; closest - messages delivered to only the closest subscriber; balanced - messages delivered to one subscriber with load balanced across subscribers; linkBalanced - for link-routing, link attaches balanced across destinations; unavailable - this address is unavailable, link attaches to an address of unavailable distribution will be rejected." + "type": [ + "flood", + "multicast", + "closest", + "balanced", + "linkBalanced", + "unavailable" + ], + "description": + "Forwarding treatment for the address: flood - messages delivered to all subscribers along all available paths (this will cause duplicate deliveries if there are redundant paths); multicast - one copy of each message delivered to all subscribers; closest - messages delivered to only the closest subscriber; balanced - messages delivered to one subscriber with load balanced across subscribers; linkBalanced - for link-routing, link attaches balanced across destinations; unavailable - this address is unavailable, link attaches to an address of unavailable distribution will be rejected." }, "inProcess": { "type": "integer", @@ -1649,27 +1890,32 @@ }, "deliveriesIngress": { "type": "integer", - "description": "The number of deliveries to this address that entered the router network on this router", + "description": + "The number of deliveries to this address that entered the router network on this router", "graph": true }, "deliveriesEgress": { "type": "integer", - "description": "The number of deliveries to this address that exited the router network on this router", + "description": + "The number of deliveries to this address that exited the router network on this router", "graph": true }, "deliveriesTransit": { "type": "integer", - "description": "The number of deliveries to this address that transited this router to another router", + "description": + "The number of deliveries to this address that transited this router to another router", "graph": true }, "deliveriesToContainer": { "type": "integer", - "description": "The number of deliveries to this address that were given to an in-process subscriber", + "description": + "The number of deliveries to this address that were given to an in-process subscriber", "graph": true }, "deliveriesFromContainer": { "type": "integer", - "description": "The number of deliveries to this address that were originated from an in-process entity", + "description": + "The number of deliveries to this address that were originated from an in-process entity", "graph": true }, "deliveriesIngressRouteContainer": { @@ -1692,11 +1938,13 @@ }, "transitOutstanding": { "type": "list", - "description": "List of numbers of outstanding deliveries across a transit (inter-router) connection for this address. This is for balanced distribution only." + "description": + "List of numbers of outstanding deliveries across a transit (inter-router) connection for this address. This is for balanced distribution only." }, "trackedDeliveries": { "type": "integer", - "description": "Number of transit deliveries being tracked for this address (for balanced distribution)." + "description": + "Number of transit deliveries being tracked for this address (for balanced distribution)." }, "priority": { "type": "integer", @@ -1734,7 +1982,8 @@ "type": "string" }, "validOrigins": { - "description": "List of valid origin nodes for messages arriving via the re mote node, used for duplicate elimination in redundant networks.", + "description": + "List of valid origin nodes for messages arriving via the re mote node, used for duplicate elimination in redundant networks.", "type": "list" }, "address": { @@ -1750,11 +1999,12 @@ "type": "integer" }, "lastTopoChange": { - "description": "Timestamp showing the most recent change to this node's neighborhood.", - "type": "integer" + "description": "Timestamp showing the most recent change to this node's neighborhood.", + "type": "integer" }, "index": { - "description": "Index number used in statistics histograms for this router node. This index is specific to this router.", + "description": + "Index number used in statistics histograms for this router node. This index is specific to this router.", "type": "integer" } @@ -1766,13 +2016,20 @@ "extends": "operationalEntity", "attributes": { "adminStatus": { - "type": ["enabled", "deleted"], + "type": [ + "enabled", + "deleted" + ], "default": "enabled", - "description": "This field is set to enabled when the connection is up and running. Setting this field to deleted will terminate the connection and all links and sessions contained in the connection. Inter-router connections cannot be terminated by setting the adminStatus to deleted.", + "description": + "This field is set to enabled when the connection is up and running. Setting this field to deleted will terminate the connection and all links and sessions contained in the connection. Inter-router connections cannot be terminated by setting the adminStatus to deleted.", "update": true }, "operStatus": { - "type": ["up", "closing"] + "type": [ + "up", + "closing" + ] }, "protocol": { "type": "string", @@ -1781,7 +2038,7 @@ "container": { "description": "The container for this connection", "type": "string" - } , + }, "opened": { "type": "boolean", "description": "The connection has been opened (i.e. AMQP OPEN)" @@ -1792,9 +2049,14 @@ }, "dir": { "description": "Direction of connection establishment in or out of the router.", - "type": ["in", "out"] + "type": [ + "in", + "out" + ] + }, + "role": { + "type": "string" }, - "role": {"type": "string"}, "isAuthenticated": { "description": "Indicates whether the identity of the connection's user is authentic.", "type": "boolean" @@ -1804,7 +2066,8 @@ "type": "boolean" }, "enableProtocolTrace": { - "description": "Indicates whether protocol level amqp frame trace logging is turned on or off for this connection.", + "description": + "Indicates whether protocol level amqp frame trace logging is turned on or off for this connection.", "type": "boolean", "create": false, "update": true, @@ -1846,7 +2109,8 @@ "lastDlvSeconds": { "type": "integer", "graph": true, - "description": "The number of seconds since a delivery was sent on this connection. Will display a - (dash) if no deliveries have been sent on the connection." + "description": + "The number of seconds since a delivery was sent on this connection. Will display a - (dash) if no deliveries have been sent on the connection." } } }, @@ -1865,7 +2129,10 @@ }, "direction": { "description": "Direction of connection establishment in or out of the router.", - "type": ["in", "out"] + "type": [ + "in", + "out" + ] }, "bytesIn": { "type": "integer", @@ -1885,12 +2152,14 @@ "lastInSeconds": { "type": "integer", "graph": true, - "description": "The number of seconds since a delivery was sent from client to server on this connection." + "description": + "The number of seconds since a delivery was sent from client to server on this connection." }, "lastOutSeconds": { "type": "integer", "graph": true, - "description": "The number of seconds since a delivery was sent from server to client on this connection." + "description": + "The number of seconds since a delivery was sent from server to client on this connection." } } }, @@ -1899,16 +2168,43 @@ "description": "Memory allocation pool.", "extends": "operationalEntity", "attributes": { - "typeName": {"type": "string"}, - "typeSize": {"type": "integer"}, - "transferBatchSize": {"type": "integer"}, - "localFreeListMax": {"type": "integer", "graph": true}, - "globalFreeListMax": {"type": "integer", "graph": true}, - "totalAllocFromHeap": {"type": "integer", "graph": true}, - "totalFreeToHeap": {"type": "integer", "graph": true}, - "heldByThreads": {"type": "integer", "graph": true}, - "batchesRebalancedToThreads": {"type": "integer", "graph": true}, - "batchesRebalancedToGlobal": {"type": "integer", "graph": true} + "typeName": { + "type": "string" + }, + "typeSize": { + "type": "integer" + }, + "transferBatchSize": { + "type": "integer" + }, + "localFreeListMax": { + "type": "integer", + "graph": true + }, + "globalFreeListMax": { + "type": "integer", + "graph": true + }, + "totalAllocFromHeap": { + "type": "integer", + "graph": true + }, + "totalFreeToHeap": { + "type": "integer", + "graph": true + }, + "heldByThreads": { + "type": "integer", + "graph": true + }, + "batchesRebalancedToThreads": { + "type": "integer", + "graph": true + }, + "batchesRebalancedToGlobal": { + "type": "integer", + "graph": true + } } }, @@ -1920,54 +2216,72 @@ "maxConnections": { "type": "integer", "default": 65535, - "description": "The maximum number of concurrent client connections allowed for this router. This limit is always enforced, even if no other policy settings have been defined. The limit is applied to all incoming connections regardless of remote host, authenticated user, or targeted vhost.", + "description": + "The maximum number of concurrent client connections allowed for this router. This limit is always enforced, even if no other policy settings have been defined. The limit is applied to all incoming connections regardless of remote host, authenticated user, or targeted vhost.", "required": false, "create": true }, "maxMessageSize": { "type": "integer", "default": 0, - "description": "The maximum size in bytes of AMQP message transfers allowed for this router as messages enter the router network. This limit is applied to transfers over user connections and to transfers to interior routers from edge routers. This limit is not applied to interior-to-interior router connections. This limit may be overridden by vhost or by vhost user group settings. A value of zero disables this limit. Administrators are advised not set interior router maximum message sizes so low that edge router management requests or responses are blocked. Administrators are also advised to set edge router maximum message sizes lower than the attached interior router maximum message size.", + "description": + "The maximum size in bytes of AMQP message transfers allowed for this router as messages enter the router network. This limit is applied to transfers over user connections and to transfers to interior routers from edge routers. This limit is not applied to interior-to-interior router connections. This limit may be overridden by vhost or by vhost user group settings. A value of zero disables this limit. Administrators are advised not set interior router maximum message sizes so low that edge router management requests or responses are blocked. Administrators are also advised to set edge router maximum message sizes lower than the attached interior router maximum message size.", "required": false, "create": true }, "enableVhostPolicy": { "type": "boolean", "default": false, - "description": "Enables the router to enforce the connection denials and resource limits defined in the configured vhost policies.", + "description": + "Enables the router to enforce the connection denials and resource limits defined in the configured vhost policies.", "required": false, "create": true }, "enableVhostNamePatterns": { "type": "boolean", "default": false, - "description": "Enable vhost name patterns. When false vhost hostnames are treated as literal strings. When true vhost hostnames are treated as match patterns.", + "description": + "Enable vhost name patterns. When false vhost hostnames are treated as literal strings. When true vhost hostnames are treated as match patterns.", "required": false, "create": true }, "policyDir": { "type": "path", "default": "", - "description": "The absolute path to a directory that holds vhost policy definition files in JSON format (*.json). The router processes all of the vhost policies in each JSON file that is in this directory.", + "description": + "The absolute path to a directory that holds vhost policy definition files in JSON format (*.json). The router processes all of the vhost policies in each JSON file that is in this directory.", "required": false, "create": true }, "defaultVhost": { "type": "string", "default": "$default", - "description": "The name of the default vhost policy. This policy rule set is applied to a connection for which a vhost policy has not otherwise been configured. Processing for the default vhost is enabled by default and set to select vhost '$default'. To disable default vhost processing set defaultVhost to blank or do not define a vhost named '$default'.", + "description": + "The name of the default vhost policy. This policy rule set is applied to a connection for which a vhost policy has not otherwise been configured. Processing for the default vhost is enabled by default and set to select vhost '$default'. To disable default vhost processing set defaultVhost to blank or do not define a vhost named '$default'.", "required": false, "create": true }, - "connectionsProcessed": {"type": "integer", "graph": true}, - "connectionsDenied": {"type": "integer", "graph": true}, - "connectionsCurrent": {"type": "integer", "graph": true}, + "connectionsProcessed": { + "type": "integer", + "graph": true + }, + "connectionsDenied": { + "type": "integer", + "graph": true + }, + "connectionsCurrent": { + "type": "integer", + "graph": true + }, "linksDenied": { "type": "integer", "graph": true, "description": "The sum of all vhost sender and receiver denials." }, - "maxMessageSizeDenied": {"type": "integer", "graph": true}, + "maxMessageSizeDenied": { + "type": "integer", + "graph": true + }, "totalDenials": { "type": "integer", "graph": true, @@ -1977,19 +2291,26 @@ }, "vhost": { - "description": "AMQP virtual host policy definition of users, user groups, allowed remote hosts, and AMQP restrictions.", + "description": + "AMQP virtual host policy definition of users, user groups, allowed remote hosts, and AMQP restrictions.", "extends": "configurationEntity", - "operations": ["CREATE", "UPDATE", "DELETE"], + "operations": [ + "CREATE", + "UPDATE", + "DELETE" + ], "attributes": { "hostname": { "type": "string", - "description": "The hostname of the vhost. This vhost policy will be applied to any client connection that is directed to this hostname.", + "description": + "The hostname of the vhost. This vhost policy will be applied to any client connection that is directed to this hostname.", "required": true, "create": true }, "aliases": { "type": "string", - "description": "Alternate hostnames that share this vhost configuration. Hosts named in this attribute are treated as if this vhost was defined with the alias name in the vhost 'hostname' attribute. This attribute is implemented to help with multitenant configurations where multiple vhosts share a common configuration. The string is a comma- or space-separated list of literal hostnames or hostname patterns. A vhost aliases hostname must be unique across all vhost hostnames and all of their aliases.", + "description": + "Alternate hostnames that share this vhost configuration. Hosts named in this attribute are treated as if this vhost was defined with the alias name in the vhost 'hostname' attribute. This attribute is implemented to help with multitenant configurations where multiple vhosts share a common configuration. The string is a comma- or space-separated list of literal hostnames or hostname patterns. A vhost aliases hostname must be unique across all vhost hostnames and all of their aliases.", "required": false, "create": true, "update": true @@ -2004,7 +2325,8 @@ }, "maxMessageSize": { "type": "integer", - "description": "Optional maximum size in bytes of AMQP message transfers allowed for connections to this vhost. This limit overrides the policy maxMessageSize value and may be overridden by vhost user group settings. A value of zero disables this limit.", + "description": + "Optional maximum size in bytes of AMQP message transfers allowed for connections to this vhost. This limit overrides the policy maxMessageSize value and may be overridden by vhost user group settings. A value of zero disables this limit.", "required": false }, "maxConnectionsPerUser": { @@ -2018,14 +2340,16 @@ "maxConnectionsPerHost": { "type": "integer", "default": 65535, - "description": "The maximum number of concurrent client connections allowed for any remote host (the host from which the client is connecting).", + "description": + "The maximum number of concurrent client connections allowed for any remote host (the host from which the client is connecting).", "required": false, "create": true, "update": true }, "allowUnknownUser": { "type": "boolean", - "description": "Whether unknown users (users who are not members of a defined user group) are allowed to connect to the vhost. Unknown users are assigned to the '$default' user group and receive '$default' settings.", + "description": + "Whether unknown users (users who are not members of a defined user group) are allowed to connect to the vhost. Unknown users are assigned to the '$default' user group and receive '$default' settings.", "default": false, "required": false, "create": true, @@ -2033,7 +2357,8 @@ }, "groups": { "type": "map", - "description": "A map where the key is a vhost user group name and the value is a vhostUserGroupSettings object that holds the settings for that vhost user group.", + "description": + "A map where the key is a vhost user group name and the value is a vhostUserGroupSettings object that holds the settings for that vhost user group.", "required": false, "create": true, "update": true @@ -2042,159 +2367,241 @@ }, "vhostUserGroupSettings": { - "description": "Policy settings for users connecting to a vhost. Configuration files including this section must use .json format.", + "description": + "Policy settings for users connecting to a vhost. Configuration files including this section must use .json format.", "extends": "configurationEntity", + "attributes": + { + "users": { + "type": "string", + "description": + "A list of authenticated users for this user group. Use commas to separate multiple users. A user may belong to only one vhost user group.", + "required": true + }, + "remoteHosts": + { + "type": "string", + "description": + "A list of remote hosts from which the users may connect. A host can be a hostname, IP address, or IP address range. Use commas to separate multiple hosts. To allow access from all remote hosts, specify a wildcard '*'. To deny access from all remote hosts, leave this attribute blank.", + "required": true + }, + "maxConnectionsPerUser": + { + "type": "integer", + "description": + "Optional maximum number of connections that may be created by users in this group. This value, if specified, overrides the vhost maxConnectionsPerUser value", + "required": false, + "create": false + }, + "maxConnectionsPerHost": + { + "type": "integer", + "description": + "Optional maximum number of concurrent connections allowed for any remote host by users in this group. This value, if specified, overrides the vhost maxConnectionsPerHost value", + "required": false, + "create": false + }, + "maxMessageSize": + { + "type": "integer", + "description": + "Optional maximum size in bytes of AMQP message transfers allowed for connections created by users in this group. This limit overrides the policy and vhost maxMessageSize values. A value of zero disables this limit.", + "required": false + }, + "maxFrameSize": + { + "type": "integer", + "description": + "The largest frame, in bytes, that may be sent on this connection. Non-zero policy values overwrite values specified for a listener object (AMQP Open, max-frame-size).", + "required": false, + "create": true + }, + "maxSessionWindow": + { + "type": "integer", + "description": + "The incoming capacity for new AMQP sessions, measured in octets. Non-zero policy values overwrite values specified for a listener object (AMQP Begin, incoming-window).", + "required": false, + "create": true + }, + "maxSessions": + { + "type": "integer", + "description": + "The maximum number of sessions that may be created on this connection. Non-zero policy values overwrite values specified for a listener object (AMQP Open, channel-max).", + "required": false, + "create": true + }, + "maxSenders": + { + "type": "integer", + "description": + "The maximum number of sending links that may be created on this connection. A value of '0' disables all sender links.", + "default": 2147483647, + "required": false, + "create": true + }, + "maxReceivers": + { + "type": "integer", + "description": + "The maximum number of receiving links that may be created on this connection. A value of '0' disables all receiver links.", + "default": 2147483647, + "required": false, + "create": true + }, + "allowDynamicSource": + { + "type": "boolean", + "description": + "Whether this connection is allowed to create dynamic receiving links (links to resources that do not exist on the peer). A value of 'true' means that users are able to automatically create resources on the peer system.", + "default": false, + "required": false, + "create": true + }, + "allowAnonymousSender": + { + "type": "boolean", + "description": + "Whether this connection is allowed to create sending links if the sender does not provide a target address. By prohibiting anonymous senders, the router only needs to verify once, when the link is created, that the sender is permitted to send messages to the target address. The router does not need to verify each message that is sent on the link. A value of 'true' means that users may send messages to any address. Allowing anonymous senders can also decrease performance: if the sender does not specify a target address, then the router must parse each message to determine how to route it.", + "default": false, + "required": false, + "create": true + }, + "allowUserIdProxy": + { + "type": "boolean", + "description": + "Whether this connection is allowed to send messages with a user ID that is different than the connection's authenticated user name.", + "default": false, + "required": false, + "create": true + }, + "allowAdminStatusUpdate": + { + "type": "boolean", + "description": + "Whether this connection is allowed to update the admin status of other connections. Note: Inter-router connections cannot be deleted at any time.", + "default": true, + "required": false, + "create": true + }, + "sources": + { + "type": "string", + "description": + "A list of source addresses from which users in this group may receive messages. To specify multiple addresses, separate the addresses with either a comma or a space. If you do not specify any addresses, users in this group are not allowed to receive messages from any addresses. You can use the substitution token `${user}` to specify an address that contains a user's authenticated user name. You can use an asterisk ('*') wildcard to match one or more characters in an address. However, this wildcard is only recognized if it is the last character in the address name. You may specify attributes 'sources' or 'sourcePattern' but not both at the same time.", + "required": false, + "create": true + }, + "targets": + { + "type": "string", + "description": + "A list of target addresses to which users in this group may send messages. To specify multiple addresses, separate the addresses with either a comma or a space. If you do not specify any addresses, users in this group are not allowed to send messages to any addresses. You can use the substitution token `${user}` to specify an address that contains a user's authenticated user name. You can use an asterisk ('*') wildcard to match one or more characters in an address. However, this wildcard is only recognized if it is the last character in the address name. You may specify attributes 'targets' or 'targetPattern' but not both at the same time.", + "required": false, + "create": true + }, + "sourcePattern": + { + "type": "string", + "description": + "A wildcarded pattern for matching source addresses from which users in this group may receive messages. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. To specify multiple addresses, separate the addresses with either a comma or a space. You can use the text string `${user}` in a token to specify an address that contains a user's authenticated user name. If you do not specify any addresses, users in this group are not allowed to receive messages from any addresses. You may specify attributes 'sources' or 'sourcePattern' but not both at the same time.", + "create": true, + "required": false + }, + "targetPattern": + { + "type": "string", + "description": + "A wildcarded pattern for matching target addresses to which users in this group may send messages. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. To specify multiple addresses, separate the addresses with either a comma or a space. You can use the text string `${user}` in a token to specify an address that contains a user's authenticated user name. If you do not specify any addresses, users in this group are not allowed to send messages to any addresses. You may specify attributes 'targets' or 'targetPattern' but not both at the same time.", + "create": true, + "required": false + } + } + }, + + "vhostStats": { + "description": "Virtual host connection and access statistics.", + "extends": "operationalEntity", "attributes": { - "users": { - "type": "string", - "description": "A list of authenticated users for this user group. Use commas to separate multiple users. A user may belong to only one vhost user group.", - "required": true - }, - "remoteHosts": { + "hostname": { "type": "string", - "description": "A list of remote hosts from which the users may connect. A host can be a hostname, IP address, or IP address range. Use commas to separate multiple hosts. To allow access from all remote hosts, specify a wildcard '*'. To deny access from all remote hosts, leave this attribute blank.", - "required": true + "description": "The vhost name." }, - "maxConnectionsPerUser": { + "connectionsApproved": { "type": "integer", - "description": "Optional maximum number of connections that may be created by users in this group. This value, if specified, overrides the vhost maxConnectionsPerUser value", - "required": false, - "create": false + "graph": true }, - "maxConnectionsPerHost": { + "connectionsDenied": { "type": "integer", - "description": "Optional maximum number of concurrent connections allowed for any remote host by users in this group. This value, if specified, overrides the vhost maxConnectionsPerHost value", - "required": false, - "create": false + "graph": true }, - "maxMessageSize": { + "connectionsCurrent": { "type": "integer", - "description": "Optional maximum size in bytes of AMQP message transfers allowed for connections created by users in this group. This limit overrides the policy and vhost maxMessageSize values. A value of zero disables this limit.", - "required": false + "graph": true }, - "maxFrameSize": { - "type": "integer", - "description": "The largest frame, in bytes, that may be sent on this connection. Non-zero policy values overwrite values specified for a listener object (AMQP Open, max-frame-size).", - "required": false, - "create": true + "perUserState": { + "type": "map", + "description": + "A map where the key is the authenticated user name and the value is a list of the user's connections." }, - "maxSessionWindow": { - "type": "integer", - "description": "The incoming capacity for new AMQP sessions, measured in octets. Non-zero policy values overwrite values specified for a listener object (AMQP Begin, incoming-window).", - "required": false, - "create": true + "perHostState": { + "type": "map", + "description": + "A map where the key is the host name and the value is a list of the host's connections." }, - "maxSessions": { + + "sessionDenied": { "type": "integer", - "description": "The maximum number of sessions that may be created on this connection. Non-zero policy values overwrite values specified for a listener object (AMQP Open, channel-max).", - "required": false, - "create": true + "graph": true }, - "maxSenders": { + "senderDenied": { "type": "integer", - "description": "The maximum number of sending links that may be created on this connection. A value of '0' disables all sender links.", - "default": 2147483647, - "required": false, - "create": true + "graph": true }, - "maxReceivers": { + "receiverDenied": { "type": "integer", - "description": "The maximum number of receiving links that may be created on this connection. A value of '0' disables all receiver links.", - "default": 2147483647, - "required": false, - "create": true - }, - "allowDynamicSource": { - "type": "boolean", - "description": "Whether this connection is allowed to create dynamic receiving links (links to resources that do not exist on the peer). A value of 'true' means that users are able to automatically create resources on the peer system.", - "default": false, - "required": false, - "create": true - }, - "allowAnonymousSender": { - "type": "boolean", - "description": "Whether this connection is allowed to create sending links if the sender does not provide a target address. By prohibiting anonymous senders, the router only needs to verify once, when the link is created, that the sender is permitted to send messages to the target address. The router does not need to verify each message that is sent on the link. A value of 'true' means that users may send messages to any address. Allowing anonymous senders can also decrease performance: if the sender does not specify a target address, then the router must parse each message to determine how to route it.", - "default": false, - "required": false, - "create": true - }, - "allowUserIdProxy": { - "type": "boolean", - "description": "Whether this connection is allowed to send messages with a user ID that is different than the connection's authenticated user name.", - "default": false, - "required": false, - "create": true - }, - "allowAdminStatusUpdate": { - "type": "boolean", - "description": "Whether this connection is allowed to update the admin status of other connections. Note: Inter-router connections cannot be deleted at any time.", - "default": true, - "required": false, - "create": true - }, - "sources": { - "type": "string", - "description": "A list of source addresses from which users in this group may receive messages. To specify multiple addresses, separate the addresses with either a comma or a space. If you do not specify any addresses, users in this group are not allowed to receive messages from any addresses. You can use the substitution token `${user}` to specify an address that contains a user's authenticated user name. You can use an asterisk ('*') wildcard to match one or more characters in an address. However, this wildcard is only recognized if it is the last character in the address name. You may specify attributes 'sources' or 'sourcePattern' but not both at the same time.", - "required": false, - "create": true - }, - "targets": { - "type": "string", - "description": "A list of target addresses to which users in this group may send messages. To specify multiple addresses, separate the addresses with either a comma or a space. If you do not specify any addresses, users in this group are not allowed to send messages to any addresses. You can use the substitution token `${user}` to specify an address that contains a user's authenticated user name. You can use an asterisk ('*') wildcard to match one or more characters in an address. However, this wildcard is only recognized if it is the last character in the address name. You may specify attributes 'targets' or 'targetPattern' but not both at the same time.", - "required": false, - "create": true - }, - "sourcePattern": { - "type": "string", - "description": "A wildcarded pattern for matching source addresses from which users in this group may receive messages. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. To specify multiple addresses, separate the addresses with either a comma or a space. You can use the text string `${user}` in a token to specify an address that contains a user's authenticated user name. If you do not specify any addresses, users in this group are not allowed to receive messages from any addresses. You may specify attributes 'sources' or 'sourcePattern' but not both at the same time.", - "create": true, - "required": false + "graph": true }, - "targetPattern": { - "type": "string", - "description": "A wildcarded pattern for matching target addresses to which users in this group may send messages. The pattern consists of one or more tokens separated by a forward slash '/'. A token can be one of the following: a * character, a # character, or a sequence of characters that do not include /, *, or #. The * token matches any single token. The # token matches zero or more tokens. * has higher precedence than #, and exact match has the highest precedence. To specify multiple addresses, separate the addresses with either a comma or a space. You can use the text string `${user}` in a token to specify an address that contains a user's authenticated user name. If you do not specify any addresses, users in this group are not allowed to send messages to any addresses. You may specify attributes 'targets' or 'targetPattern' but not both at the same time.", - "create": true, - "required": false + "maxMessageSizeDenied": { + "type": "integer", + "graph": true } } }, - "vhostStats": { - "description": "Virtual host connection and access statistics.", - "extends": "operationalEntity", + "dummy": { + "description": "Dummy entity for test purposes.", + "extends": "entity", + "operations": [ + "CREATE", + "READ", + "UPDATE", + "DELETE", + "CALLME" + ], "attributes": { - "hostname": { + "arg1": { "type": "string", - "description": "The vhost name." + "create": true, + "update": true }, - "connectionsApproved": {"type": "integer", "graph": true}, - "connectionsDenied": {"type": "integer", "graph": true}, - "connectionsCurrent": {"type": "integer", "graph": true}, - "perUserState": { - "type": "map", - "description": "A map where the key is the authenticated user name and the value is a list of the user's connections." + "arg2": { + "type": "string", + "create": true, + "update": true }, - "perHostState": { - "type": "map", - "description": "A map where the key is the host name and the value is a list of the host's connections." + "num1": { + "type": "integer", + "create": true, + "update": true }, - - "sessionDenied": {"type": "integer", "graph": true}, - "senderDenied": {"type": "integer", "graph": true}, - "receiverDenied": {"type": "integer", "graph": true}, - "maxMessageSizeDenied": {"type": "integer", "graph": true} - } - }, - - "dummy": { - "description": "Dummy entity for test purposes.", - "extends": "entity", - "operations": ["CREATE", "READ", "UPDATE", "DELETE", "CALLME"], - "attributes": { - "arg1": {"type": "string", "create": true, "update": true}, - "arg2": {"type": "string", "create": true, "update": true}, - "num1": {"type": "integer", "create": true, "update": true}, - "num2": {"type": "integer", "create": true, "update": true} + "num2": { + "type": "integer", + "create": true, + "update": true + } } } } diff --git a/python/skupper_router/management/skrouter.json.readme.txt b/python/skupper_router/management/skrouter.json.readme.txt index 5c08470ab..68b97e966 100644 --- a/python/skupper_router/management/skrouter.json.readme.txt +++ b/python/skupper_router/management/skrouter.json.readme.txt @@ -86,4 +86,3 @@ The two types are often related. For example `listener` and `connector` extend `configurationEntity`, they express the intent to make or receive connections. `connection` extends `operationalEntity`, it holds information the actual connection status. - diff --git a/router/CMakeLists.txt b/router/CMakeLists.txt index fb7642a40..4199767ee 100644 --- a/router/CMakeLists.txt +++ b/router/CMakeLists.txt @@ -6,9 +6,9 @@ ## to you under the Apache License, Version 2.0 (the ## "License"); you may not use this file except in compliance ## with the License. You may obtain a copy of the License at -## +## ## http://www.apache.org/licenses/LICENSE-2.0 -## +## ## Unless required by applicable law or agreed to in writing, ## software distributed under the License is distributed on an ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/scripts/create_sasldb.sh b/scripts/create_sasldb.sh index c86ec4e53..3f51a366f 100755 --- a/scripts/create_sasldb.sh +++ b/scripts/create_sasldb.sh @@ -28,4 +28,3 @@ for user in $USER_DIR/*; do echo "cat $user | saslpasswd2 -c -p -u $DOMAIN $(basename $user) -f $SASLDB" cat $user | saslpasswd2 -c -p -u $DOMAIN $(basename $user) -f $SASLDB done - diff --git a/src/adaptors/adaptor_utils.c b/src/adaptors/adaptor_utils.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/adaptors/http1/http1_adaptor.c b/src/adaptors/http1/http1_adaptor.c index c38d46577..3de60b186 100644 --- a/src/adaptors/http1/http1_adaptor.c +++ b/src/adaptors/http1/http1_adaptor.c @@ -714,4 +714,3 @@ static void qd_http1_adaptor_final(void *adaptor_context) * Declare the adaptor so that it will self-register on process startup. */ QDR_CORE_ADAPTOR_DECLARE("http1.x-adaptor", qd_http1_adaptor_init, qd_http1_adaptor_final) - diff --git a/src/adaptors/http_common.c b/src/adaptors/http_common.c index 0b57e5cf3..173fc9ac3 100644 --- a/src/adaptors/http_common.c +++ b/src/adaptors/http_common.c @@ -754,4 +754,3 @@ char *qd_get_host_from_host_port(const char *host_port) return host; } } - diff --git a/src/adaptors/reference_adaptor.c b/src/adaptors/reference_adaptor.c index bc1b77f8a..543b614af 100644 --- a/src/adaptors/reference_adaptor.c +++ b/src/adaptors/reference_adaptor.c @@ -151,7 +151,7 @@ static void qdr_ref_detach(void *context, qdr_link_t *link, qdr_error_t *error, static void qdr_ref_flow(void *context, qdr_link_t *link, int credit) { qdr_ref_adaptor_t *adaptor = (qdr_ref_adaptor_t*) context; - + printf("qdr_ref_flow: %d credits issued\n", credit); if (link == adaptor->out_link_1) { @@ -307,7 +307,7 @@ static uint64_t qdr_ref_deliver(void *context, qdr_link_t *link, qdr_delivery_t qd_message_stream_data_release(stream_data); break; } - + case QD_MESSAGE_STREAM_DATA_INCOMPLETE: // // A new segment has not completely arrived yet. Check again later. @@ -328,7 +328,7 @@ static uint64_t qdr_ref_deliver(void *context, qdr_link_t *link, qdr_delivery_t qdr_link_flow(adaptor->core, link, 1, false); adaptor->incoming_message = 0; return PN_ACCEPTED; // This will cause the delivery to be settled - + case QD_MESSAGE_STREAM_DATA_INVALID: // // The body-data is corrupt in some way. Stop handling the delivery and reject it. diff --git a/src/adaptors/test_adaptor.c b/src/adaptors/test_adaptor.c index b05302f72..1e94ebeb6 100644 --- a/src/adaptors/test_adaptor.c +++ b/src/adaptors/test_adaptor.c @@ -119,7 +119,7 @@ static void start_watch(const char *address) dw->address = strdup(address); dw->watch_handle = qdr_core_watch_address(core_ptr, address, QD_ITER_HASH_PREFIX_MOBILE, QD_TREATMENT_ANYCAST_BALANCED, on_dynamic_watch, on_dynamic_cancel, dw); - DEQ_INSERT_TAIL(dynamic_watches, dw); + DEQ_INSERT_TAIL(dynamic_watches, dw); } diff --git a/src/bitmask.c b/src/bitmask.c index 84c1d9e90..78a1176fa 100644 --- a/src/bitmask.c +++ b/src/bitmask.c @@ -200,4 +200,3 @@ void _qdbm_next(qd_bitmask_t *b, int *v) } } } - diff --git a/src/conditionals.h.in b/src/conditionals.h.in index a7560d09c..042f3ce1f 100644 --- a/src/conditionals.h.in +++ b/src/conditionals.h.in @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -16,6 +16,3 @@ * specific language governing permissions and limitations * under the License. */ - - - diff --git a/src/connection_manager.c b/src/connection_manager.c index 5032698fe..dbfb3fd67 100644 --- a/src/connection_manager.c +++ b/src/connection_manager.c @@ -1022,4 +1022,3 @@ const char *qd_connector_name(qd_connector_t *ct) { return ct ? ct->config.name : 0; } - diff --git a/src/delivery_state.c b/src/delivery_state.c index 6504b3779..cedeefa9f 100644 --- a/src/delivery_state.c +++ b/src/delivery_state.c @@ -54,4 +54,3 @@ void qd_delivery_state_free(qd_delivery_state_t *dstate) free_qd_delivery_state_t(dstate); } } - diff --git a/src/discriminator.c b/src/discriminator.c index a5ee71586..6cf469741 100644 --- a/src/discriminator.c +++ b/src/discriminator.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -40,4 +40,3 @@ void qd_generate_discriminator(char *string) string[cursor] = '\0'; assert(strlen(string) < QD_DISCRIMINATOR_SIZE); } - diff --git a/src/dispatch.c b/src/dispatch.c index ef085ac52..87a08d861 100644 --- a/src/dispatch.c +++ b/src/dispatch.c @@ -82,7 +82,7 @@ qd_dispatch_t *qd_dispatch(const char *python_pkgdir, bool test_hooks) struct timeval time; gettimeofday(&time, NULL); srandom((unsigned int)time.tv_sec + ((unsigned int)time.tv_usec << 11)); - + qd = NEW(qd_dispatch_t); ZERO(qd); @@ -204,7 +204,7 @@ qd_error_t qd_dispatch_configure_router(qd_dispatch_t *qd, qd_entity_t *entity) case QD_ROUTER_MODE_EDGE: mode = "Edge_"; break; case QD_ROUTER_MODE_ENDPOINT: mode = "Endpoint_"; break; } - + qd->router_id = (char*) malloc(strlen(mode) + QD_DISCRIMINATOR_SIZE + 2); strcpy(qd->router_id, mode); qd_generate_discriminator(qd->router_id + strlen(qd->router_id)); diff --git a/src/entity.c b/src/entity.c index c8047fc18..235f8ccf1 100644 --- a/src/entity.c +++ b/src/entity.c @@ -272,4 +272,3 @@ qd_error_t qd_entity_set_map_key_value_string(qd_entity_t *entity, const char *a return ret; } - diff --git a/src/failoverlist.c b/src/failoverlist.c index 8ec32a919..7d49be24a 100644 --- a/src/failoverlist.c +++ b/src/failoverlist.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -167,4 +167,3 @@ const char *qd_failover_list_hostname(const qd_failover_list_t *list, int index) } return item ? item->hostname : 0; } - diff --git a/src/http-libwebsockets.c b/src/http-libwebsockets.c index c331b664c..0dd7713f4 100644 --- a/src/http-libwebsockets.c +++ b/src/http-libwebsockets.c @@ -294,7 +294,7 @@ static qd_lws_listener_t *qd_lws_listener(qd_http_server_t *hs, qd_listener_t *l return hl; } -/* Linked list: first entry on each line should point to next, last line should be the +/* Linked list: first entry on each line should point to next, last line should be the * octet-stream default. */ static const struct lws_protocol_vhost_options mime_types[] = { diff --git a/src/message_private.h b/src/message_private.h index 0d3a830e2..90c58514c 100644 --- a/src/message_private.h +++ b/src/message_private.h @@ -28,7 +28,7 @@ typedef struct qd_message_pvt_t qd_message_pvt_t; /** @file * Message representation. - * + * * Architecture of the message module: * * +--------------+ +----------------------+ @@ -48,7 +48,7 @@ typedef struct qd_message_pvt_t qd_message_pvt_t; * one copy of the message content in memory but multiple lightweight references to the content. * * @internal - * @{ + * @{ */ typedef struct { diff --git a/src/parse.c b/src/parse.c index 0cc9bc1c8..9b26d3a29 100644 --- a/src/parse.c +++ b/src/parse.c @@ -781,4 +781,3 @@ const char *qd_parse_router_annotations( return 0; } - diff --git a/src/policy.c b/src/policy.c index f87ec39bd..b92838d77 100644 --- a/src/policy.c +++ b/src/policy.c @@ -64,7 +64,7 @@ static char* LINK_DISALLOWED = "link disallowed by local policy"; // // username substitution key shared with configuration files and python code -// substitution triplet keys shared with python code +// substitution triplet keys shared with python code // static const char * const user_subst_key = "${user}"; static const char * const user_subst_i_absent = "a"; @@ -395,11 +395,10 @@ qd_parse_tree_t * qd_policy_parse_tree(const char *config_spec) return tree; } - // // Functions related to authenticated connection denial. // An AMQP Open has been received over some connection. -// * Evaluate the connection auth and the Open fields to allow or deny the Open. +// * Evaluate the connection auth and the Open fields to allow or deny the Open. // * If allowed then return the settings from the python vhost database. // @@ -451,10 +450,9 @@ bool qd_policy_lookup_vhost_alias( return res; } - /** Look up user/host/vhost in python vhost database and give the AMQP Open - * a go-no_go decision. - * * Return false if the mechanics of calling python fails or if name buf is blank. + * a go-no_go decision. + * * Return false if the mechanics of calling python fails or if name buf is blank. * * Deny the connection by returning a blank usergroup name in the name buffer. * Connection and connection denial counting is done in the python code. * @param[in] policy pointer to policy @@ -742,13 +740,13 @@ bool is_token_sep(char testc) #define MIN(a,b) (((a)<(b))?(a):(b)) /** - * Given a username and a list of allowed link names + * Given a username and a list of allowed link names * decide if the proposed link name is approved. * @param[in] username the user name * @param[in] allowed csv of (key, prefix, suffix) tuples * @param[in] proposed the link source/target name to be approved * @return true if the user is allowed to open this link source/target name - * + * * Concrete example * user: 'bob', allowed (from spec): 'A,B,tmp-${user},C', proposed: 'tmp-bob' * note that allowed above is now a tuple and not simple string fron the spec. @@ -852,9 +850,9 @@ bool _qd_policy_approve_link_name(const char *username, const char *allowed, con break; } - size_t rule_len = MIN(snpN, sName); + size_t rule_len = MIN(snpN, sName); if (pName[rule_len-1] != QPALN_WILDCARD) { - // Rule clauses that do not end with wildcard + // Rule clauses that do not end with wildcard // must match entire proposed name string. // pName=tmp-bob-5, proposed can be only 'tmp-bob-5' result = strcmp(proposed, pName) == 0; @@ -1363,8 +1361,8 @@ char * qd_policy_host_pattern_lookup(qd_policy_t *policy, const char *hostPatter if (!matched) { payload = 0; } - qd_log(policy->log_source, QD_LOG_TRACE, "vhost hostname pattern '%s' lookup returned '%s'", - hostPattern, (payload ? (char *)payload : "null")); + qd_log(policy->log_source, QD_LOG_TRACE, "vhost hostname pattern '%s' lookup returned '%s'", hostPattern, + (payload ? (char *) payload : "null")); return payload; } diff --git a/src/policy.h b/src/policy.h index 2e1e1c0bd..3ca7ed5e3 100644 --- a/src/policy.h +++ b/src/policy.h @@ -75,7 +75,7 @@ ALLOC_DECLARE(qd_policy_settings_t); qd_error_t qd_entity_configure_policy(qd_policy_t *policy, qd_entity_t *entity); /** Memorize the address of python policy_manager object. - * This python object gets called by C to execute user lookups + * This python object gets called by C to execute user lookups * @param[in] policy pointer to the policy * @param[in] policy_manager the address of the policy_manager object **/ @@ -109,11 +109,10 @@ qd_error_t qd_policy_c_counts_refresh(qd_policy_denial_counts_t* dc, qd_entity_t **/ bool qd_policy_socket_accept(qd_policy_t *context, const char *hostname); - /** Record a closing connection. * A server listener is closing a socket. * Release the counted connection against provisioned limits - * + * * @param[in] context the current policy * @param[in] conn qd_connection **/ @@ -187,9 +186,8 @@ void qd_policy_amqp_open(qd_connection_t *conn); **/ void qd_policy_amqp_open_connector(qd_connection_t *conn); - /** Dispose of policy settings - * + * * @param settings the settings to be destroyed */ void qd_policy_settings_free(qd_policy_settings_t *settings); @@ -259,7 +257,7 @@ bool qd_policy_approve_message_target(qd_iterator_t *address, qd_connection_t *q void qd_policy_count_max_size_event(pn_link_t *link, qd_connection_t *qd_conn); /** - * Return POLICY log_source to log policy + * Return POLICY log_source to log policy */ qd_log_source_t *qd_policy_log_source(void); #endif diff --git a/src/policy_internal.h b/src/policy_internal.h index 385f3cfe3..b802d7b9b 100644 --- a/src/policy_internal.h +++ b/src/policy_internal.h @@ -30,7 +30,7 @@ * @param[in] conn proton connection being closed * @param[in] cond_name condition name * @param[in] cond_descr condition description - **/ + **/ void qd_policy_private_deny_amqp_connection(pn_connection_t *conn, const char *cond_name, const char *cond_descr); @@ -41,31 +41,28 @@ void qd_policy_private_deny_amqp_connection(pn_connection_t *conn, const char *c */ void qd_policy_deny_amqp_session(pn_session_t *ssn, qd_connection_t *qd_conn); - /** Internal function to deny an amqp link * The link is closed and the denial is logged but not counted. * @param[in] link proton link being closed * @param[in] qd_conn the qd connection * @param[in] condition the AMQP error with which to close the link - */ + */ void _qd_policy_deny_amqp_link(pn_link_t *link, qd_connection_t *qd_conn, const char *condition); - /** Internal function to deny a sender amqp link * The link is closed and the denial is logged but not counted. * @param[in] link proton link to close * @param[in] qd_conn the qd connection * @param[in] condition the AMQP error with which to close the link - */ + */ void _qd_policy_deny_amqp_sender_link(pn_link_t *pn_link, qd_connection_t *qd_conn, const char *condition); - /** Internal function to deny a receiver amqp link * The link is closed and the denial is logged but not counted. * @param[in] link proton link to close * @param[in] qd_conn the qd connection * @param[in] condition the AMQP error with which to close the link - */ + */ void _qd_policy_deny_amqp_receiver_link(pn_link_t *pn_link, qd_connection_t *qd_conn, const char *condition); diff --git a/src/proton_utils.c b/src/proton_utils.c index 8051e7011..8519a99b5 100644 --- a/src/proton_utils.c +++ b/src/proton_utils.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/src/python_utils.c b/src/python_utils.c index 170e2595a..0a57c8f25 100644 --- a/src/python_utils.c +++ b/src/python_utils.c @@ -65,4 +65,3 @@ char *py_obj_2_c_string(PyObject *py_obj) Py_XDECREF(tmp); return str; } - diff --git a/src/router_agent.c b/src/router_agent.c index 1e60ac250..3efe642dc 100644 --- a/src/router_agent.c +++ b/src/router_agent.c @@ -45,4 +45,3 @@ QD_EXPORT qd_error_t qd_entity_refresh_router(qd_entity_t* entity, void *impl) { return QD_ERROR_NONE; return qd_error_code(); } - diff --git a/src/router_config.c b/src/router_config.c index d1317afdb..9a7d36be4 100644 --- a/src/router_config.c +++ b/src/router_config.c @@ -197,4 +197,3 @@ void qd_router_configure_free(qd_router_t *router) // All configuration to be freed is now in the router core. // } - diff --git a/src/router_core/DESIGN b/src/router_core/DESIGN index ec5416025..3397049dc 100644 --- a/src/router_core/DESIGN +++ b/src/router_core/DESIGN @@ -258,4 +258,3 @@ org ============================ Route Control Data Structure ============================ - diff --git a/src/router_core/address_watch.h b/src/router_core/address_watch.h index 307e38548..48072ddc0 100644 --- a/src/router_core/address_watch.h +++ b/src/router_core/address_watch.h @@ -27,10 +27,10 @@ DEQ_DECLARE(qdr_address_watch_t, qdr_address_watch_list_t); /** * qdr_trigger_address_watch_CT - * + * * This function is invoked after changes have been made to the address that affect * reachability (i.e. local and remote senders and receivers). - * + * * @param core Pointer to the router core state * @param addr Pointer to the address record that was modified */ diff --git a/src/router_core/agent.c b/src/router_core/agent.c index ba4607abf..b5d32165c 100644 --- a/src/router_core/agent.c +++ b/src/router_core/agent.c @@ -542,4 +542,3 @@ static void qdrh_query_get_next_CT(qdr_core_t *core, qdr_action_t *action, bool } } } - diff --git a/src/router_core/agent_connection.c b/src/router_core/agent_connection.c index e6fb9aa89..e4b96e68c 100644 --- a/src/router_core/agent_connection.c +++ b/src/router_core/agent_connection.c @@ -171,7 +171,7 @@ static void qdr_connection_insert_column_CT(qdr_core_t *core, qdr_connection_t * break; case QDR_CONNECTION_SASL_MECHANISMS: - if (conn->connection_info->sasl_mechanisms) + if (conn->connection_info->sasl_mechanisms) qd_compose_insert_string(body, conn->connection_info->sasl_mechanisms); else qd_compose_insert_null(body); @@ -663,4 +663,3 @@ void qdra_connection_update_CT(qdr_core_t *core, // qdr_agent_enqueue_response_CT(core, query); } - diff --git a/src/router_core/agent_link.c b/src/router_core/agent_link.c index 7ec74c22f..d9738f9f2 100644 --- a/src/router_core/agent_link.c +++ b/src/router_core/agent_link.c @@ -515,4 +515,3 @@ void qdra_link_update_CT(qdr_core_t *core, // qdr_agent_enqueue_response_CT(core, query); } - diff --git a/src/router_core/connections.c b/src/router_core/connections.c index 22dabd760..6a2f143b9 100644 --- a/src/router_core/connections.c +++ b/src/router_core/connections.c @@ -2382,4 +2382,3 @@ static void qdr_link_processing_complete_CT(qdr_core_t *core, qdr_action_t *acti qdr_link_cleanup_CT(core, link->conn, link, "Link cleanup deferred after IO processing"); } - diff --git a/src/router_core/core_events.c b/src/router_core/core_events.c index bbdc1c044..336966c70 100644 --- a/src/router_core/core_events.c +++ b/src/router_core/core_events.c @@ -138,4 +138,3 @@ void qdrc_event_router_raise(qdr_core_t *core, qdrc_event_t event, qdr_node_t *r sub = DEQ_NEXT_N(ROUTER, sub); } } - diff --git a/src/router_core/core_link_endpoint.c b/src/router_core/core_link_endpoint.c index f97e27ba7..dc4d9879b 100644 --- a/src/router_core/core_link_endpoint.c +++ b/src/router_core/core_link_endpoint.c @@ -242,5 +242,3 @@ void qdrc_endpoint_do_cleanup_CT(qdr_core_t *core, qdrc_endpoint_t *ep) ep->link->core_endpoint = 0; free_qdrc_endpoint_t(ep); } - - diff --git a/src/router_core/core_timer.c b/src/router_core/core_timer.c index b8eab2af3..61c704991 100644 --- a/src/router_core/core_timer.c +++ b/src/router_core/core_timer.c @@ -128,4 +128,3 @@ void qdr_process_tick_CT(qdr_core_t *core, qdr_action_t *action, bool discard) if (timer) timer->delta_time_seconds--; } - diff --git a/src/router_core/error.c b/src/router_core/error.c index de6ede92c..1c2b16547 100644 --- a/src/router_core/error.c +++ b/src/router_core/error.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -145,4 +145,3 @@ pn_data_t *qdr_error_info(const qdr_error_t *err) return err->info; } - diff --git a/src/router_core/forwarder.c b/src/router_core/forwarder.c index 4270b41ba..fecc9af8a 100644 --- a/src/router_core/forwarder.c +++ b/src/router_core/forwarder.c @@ -993,4 +993,3 @@ int qdr_forward_message_CT(qdr_core_t *core, qdr_address_t *addr, qd_message_t * fanout = addr->forwarder->forward_message(core, addr, msg, in_delivery, exclude_inprocess, control); return fanout; } - diff --git a/src/router_core/management_agent.c b/src/router_core/management_agent.c index 867025e4d..7ac518679 100644 --- a/src/router_core/management_agent.c +++ b/src/router_core/management_agent.c @@ -533,4 +533,3 @@ uint64_t qdr_management_agent_on_message(void *context, qd_message_t *msg, int u qd_parse_free(properties_fld); return PN_ACCEPTED; } - diff --git a/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c b/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c index 1934d9d2f..20788f0ee 100644 --- a/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c +++ b/src/router_core/modules/edge_addr_tracking/edge_addr_tracking.c @@ -297,7 +297,7 @@ static void on_link_event(void *context, qdrc_event_t event, qdr_link_t *link) } break; } - + case QDRC_EVENT_LINK_EDGE_DATA_DETACHED : { if (link->edge_context) { diff --git a/src/router_core/modules/edge_router/addr_proxy.c b/src/router_core/modules/edge_router/addr_proxy.c index 8b53dad28..27dfc04db 100644 --- a/src/router_core/modules/edge_router/addr_proxy.c +++ b/src/router_core/modules/edge_router/addr_proxy.c @@ -475,22 +475,16 @@ qcm_edge_addr_proxy_t *qcm_edge_addr_proxy(qdr_core_t *core) // // Subscribe to the core events we'll need to drive this component // - ap->event_sub = qdrc_event_subscribe_CT(core, - QDRC_EVENT_CONN_EDGE_ESTABLISHED - | QDRC_EVENT_CONN_EDGE_LOST - | QDRC_EVENT_ADDR_ADDED_LOCAL_DEST - | QDRC_EVENT_ADDR_REMOVED_LOCAL_DEST - | QDRC_EVENT_ADDR_BECAME_SOURCE - | QDRC_EVENT_ADDR_NO_LONGER_SOURCE - | QDRC_EVENT_ADDR_WATCH_ON - | QDRC_EVENT_ADDR_WATCH_OFF - | QDRC_EVENT_LINK_IN_DETACHED - | QDRC_EVENT_LINK_OUT_DETACHED, - on_conn_event, - on_link_event, - on_addr_event, - 0, - ap); + ap->event_sub = qdrc_event_subscribe_CT( + core, + QDRC_EVENT_CONN_EDGE_ESTABLISHED | QDRC_EVENT_CONN_EDGE_LOST | QDRC_EVENT_ADDR_ADDED_LOCAL_DEST | QDRC_EVENT_ADDR_REMOVED_LOCAL_DEST + | QDRC_EVENT_ADDR_BECAME_SOURCE | QDRC_EVENT_ADDR_NO_LONGER_SOURCE | QDRC_EVENT_ADDR_WATCH_ON | QDRC_EVENT_ADDR_WATCH_OFF + | QDRC_EVENT_LINK_IN_DETACHED | QDRC_EVENT_LINK_OUT_DETACHED, + on_conn_event, + on_link_event, + on_addr_event, + 0, + ap); core->edge_conn_addr = qcm_edge_conn_addr; core->edge_context = ap; @@ -505,4 +499,3 @@ void qcm_edge_addr_proxy_final(qcm_edge_addr_proxy_t *ap) qdrc_event_unsubscribe_CT(ap->core, ap->event_sub); free(ap); } - diff --git a/src/router_core/modules/edge_router/connection_manager.c b/src/router_core/modules/edge_router/connection_manager.c index a66618276..278883b1a 100644 --- a/src/router_core/modules/edge_router/connection_manager.c +++ b/src/router_core/modules/edge_router/connection_manager.c @@ -112,4 +112,3 @@ void qcm_edge_conn_mgr_final(qcm_edge_conn_mgr_t *cm) qdrc_event_unsubscribe_CT(cm->core, cm->event_sub); free(cm); } - diff --git a/src/router_core/modules/mobile_sync/mobile.c b/src/router_core/modules/mobile_sync/mobile.c index d456bb1b4..a101a6529 100644 --- a/src/router_core/modules/mobile_sync/mobile.c +++ b/src/router_core/modules/mobile_sync/mobile.c @@ -832,13 +832,13 @@ static void qcm_mobile_sync_on_addr_event_CT(void *context, qcm_mobile_sync_on_became_local_dest_CT(msync, addr); } break; - + case QDRC_EVENT_ADDR_REMOVED_LOCAL_DEST: if (DEQ_SIZE(addr->rlinks) - addr->proxy_rlink_count == 0) { qcm_mobile_sync_on_no_longer_local_dest_CT(msync, addr); } break; - + default: break; } diff --git a/src/router_core/route_control.c b/src/router_core/route_control.c index 75a1ec181..699a38b50 100644 --- a/src/router_core/route_control.c +++ b/src/router_core/route_control.c @@ -426,5 +426,3 @@ void qdr_route_connection_closed_CT(qdr_core_t *core, qdr_connection_t *conn) conn->alt_conn_id = 0; } } - - diff --git a/src/router_core/route_tables.c b/src/router_core/route_tables.c index bf0cc7b6f..3c70e7031 100644 --- a/src/router_core/route_tables.c +++ b/src/router_core/route_tables.c @@ -121,12 +121,11 @@ void qdr_core_mobile_seq_advanced(qdr_core_t *core, int router_maskbit) qdr_action_enqueue(core, action); } - -void qdr_core_route_table_handlers(qdr_core_t *core, - void *context, - qdr_set_mobile_seq_t set_mobile_seq, - qdr_set_my_mobile_seq_t set_my_mobile_seq, - qdr_link_lost_t link_lost) +void qdr_core_route_table_handlers(qdr_core_t *core, + void *context, + qdr_set_mobile_seq_t set_mobile_seq, + qdr_set_my_mobile_seq_t set_my_mobile_seq, + qdr_link_lost_t link_lost) { core->rt_context = context; core->rt_set_mobile_seq = set_mobile_seq; @@ -777,5 +776,3 @@ void qdr_post_link_lost_CT(qdr_core_t *core, int link_maskbit) work->maskbit = link_maskbit; qdr_post_general_work_CT(core, work); } - - diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c index 1a76a9fa9..7f3b16b0d 100644 --- a/src/router_core/router_core.c +++ b/src/router_core/router_core.c @@ -684,7 +684,7 @@ void qdr_core_bind_address_link_CT(qdr_core_t *core, qdr_address_t *addr, qdr_li if (link->link_direction == QD_OUTGOING) { qdr_add_link_ref(&addr->rlinks, link, QDR_LINK_LIST_CLASS_ADDRESS); addr->proxy_rlink_count += link->proxy ? 1 : 0; - + if (DEQ_SIZE(addr->rlinks) == 1) { qdr_addr_start_inlinks_CT(core, addr); } @@ -1049,5 +1049,3 @@ void qdr_link_work_release(qdr_link_work_t *work) } } } - - diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h index bbd63afa4..4f65cd0a4 100644 --- a/src/router_core/router_core_private.h +++ b/src/router_core/router_core_private.h @@ -355,7 +355,7 @@ struct qdr_query_t { uint64_t in_conn; // or perhaps a pointer??? }; -DEQ_DECLARE(qdr_query_t, qdr_query_list_t); +DEQ_DECLARE(qdr_query_t, qdr_query_list_t); struct qdr_node_t { DEQ_LINKS(qdr_node_t); diff --git a/src/router_core/terminus.c b/src/router_core/terminus.c index 972392917..5533e3f6d 100644 --- a/src/router_core/terminus.c +++ b/src/router_core/terminus.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -368,4 +368,3 @@ void qdr_terminus_set_dnp_address_iterator(qdr_terminus_t *term, qd_iterator_t * if (on_heap) free(text); } - diff --git a/src/router_node.c b/src/router_node.c index ff4e31064..7dac91239 100644 --- a/src/router_node.c +++ b/src/router_node.c @@ -86,7 +86,6 @@ static void qdr_node_connect_deliveries(qd_link_t *link, qdr_delivery_t *qdlv, p pn_delivery_set_context(pdlv, ref); qdr_delivery_set_context(qdlv, pdlv); qdr_delivery_incref(qdlv, "referenced by a pn_delivery"); - } @@ -1651,12 +1650,11 @@ static void CORE_connection_activate(void *context, qdr_connection_t *conn) sys_mutex_unlock(qd_server_get_activation_lock(router->qd->server)); } - -static void CORE_link_first_attach(void *context, - qdr_connection_t *conn, - qdr_link_t *link, - qdr_terminus_t *source, - qdr_terminus_t *target, +static void CORE_link_first_attach(void *context, + qdr_connection_t *conn, + qdr_link_t *link, + qdr_terminus_t *source, + qdr_terminus_t *target, qd_session_class_t ssn_class) { qd_router_t *router = (qd_router_t*) context; @@ -2187,7 +2185,7 @@ void qd_connection_log_policy_denial(qd_link_t *link, const char *text) if (rlink->conn) { c_id = rlink->conn->identity; } - } + } qd_log(qd_policy_log_source(), QD_LOG_WARNING, "[C%"PRIu64"][L%"PRIu64"] %s", c_id, l_id, text); } diff --git a/src/router_pynode.c b/src/router_pynode.c index 9693aafdb..e2a6020a9 100644 --- a/src/router_pynode.c +++ b/src/router_pynode.c @@ -486,4 +486,3 @@ qd_error_t qd_pyrouter_tick(qd_router_t *router) } return err; } - diff --git a/src/trace_mask.c b/src/trace_mask.c index 8c53a6428..b9fd64989 100644 --- a/src/trace_mask.c +++ b/src/trace_mask.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -153,4 +153,3 @@ qd_bitmask_t *qd_tracemask_create(qd_tracemask_t *tm, qd_parsed_field_t *traceli sys_rwlock_unlock(&tm->lock); return bm; } - diff --git a/src/vanflow.c b/src/vanflow.c index 391145fb3..d683231b2 100644 --- a/src/vanflow.c +++ b/src/vanflow.c @@ -178,10 +178,9 @@ static uint64_t _now_in_usec(void) return (uint64_t) tv.tv_usec + (uint64_t) (1000000L * (uint64_t) tv.tv_sec); } - /** * @brief Find either the existing attribute record or the insertion point for a new attribute. - * + * * @param record The record with the attribute list that should be searched * @param attr The attribute type to search for * @return data Pointer to result: @@ -209,10 +208,9 @@ static vflow_attribute_data_t* _vflow_find_attribute(vflow_record_t *record, vfl return 0; } - /** * @brief Assign a unique identity for a locally-sourced record. - * + * * @param identity (out) New, unique identity */ static void _vflow_next_id(vflow_identity_t *identity) @@ -281,10 +279,9 @@ static void _vflow_compose_attribute(qd_composed_field_t *field, const vflow_att } } - /** * @brief Work handler for vflow_start_record - * + * * @param work Pointer to work context * @param discard Indicator that this work must be discarded */ @@ -356,10 +353,9 @@ static void _vflow_start_record_TH(vflow_work_t *work, bool discard) } } - /** * @brief Work handler for vflow_end_record - * + * * @param work Pointer to work context * @param discard Indicator that this work must be discarded */ @@ -406,10 +402,9 @@ static void _vflow_end_record_TH(vflow_work_t *work, bool discard) } } - /** * @brief Work handler for vflow_set_string - * + * * @param work Pointer to work context * @param discard Indicator that this work must be discarded */ @@ -453,10 +448,9 @@ static void _vflow_set_string_TH(vflow_work_t *work, bool discard) } } - /** * @brief Work handler for vflow_set_int - * + * * @param work Pointer to work context * @param discard Indicator that this work must be discarded */ @@ -498,10 +492,9 @@ static void _vflow_set_int_TH(vflow_work_t *work, bool discard) } } - /** * @brief Allocate a work object pre-loaded with a handler. - * + * * @param handler The handler to be called on the vflow thread to do the work * @return vflow_work_t* Pointer to the allocated work that should be posted for processing */ @@ -513,10 +506,9 @@ static vflow_work_t *_vflow_work(vflow_work_handler_t handler) return work; } - /** * @brief Post work for processing in the vflow thread - * + * * @param work Pointer to the work to be processed */ static void _vflow_post_work(vflow_work_t *work) @@ -573,10 +565,9 @@ static void _vflow_create_router_record(void) vflow_set_string(router, VFLOW_ATTRIBUTE_BUILD_VERSION, QPID_DISPATCH_VERSION); } - /** * @brief Recursively free the given record and all of its children - * + * * @param record Pointer to the record to be freed. * @param recursive If true, delete recursively, otherwise just remove parent references. */ @@ -702,10 +693,9 @@ static const char *_vflow_attribute_name(const vflow_attribute_data_t *data) return "UNKNOWN"; } - /** * @brief Extract the value of a record identity from its serialized form in an iterator - * + * * @param field Pointer to the parsed field containing the serialized identity * @return Newly allocated string with identity, or NULL */ @@ -860,10 +850,9 @@ static void _vflow_emit_unflushed_as_events_TH(qdr_core_t *core) } - /** * @brief Emit all of the unflushed records - * + * * @param core Pointer to the core module */ static void _vflow_flush_TH(qdr_core_t *core) @@ -1166,7 +1155,7 @@ static void _vflow_my_address_status_TH(vflow_work_t *work, bool discard) /** * @brief Main function for the vflow thread. This thread runs for the entire * lifecycle of the router. - * + * * @param unused Unused * @return void* Unused */ @@ -1240,9 +1229,9 @@ static void *_vflow_thread(void *context) //===================================================================================== /** * @brief Handler for changes in reachability for the all-routers multicast address. - * This address is used for "beacon" messages that announce the existence of + * This address is used for "beacon" messages that announce the existence of * a router in the network. - * + * * @param context Context for the handler (the core module pointer) * @param local_consumers The number of local (on this router) consumers for the address * @param in_proc_consumers (unused) The number of in-process consumers for the address @@ -1260,11 +1249,10 @@ static void _vflow_on_all_address_watch(void *context, _vflow_post_work(work); } - /** * @brief Handler for changes in reachability for this router's event multicast address. * This address is used to send the log records to collectors in the network. - * + * * @param context Context for the handler (the core module pointer) * @param local_consumers The number of local (on this router) consumers for the address * @param in_proc_consumers (unused) The number of in-process consumers for the address @@ -1519,10 +1507,9 @@ static void _vflow_init_address_watch_TH(vflow_work_t *work, bool discard) } } - /** * @brief Module initializer - * + * * @param core Pointer to the core object * @param adaptor_context (out) Context set for use in finalizer */ @@ -1584,10 +1571,9 @@ static void _vflow_init(qdr_core_t *core, void **adaptor_context) qd_timer_schedule(state->flush_timer, initial_flush_interval_msec); } - /** * @brief Module finalizer - * + * * @param adaptor_context Contains the core module pointer */ static void _vflow_final(void *adaptor_context) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cbe4d3fb3..f71e47031 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -122,7 +122,7 @@ else() endif() # There are some bugs in the Proton TLS 0.37.0 code -# We are not going to run any TLS tests when router is compiled with Proton 0.37.0 +# We are not going to run any TLS tests when router is compiled with Proton 0.37.0 if(${Proton_VERSION} VERSION_LESS "0.38.0") #nothing to do else() @@ -172,8 +172,8 @@ foreach(py_test_module system_tests_log_level_update system_tests_routing_protocol system_tests_open_properties - system_tests_http2 - system_tests_grpc + system_tests_http2 + system_tests_grpc system_tests_http1_adaptor system_tests_http1_over_tcp system_tests_tcp_adaptor diff --git a/tests/alloc_test.c b/tests/alloc_test.c index fc42d0969..91136ac9d 100644 --- a/tests/alloc_test.c +++ b/tests/alloc_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -105,4 +105,3 @@ int alloc_tests(void) return result; } - diff --git a/tests/buffer_test.c b/tests/buffer_test.c index 3d00719e3..e6e37dea6 100644 --- a/tests/buffer_test.c +++ b/tests/buffer_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -436,4 +436,3 @@ int buffer_tests(void) return result; } - diff --git a/tests/c_benchmarks/SocketException.cpp b/tests/c_benchmarks/SocketException.cpp index db10d780c..31b20a6ef 100644 --- a/tests/c_benchmarks/SocketException.cpp +++ b/tests/c_benchmarks/SocketException.cpp @@ -42,4 +42,4 @@ SocketException::~SocketException() noexcept = default; const char *SocketException::what() const noexcept { return mMessage.c_str(); -} \ No newline at end of file +} diff --git a/tests/c_benchmarks/TCPServerSocket.cpp b/tests/c_benchmarks/TCPServerSocket.cpp index 3c98840a4..ec88f8437 100644 --- a/tests/c_benchmarks/TCPServerSocket.cpp +++ b/tests/c_benchmarks/TCPServerSocket.cpp @@ -61,4 +61,4 @@ void TCPServerSocket::setListen(int queueLen) if (listen(mFileDescriptor, queueLen) < 0) { throw SocketException("Set listening socket failed (listen())", true); } -} \ No newline at end of file +} diff --git a/tests/c_unittests/c_unittests_main.cpp b/tests/c_unittests/c_unittests_main.cpp index 2d7f9ad6e..63ebd45e9 100644 --- a/tests/c_unittests/c_unittests_main.cpp +++ b/tests/c_unittests/c_unittests_main.cpp @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/tests/c_unittests/doctest.h b/tests/c_unittests/doctest.h index aa2724c73..f96a0e2e9 100644 --- a/tests/c_unittests/doctest.h +++ b/tests/c_unittests/doctest.h @@ -688,94 +688,93 @@ namespace Color { } // namespace Color namespace assertType { - enum Enum - { - // macro traits +enum Enum { + // macro traits - is_warn = 1, - is_check = 2 * is_warn, - is_require = 2 * is_check, + is_warn = 1, + is_check = 2 * is_warn, + is_require = 2 * is_check, - is_normal = 2 * is_require, - is_throws = 2 * is_normal, - is_throws_as = 2 * is_throws, - is_throws_with = 2 * is_throws_as, - is_nothrow = 2 * is_throws_with, + is_normal = 2 * is_require, + is_throws = 2 * is_normal, + is_throws_as = 2 * is_throws, + is_throws_with = 2 * is_throws_as, + is_nothrow = 2 * is_throws_with, - is_false = 2 * is_nothrow, - is_unary = 2 * is_false, // not checked anywhere - used just to distinguish the types + is_false = 2 * is_nothrow, + is_unary = 2 * is_false, // not checked anywhere - used just to distinguish the types - is_eq = 2 * is_unary, - is_ne = 2 * is_eq, + is_eq = 2 * is_unary, + is_ne = 2 * is_eq, - is_lt = 2 * is_ne, - is_gt = 2 * is_lt, + is_lt = 2 * is_ne, + is_gt = 2 * is_lt, - is_ge = 2 * is_gt, - is_le = 2 * is_ge, + is_ge = 2 * is_gt, + is_le = 2 * is_ge, - // macro types + // macro types - DT_WARN = is_normal | is_warn, - DT_CHECK = is_normal | is_check, - DT_REQUIRE = is_normal | is_require, + DT_WARN = is_normal | is_warn, + DT_CHECK = is_normal | is_check, + DT_REQUIRE = is_normal | is_require, - DT_WARN_FALSE = is_normal | is_false | is_warn, - DT_CHECK_FALSE = is_normal | is_false | is_check, - DT_REQUIRE_FALSE = is_normal | is_false | is_require, + DT_WARN_FALSE = is_normal | is_false | is_warn, + DT_CHECK_FALSE = is_normal | is_false | is_check, + DT_REQUIRE_FALSE = is_normal | is_false | is_require, - DT_WARN_THROWS = is_throws | is_warn, - DT_CHECK_THROWS = is_throws | is_check, - DT_REQUIRE_THROWS = is_throws | is_require, + DT_WARN_THROWS = is_throws | is_warn, + DT_CHECK_THROWS = is_throws | is_check, + DT_REQUIRE_THROWS = is_throws | is_require, - DT_WARN_THROWS_AS = is_throws_as | is_warn, - DT_CHECK_THROWS_AS = is_throws_as | is_check, - DT_REQUIRE_THROWS_AS = is_throws_as | is_require, + DT_WARN_THROWS_AS = is_throws_as | is_warn, + DT_CHECK_THROWS_AS = is_throws_as | is_check, + DT_REQUIRE_THROWS_AS = is_throws_as | is_require, - DT_WARN_THROWS_WITH = is_throws_with | is_warn, - DT_CHECK_THROWS_WITH = is_throws_with | is_check, - DT_REQUIRE_THROWS_WITH = is_throws_with | is_require, + DT_WARN_THROWS_WITH = is_throws_with | is_warn, + DT_CHECK_THROWS_WITH = is_throws_with | is_check, + DT_REQUIRE_THROWS_WITH = is_throws_with | is_require, - DT_WARN_THROWS_WITH_AS = is_throws_with | is_throws_as | is_warn, - DT_CHECK_THROWS_WITH_AS = is_throws_with | is_throws_as | is_check, - DT_REQUIRE_THROWS_WITH_AS = is_throws_with | is_throws_as | is_require, + DT_WARN_THROWS_WITH_AS = is_throws_with | is_throws_as | is_warn, + DT_CHECK_THROWS_WITH_AS = is_throws_with | is_throws_as | is_check, + DT_REQUIRE_THROWS_WITH_AS = is_throws_with | is_throws_as | is_require, - DT_WARN_NOTHROW = is_nothrow | is_warn, - DT_CHECK_NOTHROW = is_nothrow | is_check, - DT_REQUIRE_NOTHROW = is_nothrow | is_require, + DT_WARN_NOTHROW = is_nothrow | is_warn, + DT_CHECK_NOTHROW = is_nothrow | is_check, + DT_REQUIRE_NOTHROW = is_nothrow | is_require, - DT_WARN_EQ = is_normal | is_eq | is_warn, - DT_CHECK_EQ = is_normal | is_eq | is_check, - DT_REQUIRE_EQ = is_normal | is_eq | is_require, + DT_WARN_EQ = is_normal | is_eq | is_warn, + DT_CHECK_EQ = is_normal | is_eq | is_check, + DT_REQUIRE_EQ = is_normal | is_eq | is_require, - DT_WARN_NE = is_normal | is_ne | is_warn, - DT_CHECK_NE = is_normal | is_ne | is_check, - DT_REQUIRE_NE = is_normal | is_ne | is_require, + DT_WARN_NE = is_normal | is_ne | is_warn, + DT_CHECK_NE = is_normal | is_ne | is_check, + DT_REQUIRE_NE = is_normal | is_ne | is_require, - DT_WARN_GT = is_normal | is_gt | is_warn, - DT_CHECK_GT = is_normal | is_gt | is_check, - DT_REQUIRE_GT = is_normal | is_gt | is_require, + DT_WARN_GT = is_normal | is_gt | is_warn, + DT_CHECK_GT = is_normal | is_gt | is_check, + DT_REQUIRE_GT = is_normal | is_gt | is_require, - DT_WARN_LT = is_normal | is_lt | is_warn, - DT_CHECK_LT = is_normal | is_lt | is_check, - DT_REQUIRE_LT = is_normal | is_lt | is_require, + DT_WARN_LT = is_normal | is_lt | is_warn, + DT_CHECK_LT = is_normal | is_lt | is_check, + DT_REQUIRE_LT = is_normal | is_lt | is_require, - DT_WARN_GE = is_normal | is_ge | is_warn, - DT_CHECK_GE = is_normal | is_ge | is_check, - DT_REQUIRE_GE = is_normal | is_ge | is_require, + DT_WARN_GE = is_normal | is_ge | is_warn, + DT_CHECK_GE = is_normal | is_ge | is_check, + DT_REQUIRE_GE = is_normal | is_ge | is_require, - DT_WARN_LE = is_normal | is_le | is_warn, - DT_CHECK_LE = is_normal | is_le | is_check, - DT_REQUIRE_LE = is_normal | is_le | is_require, + DT_WARN_LE = is_normal | is_le | is_warn, + DT_CHECK_LE = is_normal | is_le | is_check, + DT_REQUIRE_LE = is_normal | is_le | is_require, - DT_WARN_UNARY = is_normal | is_unary | is_warn, - DT_CHECK_UNARY = is_normal | is_unary | is_check, - DT_REQUIRE_UNARY = is_normal | is_unary | is_require, + DT_WARN_UNARY = is_normal | is_unary | is_warn, + DT_CHECK_UNARY = is_normal | is_unary | is_check, + DT_REQUIRE_UNARY = is_normal | is_unary | is_require, - DT_WARN_UNARY_FALSE = is_normal | is_false | is_unary | is_warn, - DT_CHECK_UNARY_FALSE = is_normal | is_false | is_unary | is_check, - DT_REQUIRE_UNARY_FALSE = is_normal | is_false | is_unary | is_require, - }; + DT_WARN_UNARY_FALSE = is_normal | is_false | is_unary | is_warn, + DT_CHECK_UNARY_FALSE = is_normal | is_false | is_unary | is_check, + DT_REQUIRE_UNARY_FALSE = is_normal | is_false | is_unary | is_require, +}; } // namespace assertType DOCTEST_INTERFACE const char* assertString(assertType::Enum at); @@ -3315,7 +3314,7 @@ namespace detail { namespace timer_large_integer { - + #if defined(DOCTEST_PLATFORM_WINDOWS) using type = ULONGLONG; #else // DOCTEST_PLATFORM_WINDOWS @@ -4164,7 +4163,7 @@ namespace detail { DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature); } } else { - if (g_cs->subcaseStack[g_cs->currentSubcaseDepth] == m_signature) { +if (g_cs->subcaseStack[g_cs->currentSubcaseDepth] == m_signature) { // This subcase is reentered via control flow. g_cs->currentSubcaseDepth++; m_entered = true; @@ -4949,7 +4948,7 @@ namespace detail { m_string = tlssPop(); logged = true; } - + DOCTEST_ITERATE_THROUGH_REPORTERS(log_message, *this); const bool isWarn = m_severity & assertType::is_warn; @@ -5500,7 +5499,7 @@ namespace { test_case_start_impl(in); xml.ensureTagClosed(); } - + void test_case_reenter(const TestCaseData&) override {} void test_case_end(const CurrentTestCaseStats& st) override { @@ -6222,7 +6221,7 @@ namespace { subcasesStack.clear(); currentSubcaseLevel = 0; } - + void test_case_reenter(const TestCaseData&) override { subcasesStack.clear(); } @@ -6905,7 +6904,7 @@ int Context::run() { DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_start, tc); p->timer.start(); - + bool run_test = true; do { @@ -6946,7 +6945,7 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP run_test = false; p->failure_flags |= TestCaseFailureReason::TooManyFailedAsserts; } - + if(!p->nextSubcaseStack.empty() && run_test) DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_reenter, tc); if(p->nextSubcaseStack.empty()) diff --git a/tests/c_unittests/qdr_doctest.hpp b/tests/c_unittests/qdr_doctest.hpp index 53ad3dd97..3eb0e57f4 100644 --- a/tests/c_unittests/qdr_doctest.hpp +++ b/tests/c_unittests/qdr_doctest.hpp @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/tests/c_unittests/test_connection_manager_static.cpp b/tests/c_unittests/test_connection_manager_static.cpp index d87e052f2..4035ec3f0 100644 --- a/tests/c_unittests/test_connection_manager_static.cpp +++ b/tests/c_unittests/test_connection_manager_static.cpp @@ -130,4 +130,4 @@ TEST_CASE("qd_dispatch_configure_ssl_profile") } qdr.deinitialize(); }).join(); -} \ No newline at end of file +} diff --git a/tests/c_unittests/test_terminus.cpp b/tests/c_unittests/test_terminus.cpp index 3c313ac9e..a620a0a05 100644 --- a/tests/c_unittests/test_terminus.cpp +++ b/tests/c_unittests/test_terminus.cpp @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/tests/compose_test.c b/tests/compose_test.c index 2ee6d56ad..84eb0bc13 100644 --- a/tests/compose_test.c +++ b/tests/compose_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -516,4 +516,3 @@ int compose_tests(void) return result; } - diff --git a/tests/config-0-empty/qdrouterd-empty.conf b/tests/config-0-empty/qdrouterd-empty.conf index 3f3946729..49e6e27f4 100644 --- a/tests/config-0-empty/qdrouterd-empty.conf +++ b/tests/config-0-empty/qdrouterd-empty.conf @@ -15,4 +15,4 @@ ## KIND, either express or implied. See the License for the ## specific language governing permissions and limitations ## under the License -## \ No newline at end of file +## diff --git a/tests/config-1/A.conf b/tests/config-1/A.conf index 4ade839e2..2aa605b9c 100644 --- a/tests/config-1/A.conf +++ b/tests/config-1/A.conf @@ -65,4 +65,3 @@ address { prefix: broadcast distribution: multicast } - diff --git a/tests/config-1/A.json b/tests/config-1/A.json index e6291c4ca..9918c562e 100644 --- a/tests/config-1/A.json +++ b/tests/config-1/A.json @@ -33,7 +33,7 @@ ## number of threads to 4. ## "workerThreads": 4, - + ## ## containerName - The name of the AMQP container. If not specified, ## the container name will be set to a value of the container's @@ -81,4 +81,3 @@ "distribution": "closest" }] ] - diff --git a/tests/config-2-broker/A.conf b/tests/config-2-broker/A.conf index ec3729ff2..6aa99d84d 100644 --- a/tests/config-2-broker/A.conf +++ b/tests/config-2-broker/A.conf @@ -120,4 +120,3 @@ log { module: ROUTER enable: trace+ } - diff --git a/tests/config-2-edge/INTB.conf b/tests/config-2-edge/INTB.conf index 9f111a213..885637016 100644 --- a/tests/config-2-edge/INTB.conf +++ b/tests/config-2-edge/INTB.conf @@ -45,4 +45,3 @@ listener { authenticatePeer: no saslMechanisms: ANONYMOUS } - diff --git a/tests/config-2/A.conf b/tests/config-2/A.conf index a645e98ea..9ab1dc8d8 100644 --- a/tests/config-2/A.conf +++ b/tests/config-2/A.conf @@ -85,4 +85,3 @@ log { module: ROUTER_HELLO enable: trace+ } - diff --git a/tests/config-2/B-ssl.conf.in b/tests/config-2/B-ssl.conf.in index e6312dc81..081c2d289 100644 --- a/tests/config-2/B-ssl.conf.in +++ b/tests/config-2/B-ssl.conf.in @@ -72,4 +72,3 @@ address { prefix: broadcast distribution: multicast } - diff --git a/tests/config-2/B.conf b/tests/config-2/B.conf index 3af5a88a5..5b892a247 100644 --- a/tests/config-2/B.conf +++ b/tests/config-2/B.conf @@ -84,4 +84,3 @@ log { module: ROUTER_HELLO enable: trace+ } - diff --git a/tests/config-2/ca-certificate.pem b/tests/config-2/ca-certificate.pem index 8e9df33aa..891ba2add 100644 --- a/tests/config-2/ca-certificate.pem +++ b/tests/config-2/ca-certificate.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: ca - localKeyID: 54 69 6D 65 20 31 33 39 31 36 34 30 31 39 36 34 32 32 + localKeyID: 54 69 6D 65 20 31 33 39 31 36 34 30 31 39 36 34 32 32 subject=/CN=Trusted.CA.com/O=Trust Me Inc. issuer=/CN=Trusted.CA.com/O=Trust Me Inc. -----BEGIN CERTIFICATE----- diff --git a/tests/config-2/client-private-key.pem b/tests/config-2/client-private-key.pem index 21435dada..475880859 100644 --- a/tests/config-2/client-private-key.pem +++ b/tests/config-2/client-private-key.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: client-certificate - localKeyID: 54 69 6D 65 20 31 33 39 31 36 34 30 31 39 38 31 37 34 + localKeyID: 54 69 6D 65 20 31 33 39 31 36 34 30 31 39 38 31 37 34 Key Attributes: -----BEGIN ENCRYPTED PRIVATE KEY----- MIIBljBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIhn/gf3lROH8CAggA diff --git a/tests/config-2/server-private-key.pem b/tests/config-2/server-private-key.pem index f56d8855c..342697483 100644 --- a/tests/config-2/server-private-key.pem +++ b/tests/config-2/server-private-key.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: server-certificate - localKeyID: 54 69 6D 65 20 31 33 39 31 36 34 30 31 39 36 38 36 35 + localKeyID: 54 69 6D 65 20 31 33 39 31 36 34 30 31 39 36 38 36 35 Key Attributes: -----BEGIN ENCRYPTED PRIVATE KEY----- MIIBnjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI2NNTxNMo7nsCAggA diff --git a/tests/config-3-linear/A.conf b/tests/config-3-linear/A.conf index dec78ad5e..08e798ce8 100644 --- a/tests/config-3-linear/A.conf +++ b/tests/config-3-linear/A.conf @@ -55,4 +55,3 @@ log { module: ROUTER_LS enable: trace+ } - diff --git a/tests/config-3-linear/topology.txt b/tests/config-3-linear/topology.txt index f0db8d36d..20ed43409 100644 --- a/tests/config-3-linear/topology.txt +++ b/tests/config-3-linear/topology.txt @@ -6,9 +6,9 @@ ;; to you under the Apache License, Version 2.0 (the ;; "License"); you may not use this file except in compliance ;; with the License. You may obtain a copy of the License at -;; +;; ;; http://www.apache.org/licenses/LICENSE-2.0 -;; +;; ;; Unless required by applicable law or agreed to in writing, ;; software distributed under the License is distributed on an ;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/tests/config-6/C.conf b/tests/config-6/C.conf index 6c8b0156e..998aa2592 100644 --- a/tests/config-6/C.conf +++ b/tests/config-6/C.conf @@ -55,5 +55,3 @@ log { module: ROUTER_MA enable: trace+ } - - diff --git a/tests/config-6/D.conf b/tests/config-6/D.conf index cc0161863..cddcbb0fd 100644 --- a/tests/config-6/D.conf +++ b/tests/config-6/D.conf @@ -47,5 +47,3 @@ log { module: ROUTER_MA enable: trace+ } - - diff --git a/tests/config-6/X.conf b/tests/config-6/X.conf index b7a8902b2..e754cdbf8 100644 --- a/tests/config-6/X.conf +++ b/tests/config-6/X.conf @@ -61,5 +61,3 @@ log { module: ROUTER_MA enable: trace+ } - - diff --git a/tests/config-6/topology.txt b/tests/config-6/topology.txt index 8d89a7cdf..24d1e6979 100644 --- a/tests/config-6/topology.txt +++ b/tests/config-6/topology.txt @@ -6,9 +6,9 @@ ;; to you under the Apache License, Version 2.0 (the ;; "License"); you may not use this file except in compliance ;; with the License. You may obtain a copy of the License at -;; +;; ;; http://www.apache.org/licenses/LICENSE-2.0 -;; +;; ;; Unless required by applicable law or agreed to in writing, ;; software distributed under the License is distributed on an ;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/tests/config-console/A.conf b/tests/config-console/A.conf index 47679bf2c..c9f7b77f5 100644 --- a/tests/config-console/A.conf +++ b/tests/config-console/A.conf @@ -42,4 +42,3 @@ listener { http: true saslMechanisms: ANONYMOUS } - diff --git a/tests/core_timer_test.c b/tests/core_timer_test.c index a85e4a771..c7fc55bea 100644 --- a/tests/core_timer_test.c +++ b/tests/core_timer_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -74,7 +74,7 @@ static char* test_core_timer(void *context) results[3] != 0 || results[4] != 1) return "Expected zero-length timer to fire once"; - + // // Test 1-timer // @@ -90,7 +90,7 @@ static char* test_core_timer(void *context) // Cancel 10-timer // qdr_core_timer_cancel_CT(core, timers[1]); - + // // Test 5-timer // @@ -186,4 +186,3 @@ int core_timer_tests(void) return result; } - diff --git a/tests/cpp-stub/addr_any.h b/tests/cpp-stub/addr_any.h index 43ad43912..a1e198284 100644 --- a/tests/cpp-stub/addr_any.h +++ b/tests/cpp-stub/addr_any.h @@ -48,7 +48,7 @@ class AddrAny { return get_func_addr(SHT_SYMTAB, STB_WEAK, func_name_regex_str, result); } - + int get_global_func_addr_dynsym( std::string func_name_regex_str, std::map& result) { return get_func_addr(SHT_DYNSYM, STB_GLOBAL, func_name_regex_str, result); @@ -57,7 +57,7 @@ class AddrAny { return get_func_addr(SHT_DYNSYM, STB_WEAK, func_name_regex_str, result); } - + private: bool demangle(std::string& s, std::string& name) { int status; @@ -88,7 +88,7 @@ class AddrAny char *pathname; size_t pathname_len; int match = 0; - + if(NULL == (fp = fopen("/proc/self/maps", "r"))) { return false; @@ -226,7 +226,7 @@ class AddrAny { return -1; } - + ELFIO::Elf_Half sec_num = reader.sections.size(); for(int i = 0; i < sec_num; ++i) { @@ -245,7 +245,7 @@ class AddrAny unsigned char type; ELFIO::Elf_Half section_index; unsigned char other; - + // Read symbol properties symbols.get_symbol( j, name, value, size, bind, type, section_index, other ); if(type == STT_FUNC && bind == stype) @@ -272,7 +272,7 @@ class AddrAny break; } } - + return count; } private: diff --git a/tests/cpp-stub/cpp_stub.h b/tests/cpp-stub/cpp_stub.h index a820a7a49..3709451d4 100644 --- a/tests/cpp-stub/cpp_stub.h +++ b/tests/cpp-stub/cpp_stub.h @@ -150,7 +150,7 @@ class Stub Stub() { #ifdef _WIN32 - SYSTEM_INFO sys_info; + SYSTEM_INFO sys_info; GetSystemInfo(&sys_info); m_pagesize = sys_info.dwPageSize; #else @@ -220,7 +220,7 @@ class Stub struct func_stub *pstub; pstub = new func_stub; //start - reset(fn); // + reset(fn); // pstub->fn = fn; if(distanceof(fn, fn_stub)) diff --git a/tests/cpp-stub/elfio.hpp b/tests/cpp-stub/elfio.hpp index 7099f276f..ef58231f8 100644 --- a/tests/cpp-stub/elfio.hpp +++ b/tests/cpp-stub/elfio.hpp @@ -4890,4 +4890,3 @@ class dump #endif // ELFIO_DUMP_HPP /*** End of inlined file: elfio_dump.hpp ***/ - diff --git a/tests/failoverlist_test.c b/tests/failoverlist_test.c index bf0647b71..64ed3e3fe 100644 --- a/tests/failoverlist_test.c +++ b/tests/failoverlist_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -162,4 +162,3 @@ int failoverlist_tests(void) return result; } - diff --git a/tests/field_test.c b/tests/field_test.c index 2a2e1e450..1f61ec57d 100644 --- a/tests/field_test.c +++ b/tests/field_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/tests/hash_test.c b/tests/hash_test.c index 652057559..c51752b26 100644 --- a/tests/hash_test.c +++ b/tests/hash_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY diff --git a/tests/message_test.c b/tests/message_test.c index bce7c5966..a544521a1 100644 --- a/tests/message_test.c +++ b/tests/message_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -1918,7 +1918,6 @@ static char *test_check_stream_data_partial(void *context) qd_message_free(out_msg2); return result; } - int message_tests(void) { @@ -1944,4 +1943,3 @@ int message_tests(void) return result; } - diff --git a/tests/parse_test.c b/tests/parse_test.c index cdc389b12..aa0f9ed1c 100644 --- a/tests/parse_test.c +++ b/tests/parse_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -731,4 +731,3 @@ int parse_tests(void) return result; } - diff --git a/tests/policy-1/test-policy-conf-includes-folder.conf.in b/tests/policy-1/test-policy-conf-includes-folder.conf.in index bd2e750a9..f93b7b2c8 100644 --- a/tests/policy-1/test-policy-conf-includes-folder.conf.in +++ b/tests/policy-1/test-policy-conf-includes-folder.conf.in @@ -37,4 +37,4 @@ policy { maxConnections: 10 enableVhostPolicy: true policyDir: ${CMAKE_CURRENT_BINARY_DIR}/policy-1 -} \ No newline at end of file +} diff --git a/tests/policy_test.c b/tests/policy_test.c index 48b26ace9..6925a5f46 100644 --- a/tests/policy_test.c +++ b/tests/policy_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -161,7 +161,7 @@ static char *test_link_name_tree_lookup(void *context) qd_parse_tree_free(node); qd_parse_tree_free(node2); qd_parse_tree_free(node3); - + return 0; } @@ -227,4 +227,3 @@ int policy_tests(void) return result; } - diff --git a/tests/proton_utils_tests.c b/tests/proton_utils_tests.c index a79ab2e08..e29fa508a 100644 --- a/tests/proton_utils_tests.c +++ b/tests/proton_utils_tests.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -100,4 +100,3 @@ int proton_utils_tests(void) return result; } - diff --git a/tests/run_unit_tests_size.c b/tests/run_unit_tests_size.c index 500b359b2..007b2247b 100644 --- a/tests/run_unit_tests_size.c +++ b/tests/run_unit_tests_size.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -125,4 +125,3 @@ int main(int argc, char** argv) return result; } - diff --git a/tests/ssl_certs/README b/tests/ssl_certs/README index 3be8be496..97b6fd66d 100644 --- a/tests/ssl_certs/README +++ b/tests/ssl_certs/README @@ -1,2 +1,2 @@ The certificates in this folder have been created using gencerts.sh which uses a combination of java keytool and openssl commands -gencerts_openssl.sh uses all openssl commands and no keytool commands. Do not use this file to generate the certs in this folder. It is only meant to give serve as an example of how to use openssl to generate certs. \ No newline at end of file +gencerts_openssl.sh uses all openssl commands and no keytool commands. Do not use this file to generate the certs in this folder. It is only meant to give serve as an example of how to use openssl to generate certs. diff --git a/tests/ssl_certs/bad-ca-certificate.pem b/tests/ssl_certs/bad-ca-certificate.pem index 1f01a23c2..4a0f5dfd3 100644 --- a/tests/ssl_certs/bad-ca-certificate.pem +++ b/tests/ssl_certs/bad-ca-certificate.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: bad-ca - localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 38 39 39 39 31 39 34 + localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 38 39 39 39 31 39 34 subject=/CN=Trusted.CA.com/O=Trust Me Inc. issuer=/CN=Trusted.CA.com/O=Trust Me Inc. -----BEGIN CERTIFICATE----- diff --git a/tests/ssl_certs/ca-certificate.pem b/tests/ssl_certs/ca-certificate.pem index e1dcfb42d..d87f12c56 100644 --- a/tests/ssl_certs/ca-certificate.pem +++ b/tests/ssl_certs/ca-certificate.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: ca - localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 38 39 39 38 35 36 36 + localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 38 39 39 38 35 36 36 subject=/CN=Trusted.CA.com/O=Trust Me Inc. issuer=/CN=Trusted.CA.com/O=Trust Me Inc. -----BEGIN CERTIFICATE----- diff --git a/tests/ssl_certs/client-private-key-no-pass.pem b/tests/ssl_certs/client-private-key-no-pass.pem index a45a7cd29..a07427fbb 100644 --- a/tests/ssl_certs/client-private-key-no-pass.pem +++ b/tests/ssl_certs/client-private-key-no-pass.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: client-certificate - localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 39 30 30 30 38 30 37 + localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 39 30 30 30 38 30 37 Key Attributes: -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC9snYob/F5+4l9 diff --git a/tests/ssl_certs/client-private-key.pem b/tests/ssl_certs/client-private-key.pem index abb7d5264..ce108d9d8 100644 --- a/tests/ssl_certs/client-private-key.pem +++ b/tests/ssl_certs/client-private-key.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: client-certificate - localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 39 30 30 30 38 30 37 + localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 39 30 30 30 38 30 37 Key Attributes: -----BEGIN ENCRYPTED PRIVATE KEY----- MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIpVB1qwawUjgCAggA diff --git a/tests/ssl_certs/gencerts.sh b/tests/ssl_certs/gencerts.sh index a7845e028..a7673a18f 100755 --- a/tests/ssl_certs/gencerts.sh +++ b/tests/ssl_certs/gencerts.sh @@ -50,4 +50,3 @@ keytool $KEYARGS -keystore ca.pkcs12 -storepass ca-password -alias ca -keypass c openssl pkcs12 -nocerts -passin pass:client-password -in client.pkcs12 -passout pass:client-password -out client-private-key.pem # Create a client private key without a password openssl pkcs12 -nocerts -passin pass:client-password -in client.pkcs12 -nodes -out client-private-key-no-pass.pem - diff --git a/tests/ssl_certs/gencerts_openssl.sh b/tests/ssl_certs/gencerts_openssl.sh index fedb3a648..6702ac745 100755 --- a/tests/ssl_certs/gencerts_openssl.sh +++ b/tests/ssl_certs/gencerts_openssl.sh @@ -75,4 +75,4 @@ openssl x509 -req -in client.csr -CA intermediate-ca-certificate.pem -CAkey inte # Verify the certs with the cert chain openssl verify -verbose -CAfile ca-chain-cert.pem server-certificate.pem openssl verify -verbose -CAfile ca-chain-cert.pem client-certificate.pem -openssl verify -verbose -CAfile ca-chain-cert.pem intermediate-ca-certificate.pem \ No newline at end of file +openssl verify -verbose -CAfile ca-chain-cert.pem intermediate-ca-certificate.pem diff --git a/tests/ssl_certs/server-private-key-no-pass.pem b/tests/ssl_certs/server-private-key-no-pass.pem index c29de7275..253dc5dbc 100644 --- a/tests/ssl_certs/server-private-key-no-pass.pem +++ b/tests/ssl_certs/server-private-key-no-pass.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: server-certificate - localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 38 39 39 39 35 33 38 + localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 38 39 39 39 35 33 38 Key Attributes: -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCSXksPE70eYVVl diff --git a/tests/ssl_certs/server-private-key.pem b/tests/ssl_certs/server-private-key.pem index 83ea74d07..f01247d10 100644 --- a/tests/ssl_certs/server-private-key.pem +++ b/tests/ssl_certs/server-private-key.pem @@ -1,6 +1,6 @@ Bag Attributes friendlyName: server-certificate - localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 38 39 39 39 35 33 38 + localKeyID: 54 69 6D 65 20 31 34 38 32 31 38 38 39 39 39 35 33 38 Key Attributes: -----BEGIN ENCRYPTED PRIVATE KEY----- MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIZaEZ9J0MiLgCAggA diff --git a/tests/ssl_certs/v3_ca.ext b/tests/ssl_certs/v3_ca.ext index 616de37a4..c604c1c39 100644 --- a/tests/ssl_certs/v3_ca.ext +++ b/tests/ssl_certs/v3_ca.ext @@ -1 +1 @@ -basicConstraints=critical, CA:true \ No newline at end of file +basicConstraints=critical, CA:true diff --git a/tests/test_case.h b/tests/test_case.h index ce3a3faf9..395d8f4d3 100644 --- a/tests/test_case.h +++ b/tests/test_case.h @@ -8,9 +8,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -31,6 +31,4 @@ typedef char* (*testcase_t)(void *context); printf("PASS\n"); \ } while(0); - #endif - diff --git a/tests/thread_test.c b/tests/thread_test.c index 3aa3ef139..75d57dc07 100644 --- a/tests/thread_test.c +++ b/tests/thread_test.c @@ -182,4 +182,3 @@ int thread_tests(void) return result; } - diff --git a/tests/tool_test.c b/tests/tool_test.c index 30edcf4e0..a00565b38 100644 --- a/tests/tool_test.c +++ b/tests/tool_test.c @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -367,4 +367,3 @@ int tool_tests(void) return result; } - diff --git a/tests/valgrind.supp b/tests/valgrind.supp index 8b1378917..e69de29bb 100644 --- a/tests/valgrind.supp +++ b/tests/valgrind.supp @@ -1 +0,0 @@ - diff --git a/tools/scraper/README.md b/tools/scraper/README.md index 85db015bd..a291a2f8b 100644 --- a/tools/scraper/README.md +++ b/tools/scraper/README.md @@ -4,8 +4,8 @@ Scraper provides two analysis modes: * Normal mode: combine logs and show details. * Split mode: split a single log into per-connection data and show details. - -Details are written to stdout in html format. + +Details are written to stdout in html format. ## Apache License, Version 2.0 @@ -43,14 +43,14 @@ From each log file Scraper extracts: * Transfer traffic * Message disposition * Flow and credit propagation - + Scraper sorts these facts with microsecond precision using the log timestamps. - + Then Scraper merges the data from any number (as long as that number is less than 27!) of independent log files into a single view. - + Next Scraper performs some higher-level analysis. - + * Routers are identified by letter rather than by the container name: 'A', 'B', and so on. Log data in a file is grouped into instances and is identified by a number for that router instance: 'A0', 'A1', and so on. @@ -58,11 +58,11 @@ From each log file Scraper extracts: * Connection data lists are searched to discover router-to-router and router-to-client connection pairs. * Per connection data are subdivided into per-session and per-link lists, sorting - the AMQP data into per-link-only views. This information is shown in the _Connection - Details_ section. Clicking on the lozenge will expand a connection into a view that + the AMQP data into per-link-only views. This information is shown in the _Connection + Details_ section. Clicking on the lozenge will expand a connection into a view that shows all the sessions. Clicking on a session lozenge will expand into a view that shows all the links. - + Each link shows a lozenge that will toggle the link data visibility and a hyperlink that will go to the link data. When the table of links is small and visible on one screen then it's easy to see what's going on. But when the table of links is large, @@ -70,13 +70,13 @@ From each log file Scraper extracts: When you click the lozenge you don't see the data. For larger data sets the usage rule is to first click the lozenge to expose the data, and then click the hyperlink go make the data visible. - + * For each link the first AMQP Attach is examined to discover the link's source or target address. All the addresses named in all the links are aggregated into a table. - + To view the link traffic first click the lozenge in the Link column to make the data visible and then click the hyperlinked link name to see the data. - + * Bulk AMQP data may be shown or hidden on arbitrary per-connection selections. Note: This feature is slow when a few tens of thousands of lines are being shown or hidden. @@ -158,7 +158,7 @@ and divides the connection data. Connection names include the router instance ID ## AMQP performative legend -Scraper decorates performative display lines with important AMQP values. +Scraper decorates performative display lines with important AMQP values. | Performative | Decorations | |--------------|---------------------------------------------------------------------| @@ -171,7 +171,7 @@ Scraper decorates performative display lines with important AMQP values. | flow | [channel, handle] (deliveryCount, linkCredit) | | transfer | [channel, handle] (deliveryId) .. [flags] length (settlement state) | | disposition | [channel] (role firstId-lastId settleFlags settleState) | - + ## Sequence generator @@ -205,7 +205,7 @@ in an acceptable order. * Enable router logging The routers need to generate proper logging for Scraper. -Expose the information in router logs that Scraper requires by +Expose the information in router logs that Scraper requires by enabling specific log levels for some of the router logging modules. | Log module and level | Information exposed in logs | @@ -240,7 +240,7 @@ enabling specific log levels for some of the router logging modules. usage: scraper.py [-h] [--skip-all-data] [--skip-detail] [--skip-msg-progress] [--split] [--time-start TIME_START] [--time-end TIME_END] [--files FILES [FILES ...]] - + optional arguments: -h, --help show this help message and exit --skip-all-data, -sa Max load shedding: do not store/index transfer, @@ -263,19 +263,19 @@ enabling specific log levels for some of the router logging modules. ### Switch --skip-all-data tools/scraper/scraper.py --skip-all-data -f FILE [FILE ...] - + With _--skip-all-data_ AMQP transfer, disposition, and flow frames in the log files are discarded. The resulting web page still includes lots of useful information with connection info, link name propagation, and link state analysis. ### Switch --skip-detail tools/scraper/scraper.py --skip-detail -f FILE [FILE ...] - + With _--skip-detail_ the display of per-connection, per-session, per-link tables is skipped. ### Switch --skip-msg-progress tools/scraper/scraper.py --skip-msg-progress -f FILE [FILE ...] - + With _--skip-msg-progress_ the display of transfer analysis tables is skipped. ### Advanced @@ -299,7 +299,7 @@ qpid-dispatch self test. * Wow, that's a lot of data Indeed it is and good luck figuring it out. Sometimes, though, it's too much. -The AMQP transfer data analysis is the worst offender in terms of CPU time, +The AMQP transfer data analysis is the worst offender in terms of CPU time, run-time memory usage, and monstrous html output files. Scraper provides command line switches to turn off sections of the data analysis.