From fffd075cf636ff008aa1044c0c2ea8abcb1e4071 Mon Sep 17 00:00:00 2001 From: Yves Martin Date: Sun, 11 Oct 2020 00:45:07 +0200 Subject: [PATCH] mosquitto: update to 1.6.12 (#4191) * mosquitto: update to 1.6.12 * fix configure options (similar to #4196) * changes not already commited on #4068 - updated libwebsockets - fix clock_gettime for arm5 and older ppc - install mosquitto_rr too - update icon * use current config file * support ppc853x by patch * Fix openssl install for CMake to detect it * fix make options #4210 * final fix for openssl 1.0.1 - remove openssl.cnf from PLIST as it was removed by using installed /etc/ssl/openssl.cnf Co-authored-by: hgy59 --- cross/c-ares/Makefile | 2 +- cross/libwebsockets/Makefile | 10 +- cross/libwebsockets/PLIST | 6 +- cross/libwebsockets/digests | 6 +- cross/mosquitto/Makefile | 14 +- cross/mosquitto/PLIST | 1 + cross/mosquitto/digests | 6 +- cross/mosquitto/patches/001-fix-prefix.patch | 26 +- .../patches/002-build-websockets.patch | 11 - ...use_of_unsupported-pthread-functions.patch | 20 + cross/openssl/Makefile | 2 +- cross/openssl/PLIST | 1 - mk/spksrc.cross-cmake-env.mk | 22 +- mk/spksrc.cross-cmake.mk | 9 +- spk/mosquitto/Makefile | 10 +- spk/mosquitto/src/mosquitto.conf | 706 +++++++++++------- spk/mosquitto/src/mosquitto.png | Bin 12140 -> 57143 bytes 17 files changed, 507 insertions(+), 345 deletions(-) delete mode 100644 cross/mosquitto/patches/002-build-websockets.patch create mode 100644 cross/mosquitto/patches/ppc853x/002-remove-use_of_unsupported-pthread-functions.patch diff --git a/cross/c-ares/Makefile b/cross/c-ares/Makefile index 31f094578ee..a95f77ba66b 100644 --- a/cross/c-ares/Makefile +++ b/cross/c-ares/Makefile @@ -12,7 +12,7 @@ COMMENT = c-ares is a C library that performs DNS requests and name resolves as LICENSE = GNU_CONFIGURE = 1 -CONFIGURE_ARGS = CFLAGS=$(TC_EXTRA_CFLAGS) +CONFIGURE_ARGS = CFLAGS="$(TC_EXTRA_CFLAGS)" include ../../mk/spksrc.cross-cc.mk diff --git a/cross/libwebsockets/Makefile b/cross/libwebsockets/Makefile index d1d9245a4f6..75b2e0be5ff 100644 --- a/cross/libwebsockets/Makefile +++ b/cross/libwebsockets/Makefile @@ -1,15 +1,15 @@ PKG_NAME = libwebsockets -PKG_VERS = 2.4.1 +PKG_VERS = 3.2.2 PKG_EXT = tar.gz PKG_DIST_NAME = v$(PKG_VERS).$(PKG_EXT) -PKG_DIST_FILE = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) PKG_DIST_SITE = https://github.com/warmcat/libwebsockets/archive +PKG_DIST_FILE = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) PKG_DIR = $(PKG_NAME)-$(PKG_VERS) DEPENDS = cross/openssl -HOMEPAGE = http://libevent.org/ -COMMENT = An event notification library -LICENSE = http://libevent.org/LICENSE.txt +HOMEPAGE = https://libwebsockets.org/ +COMMENT = Libwebsockets (LWS) is a flexible, lightweight pure C library for implementing modern network protocols easily with a tiny footprint, using a nonblocking event loop. +LICENSE = MIT include ../../mk/spksrc.cross-cmake.mk diff --git a/cross/libwebsockets/PLIST b/cross/libwebsockets/PLIST index f49c78f0feb..eb79c90906f 100644 --- a/cross/libwebsockets/PLIST +++ b/cross/libwebsockets/PLIST @@ -1,9 +1,7 @@ bin:bin/libwebsockets-test-client -bin:bin/libwebsockets-test-echo -bin:bin/libwebsockets-test-fraggle -bin:bin/libwebsockets-test-ping +bin:bin/libwebsockets-test-lejp bin:bin/libwebsockets-test-server bin:bin/libwebsockets-test-server-extpoll lnk:lib/libwebsockets.so -lib:lib/libwebsockets.so.12 +lib:lib/libwebsockets.so.15 rsc:share/libwebsockets-test-server diff --git a/cross/libwebsockets/digests b/cross/libwebsockets/digests index 3b875454fd2..8962988c0fb 100644 --- a/cross/libwebsockets/digests +++ b/cross/libwebsockets/digests @@ -1,3 +1,3 @@ -libwebsockets-2.4.1.tar.gz SHA1 0f7841014958b654efc595e96ddce13586f868e1 -libwebsockets-2.4.1.tar.gz SHA256 29414be4f79f6abc0e6aadccd09a4da0f0c431e3b5691f496acd081ae6a8240c -libwebsockets-2.4.1.tar.gz MD5 742c94e3fd255bb94735a87e86b1bdde +libwebsockets-3.2.2.tar.gz SHA1 96fbfa59ee6a0e9b2861d60c9a030463e0a28ea3 +libwebsockets-3.2.2.tar.gz SHA256 166d6e17cab64bfc10c2a71799c298284540a1fa63f6ea3de5caccb34502243c +libwebsockets-3.2.2.tar.gz MD5 a29a3e69d22bbb6aa33def7cb6d58c0a diff --git a/cross/mosquitto/Makefile b/cross/mosquitto/Makefile index 96562d024f8..7c870652f56 100755 --- a/cross/mosquitto/Makefile +++ b/cross/mosquitto/Makefile @@ -1,5 +1,5 @@ PKG_NAME = mosquitto -PKG_VERS = 1.4.14 +PKG_VERS = 1.6.12 PKG_EXT = tar.gz PKG_DIST_NAME = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) PKG_DIST_SITE = http://mosquitto.org/files/source @@ -7,10 +7,18 @@ PKG_DIR = $(PKG_NAME)-$(PKG_VERS) DEPENDS = cross/c-ares cross/openssl cross/util-linux cross/libwebsockets + HOMEPAGE = http://www.mosquitto.org/ -COMMENT = Mosquitto is an open source message broker that implements the MQ Telemetry Transport protocol version 3.1.1. -LICENSE = BSD licensed +COMMENT = Mosquitto is an open source message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. +LICENSE = EPL 1.0 and EDL 1.0 CONFIGURE_TARGET = nop +COMPILE_MAKE_OPTIONS = WITH_WEBSOCKETS=yes WITH_SRV=yes WITH_DOCS=no + +ifeq ($(findstring $(ARCH), 88f6281),$(ARCH)) +# use clock_gettime of librt +ADDITIONAL_LDFLAGS = -lrt +endif + include ../../mk/spksrc.cross-cc.mk diff --git a/cross/mosquitto/PLIST b/cross/mosquitto/PLIST index 271efc54675..bec0f8ea9c4 100755 --- a/cross/mosquitto/PLIST +++ b/cross/mosquitto/PLIST @@ -1,6 +1,7 @@ bin:sbin/mosquitto bin:bin/mosquitto_passwd bin:bin/mosquitto_pub +bin:bin/mosquitto_rr bin:bin/mosquitto_sub lnk:lib/libmosquitto.so lib:lib/libmosquitto.so.1 diff --git a/cross/mosquitto/digests b/cross/mosquitto/digests index 826009e6dc8..bede720a5b9 100644 --- a/cross/mosquitto/digests +++ b/cross/mosquitto/digests @@ -1,3 +1,3 @@ -mosquitto-1.4.14.tar.gz SHA1 7776c4433e80f74b56eb03e1ddd7e720d44b4947 -mosquitto-1.4.14.tar.gz SHA256 156b1fa731d12baad4b8b22f7b6a8af50ba881fc711b81e9919ec103cf2942d1 -mosquitto-1.4.14.tar.gz MD5 6b0966e93f118bc71ad7b61600a6c2d3 +mosquitto-1.6.12.tar.gz SHA1 b8c047985a33f3c2e9855079030f91d6eed00c47 +mosquitto-1.6.12.tar.gz SHA256 548d73d19fb787dd0530334e398fd256ef3a581181678488a741a995c4f007fb +mosquitto-1.6.12.tar.gz MD5 beb8d76d6e45f1e66d711006082a631f diff --git a/cross/mosquitto/patches/001-fix-prefix.patch b/cross/mosquitto/patches/001-fix-prefix.patch index 7d341e6492f..a03a6beeab3 100644 --- a/cross/mosquitto/patches/001-fix-prefix.patch +++ b/cross/mosquitto/patches/001-fix-prefix.patch @@ -1,19 +1,19 @@ ---- Makefile.orig 2017-12-02 16:02:12.391948436 +0100 -+++ Makefile 2017-12-02 16:03:32.141307039 +0100 -@@ -39,11 +39,11 @@ +--- Makefile.orig 2020-09-26 09:03:00.666733022 +0000 ++++ Makefile 2020-09-26 09:04:16.727992748 +0000 +@@ -85,11 +85,11 @@ ifeq ($(WITH_DOCS),yes) set -e; for d in ${DOCDIRS}; do $(MAKE) -C $${d} install; done endif -- $(INSTALL) -d ${DESTDIR}/etc/mosquitto -- $(INSTALL) -m 644 mosquitto.conf ${DESTDIR}/etc/mosquitto/mosquitto.conf.example -- $(INSTALL) -m 644 aclfile.example ${DESTDIR}/etc/mosquitto/aclfile.example -- $(INSTALL) -m 644 pwfile.example ${DESTDIR}/etc/mosquitto/pwfile.example -- $(INSTALL) -m 644 pskfile.example ${DESTDIR}/etc/mosquitto/pskfile.example -+ $(INSTALL) -d ${DESTDIR}${prefix}/etc/mosquitto -+ $(INSTALL) -m 644 mosquitto.conf ${DESTDIR}${prefix}/etc/mosquitto/mosquitto.conf.example -+ $(INSTALL) -m 644 aclfile.example ${DESTDIR}${prefix}/etc/mosquitto/aclfile.example -+ $(INSTALL) -m 644 pwfile.example ${DESTDIR}${prefix}/etc/mosquitto/pwfile.example -+ $(INSTALL) -m 644 pskfile.example ${DESTDIR}${prefix}/etc/mosquitto/pskfile.example +- $(INSTALL) -d "${DESTDIR}/etc/mosquitto" +- $(INSTALL) -m 644 mosquitto.conf "${DESTDIR}/etc/mosquitto/mosquitto.conf.example" +- $(INSTALL) -m 644 aclfile.example "${DESTDIR}/etc/mosquitto/aclfile.example" +- $(INSTALL) -m 644 pwfile.example "${DESTDIR}/etc/mosquitto/pwfile.example" +- $(INSTALL) -m 644 pskfile.example "${DESTDIR}/etc/mosquitto/pskfile.example" ++ $(INSTALL) -d "${DESTDIR}${prefix}/etc/mosquitto" ++ $(INSTALL) -m 644 mosquitto.conf "${DESTDIR}${prefix}/etc/mosquitto/mosquitto.conf.example" ++ $(INSTALL) -m 644 aclfile.example "${DESTDIR}${prefix}/etc/mosquitto/aclfile.example" ++ $(INSTALL) -m 644 pwfile.example "${DESTDIR}${prefix}/etc/mosquitto/pwfile.example" ++ $(INSTALL) -m 644 pskfile.example "${DESTDIR}${prefix}/etc/mosquitto/pskfile.example" uninstall : set -e; for d in ${DIRS}; do $(MAKE) -C $${d} uninstall; done diff --git a/cross/mosquitto/patches/002-build-websockets.patch b/cross/mosquitto/patches/002-build-websockets.patch deleted file mode 100644 index 63b1a5bafcf..00000000000 --- a/cross/mosquitto/patches/002-build-websockets.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- config.mk.orig 2015-05-07 13:21:22.000000000 +0000 -+++ config.mk 2015-05-30 08:33:45.728590937 +0000 -@@ -65,7 +65,7 @@ - WITH_UUID:=yes - - # Build with websockets support on the broker. --WITH_WEBSOCKETS:=no -+WITH_WEBSOCKETS:=yes - - # Use elliptic keys in broker - WITH_EC:=yes diff --git a/cross/mosquitto/patches/ppc853x/002-remove-use_of_unsupported-pthread-functions.patch b/cross/mosquitto/patches/ppc853x/002-remove-use_of_unsupported-pthread-functions.patch new file mode 100644 index 00000000000..8159e2999bb --- /dev/null +++ b/cross/mosquitto/patches/ppc853x/002-remove-use_of_unsupported-pthread-functions.patch @@ -0,0 +1,20 @@ +# since mosquitto 1.6.11 pthread_setname_np is required, but not supported with glibc < 2.12 +# this is for naming threads only as introduced with https://github.com/eclipse/mosquitto/commit/bd27935ff63613301e485c0ce9e7e9b4e67e6d07 +# and has no effect to the theading support in mosquitto. + +--- lib/thread_mosq.c.org 2020-08-19 13:55:03.000000000 +0000 ++++ lib/thread_mosq.c 2020-09-29 07:13:18.196407777 +0000 +@@ -41,13 +41,6 @@ + + mosq->threaded = mosq_ts_self; + if(!pthread_create(&mosq->thread_id, NULL, mosquitto__thread_main, mosq)){ +-#if defined(__linux__) +- pthread_setname_np(mosq->thread_id, "mosquitto loop"); +-#elif defined(__NetBSD__) +- pthread_setname_np(mosq->thread_id, "%s", "mosquitto loop"); +-#elif defined(__FreeBSD__) || defined(__OpenBSD__) +- pthread_set_name_np(mosq->thread_id, "mosquitto loop"); +-#endif + return MOSQ_ERR_SUCCESS; + }else{ + return MOSQ_ERR_ERRNO; diff --git a/cross/openssl/Makefile b/cross/openssl/Makefile index 5310d58a261..5d40ecfeb03 100644 --- a/cross/openssl/Makefile +++ b/cross/openssl/Makefile @@ -56,4 +56,4 @@ openssl_configure: .PHONY: openssl_install openssl_install: - $(RUN) $(MAKE) install_sw DESTDIR=$(INSTALL_DIR) + $(RUN) $(MAKE) install_sw INSTALL_PREFIX=$(INSTALL_DIR) diff --git a/cross/openssl/PLIST b/cross/openssl/PLIST index afb4a97ed47..117d70251c5 100644 --- a/cross/openssl/PLIST +++ b/cross/openssl/PLIST @@ -16,4 +16,3 @@ lnk:lib/libcrypto.so lib:lib/libcrypto.so.1.0.0 lnk:lib/libssl.so lib:lib/libssl.so.1.0.0 -rsc:openssl.cnf diff --git a/mk/spksrc.cross-cmake-env.mk b/mk/spksrc.cross-cmake-env.mk index 2420430ec4c..337fa26c32d 100644 --- a/mk/spksrc.cross-cmake-env.mk +++ b/mk/spksrc.cross-cmake-env.mk @@ -1,4 +1,4 @@ -# Configuration for cmake build +# Configuration for CMake build # CMAKE_ARGS += -DCMAKE_INSTALL_PREFIX=$(INSTALL_PREFIX) CMAKE_ARGS += -DCMAKE_CROSSCOMPILING=TRUE @@ -15,29 +15,29 @@ CMAKE_ARGS += -DBUILD_SHARED_LIBS=ON # set default ASM build environment ifeq ($(strip $(CMAKE_USE_NASM)),1) -DEPENDS += native/nasm -NASM_PATH = $(WORK_DIR)/../../../native/nasm/work-native/install/usr/local/bin -ENV += PATH=$(NASM_PATH):$$PATH -ENV += AS=$(NASM_PATH)/nasm -CMAKE_ARGS += -DENABLE_ASSEMBLY=ON + DEPENDS += native/nasm + NASM_PATH = $(WORK_DIR)/../../../native/nasm/work-native/install/usr/local/bin + ENV += PATH=$(NASM_PATH):$$PATH + ENV += AS=$(NASM_PATH)/nasm + CMAKE_ARGS += -DENABLE_ASSEMBLY=ON else -CMAKE_USE_NASM = 0 -CMAKE_ARGS += -DENABLE_ASSEMBLY=OFF + CMAKE_USE_NASM = 0 + CMAKE_ARGS += -DENABLE_ASSEMBLY=OFF endif # set default build directory ifeq ($(strip $(CMAKE_USE_DESTDIR)),) -CMAKE_USE_DESTDIR = 1 + CMAKE_USE_DESTDIR = 1 endif # set default build directory ifeq ($(strip $(CMAKE_DESTDIR)),) -CMAKE_DESTDIR = $(INSTALL_DIR) + CMAKE_DESTDIR = $(INSTALL_DIR) endif # set default build directory ifeq ($(strip $(CMAKE_BUILD_DIR)),) -CMAKE_BUILD_DIR = $(WORK_DIR)/$(PKG_DIR)/build + CMAKE_BUILD_DIR = $(WORK_DIR)/$(PKG_DIR)/build endif # Define per arch specific common options diff --git a/mk/spksrc.cross-cmake.mk b/mk/spksrc.cross-cmake.mk index 6e51a6a995c..85779f488d2 100644 --- a/mk/spksrc.cross-cmake.mk +++ b/mk/spksrc.cross-cmake.mk @@ -1,11 +1,8 @@ -# Build go programs -# +# Build CMake programs +# # prerequisites: # - cross/module depends on cmake -# -# remarks: -# - improvised from spksrc.cross-go.mk -# +# # Common makefiles include ../../mk/spksrc.common.mk diff --git a/spk/mosquitto/Makefile b/spk/mosquitto/Makefile index 50ead94fd37..5f620729c25 100755 --- a/spk/mosquitto/Makefile +++ b/spk/mosquitto/Makefile @@ -1,17 +1,17 @@ SPK_NAME = mosquitto -SPK_VERS = 1.4.14 -SPK_REV = 9 +SPK_VERS = 1.6.12 +SPK_REV = 10 SPK_ICON = src/mosquitto.png DEPENDS = cross/busybox cross/$(SPK_NAME) MAINTAINER = SynoCommunity -DESCRIPTION = Mosquitto is an open source message broker that implements the MQ Telemetry Transport protocol version 3.1.1. +DESCRIPTION = Mosquitto is an open source message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. RELOAD_UI = yes DISPLAY_NAME = Mosquitto STARTABLE = yes -CHANGELOG = "1. Update to 1.4.14. 2. Use DSM 5+6 generic service" +CHANGELOG = "Update to 1.6.12" HOMEPAGE = http://www.mosquitto.org/ -LICENSE = BSD licensed +LICENSE = EPL/EDL licensed SERVICE_USER = auto # SERVICE_COMMAND is provided there diff --git a/spk/mosquitto/src/mosquitto.conf b/spk/mosquitto/src/mosquitto.conf index 012044e6ab8..b350365d6c5 100644 --- a/spk/mosquitto/src/mosquitto.conf +++ b/spk/mosquitto/src/mosquitto.conf @@ -4,84 +4,136 @@ # # Default values are shown, uncomment to change. # -# Use the # character to indicate a comment, but only if it is the +# Use the # character to indicate a comment, but only if it is the # very first character on the line. # ================================================================= # General configuration # ================================================================= -# Time in seconds to wait before resending an outgoing QoS=1 or -# QoS=2 message. -#retry_interval 20 - -# Time in seconds between updates of the $SYS tree. -# Set to 0 to disable the publishing of the $SYS tree. -#sys_interval 10 +# Use per listener security settings. +# +# It is recommended this option be set before any other options. +# +# If this option is set to true, then all authentication and access control +# options are controlled on a per listener basis. The following options are +# affected: +# +# password_file acl_file psk_file auth_plugin auth_opt_* allow_anonymous +# auto_id_prefix allow_zero_length_clientid +# +# Note that if set to true, then a durable client (i.e. with clean session set +# to false) that has disconnected will use the ACL settings defined for the +# listener that it was most recently connected to. +# +# The default behaviour is for this to be set to false, which maintains the +# setting behaviour from previous versions of mosquitto. +#per_listener_settings false -# Time in seconds between cleaning the internal message store of -# unreferenced messages. Lower values will result in lower memory -# usage but more processor time, higher values will have the -# opposite effect. -# Setting a value of 0 means the unreferenced messages will be -# disposed of as quickly as possible. -#store_clean_interval 10 -# Write process id to a file. Default is a blank string which means -# a pid file shouldn't be written. -# This should be set to /var/run/mosquitto.pid if mosquitto is -# being run automatically on boot with an init script and -# start-stop-daemon or similar. -pid_file /var/packages/mosquitto/target/var/mosquitto.pid +# If a client is subscribed to multiple subscriptions that overlap, e.g. foo/# +# and foo/+/baz , then MQTT expects that when the broker receives a message on +# a topic that matches both subscriptions, such as foo/bar/baz, then the client +# should only receive the message once. +# Mosquitto keeps track of which clients a message has been sent to in order to +# meet this requirement. The allow_duplicate_messages option allows this +# behaviour to be disabled, which may be useful if you have a large number of +# clients subscribed to the same set of topics and are very concerned about +# minimising memory usage. +# It can be safely set to true if you know in advance that your clients will +# never have overlapping subscriptions, otherwise your clients must be able to +# correctly deal with duplicate messages even when then have QoS=2. +#allow_duplicate_messages false -# When run as root, drop privileges to this user and its primary -# group. -# Leave blank to stay as root, but this is not recommended. -# If run as a non-root user, this setting has no effect. -# Note that on Windows this has no effect and so mosquitto should -# be started by the user you wish it to run as. -#user mosquitto +# This option controls whether a client is allowed to connect with a zero +# length client id or not. This option only affects clients using MQTT v3.1.1 +# and later. If set to false, clients connecting with a zero length client id +# are disconnected. If set to true, clients will be allocated a client id by +# the broker. This means it is only useful for clients with clean session set +# to true. +#allow_zero_length_clientid true -# The maximum number of QoS 1 and 2 messages currently inflight per +# If allow_zero_length_clientid is true, this option allows you to set a prefix +# to automatically generated client ids to aid visibility in logs. +# Defaults to 'auto-' +#auto_id_prefix auto- + +# This option affects the scenario when a client subscribes to a topic that has +# retained messages. It is possible that the client that published the retained +# message to the topic had access at the time they published, but that access +# has been subsequently removed. If check_retain_source is set to true, the +# default, the source of a retained message will be checked for access rights +# before it is republished. When set to false, no check will be made and the +# retained message will always be published. This affects all listeners. +#check_retain_source true + +# QoS 1 and 2 messages will be allowed inflight per client until this limit +# is exceeded. Defaults to 0. (No maximum) +# See also max_inflight_messages +#max_inflight_bytes 0 + +# The maximum number of QoS 1 and 2 messages currently inflight per # client. -# This includes messages that are partway through handshakes and -# those that are being retried. Defaults to 20. Set to 0 for no -# maximum. Setting to 1 will guarantee in-order delivery of QoS 1 +# This includes messages that are partway through handshakes and +# those that are being retried. Defaults to 20. Set to 0 for no +# maximum. Setting to 1 will guarantee in-order delivery of QoS 1 # and 2 messages. #max_inflight_messages 20 -# The maximum number of QoS 1 and 2 messages to hold in a queue -# above those that are currently in-flight. Defaults to 100. Set +# For MQTT v5 clients, it is possible to have the server send a "server +# keepalive" value that will override the keepalive value set by the client. +# This is intended to be used as a mechanism to say that the server will +# disconnect the client earlier than it anticipated, and that the client should +# use the new keepalive value. The max_keepalive option allows you to specify +# that clients may only connect with keepalive less than or equal to this +# value, otherwise they will be sent a server keepalive telling them to use +# max_keepalive. This only applies to MQTT v5 clients. The maximum value +# allowable is 65535. Do not set below 10. +#max_keepalive 65535 + +# For MQTT v5 clients, it is possible to have the server send a "maximum packet +# size" value that will instruct the client it will not accept MQTT packets +# with size greater than max_packet_size bytes. This applies to the full MQTT +# packet, not just the payload. Setting this option to a positive value will +# set the maximum packet size to that number of bytes. If a client sends a +# packet which is larger than this value, it will be disconnected. This applies +# to all clients regardless of the protocol version they are using, but v3.1.1 +# and earlier clients will of course not have received the maximum packet size +# information. Defaults to no limit. Setting below 20 bytes is forbidden +# because it is likely to interfere with ordinary client operation, even with +# very small payloads. +#max_packet_size 0 + +# QoS 1 and 2 messages above those currently in-flight will be queued per +# client until this limit is exceeded. Defaults to 0. (No maximum) +# See also max_queued_messages. +# If both max_queued_messages and max_queued_bytes are specified, packets will +# be queued until the first limit is reached. +#max_queued_bytes 0 + +# The maximum number of QoS 1 and 2 messages to hold in a queue per client +# above those that are currently in-flight. Defaults to 100. Set # to 0 for no maximum (not recommended). # See also queue_qos0_messages. +# See also max_queued_bytes. #max_queued_messages 100 - -# Set to true to queue messages with QoS 0 when a persistent client is -# disconnected. These messages are included in the limit imposed by -# max_queued_messages. -# Defaults to false. -# This is a non-standard option for the MQTT v3.1 spec but is allowed in -# v3.1.1. -#queue_qos0_messages false +# +# This option sets the maximum number of heap memory bytes that the broker will +# allocate, and hence sets a hard limit on memory use by the broker. Memory +# requests that exceed this value will be denied. The effect will vary +# depending on what has been denied. If an incoming message is being processed, +# then the message will be dropped and the publishing client will be +# disconnected. If an outgoing message is being sent, then the individual +# message will be dropped and the receiving client will be disconnected. +# Defaults to no limit. +#memory_limit 0 # This option sets the maximum publish payload size that the broker will allow. # Received messages that exceed this size will not be accepted by the broker. # The default value is 0, which means that all valid MQTT messages are -# accepted. MQTT imposes a maximum payload size of 268435455 bytes. +# accepted. MQTT imposes a maximum payload size of 268435455 bytes. #message_size_limit 0 -# This option controls whether a client is allowed to connect with a zero -# length client id or not. This option only affects clients using MQTT v3.1.1 -# and later. If set to false, clients connecting with a zero length client id -# are disconnected. If set to true, clients will be allocated a client id by -# the broker. This means it is only useful for clients with clean session set -# to true. -#allow_zero_length_clientid true - -# If allow_zero_length_clientid is true, this option allows you to set a prefix -# to automatically generated client ids to aid visibility in logs. -#auto_id_prefix - # This option allows persistent clients (those with clean session set to false) # to be removed if they do not reconnect within a certain time frame. # @@ -101,19 +153,34 @@ pid_file /var/packages/mosquitto/target/var/mosquitto.pid # The default if not set is to never expire persistent clients. #persistent_client_expiration -# If a client is subscribed to multiple subscriptions that overlap, e.g. foo/# -# and foo/+/baz , then MQTT expects that when the broker receives a message on -# a topic that matches both subscriptions, such as foo/bar/baz, then the client -# should only receive the message once. -# Mosquitto keeps track of which clients a message has been sent to in order to -# meet this requirement. The allow_duplicate_messages option allows this -# behaviour to be disabled, which may be useful if you have a large number of -# clients subscribed to the same set of topics and are very concerned about -# minimising memory usage. -# It can be safely set to true if you know in advance that your clients will -# never have overlapping subscriptions, otherwise your clients must be able to -# correctly deal with duplicate messages even when then have QoS=2. -#allow_duplicate_messages false +# Write process id to a file. Default is a blank string which means +# a pid file shouldn't be written. +# This should be set to /var/run/mosquitto.pid if mosquitto is +# being run automatically on boot with an init script and +# start-stop-daemon or similar. +pid_file /var/packages/mosquitto/target/var/mosquitto.pid + +# Set to true to queue messages with QoS 0 when a persistent client is +# disconnected. These messages are included in the limit imposed by +# max_queued_messages and max_queued_bytes +# Defaults to false. +# This is a non-standard option for the MQTT v3.1 spec but is allowed in +# v3.1.1. +#queue_qos0_messages false + +# Set to false to disable retained message support. If a client publishes a +# message with the retain bit set, it will be disconnected if this is set to +# false. +#retain_available true + +# Disable Nagle's algorithm on client sockets. This has the effect of reducing +# latency of individual messages at the potential cost of increasing the number +# of packets being sent. +#set_tcp_nodelay false + +# Time in seconds between updates of the $SYS tree. +# Set to 0 to disable the publishing of the $SYS tree. +#sys_interval 10 # The MQTT specification requires that the QoS of a message delivered to a # subscriber is never upgraded to match the QoS of the subscription. Enabling @@ -122,12 +189,20 @@ pid_file /var/packages/mosquitto/target/var/mosquitto.pid # This is a non-standard option explicitly disallowed by the spec. #upgrade_outgoing_qos false +# When run as root, drop privileges to this user and its primary +# group. +# Set to root to stay as root, but this is not recommended. +# If run as a non-root user, this setting has no effect. +# Note that on Windows this has no effect and so mosquitto should +# be started by the user you wish it to run as. +#user mosquitto + # ================================================================= # Default listener # ================================================================= # IP address/hostname to bind the default listener to. If not -# given, the default listener will not be bound to a specific +# given, the default listener will not be bound to a specific # address and so will be accessible to all network interfaces. # bind_address ip-address/host name #bind_address @@ -135,11 +210,25 @@ pid_file /var/packages/mosquitto/target/var/mosquitto.pid # Port to use for the default listener. port 1883 -# The maximum number of client connections to allow. This is +# Bind the listener to a specific interface. This is similar to +# bind_address above but is useful when an interface has multiple addresses or +# the address may change. It is valid to use this with the bind_address option, +# but take care that the interface you are binding to contains the address you +# are binding to, otherwise you will not be able to connect. +# Example: bind_interface eth0 +#bind_interface + +# When a listener is using the websockets protocol, it is possible to serve +# http data as well. Set http_dir to a directory which contains the files you +# wish to serve. If this option is not specified, then no normal http +# connections will be possible. +#http_dir + +# The maximum number of client connections to allow. This is # a per listener setting. # Default is -1, which means unlimited connections. -# Note that other process limits mean that unlimited connections -# are not really possible. Typically the default maximum number of +# Note that other process limits mean that unlimited connections +# are not really possible. Typically the default maximum number of # connections possible is around 1024. #max_connections -1 @@ -150,12 +239,6 @@ port 1883 # only the cafile, certfile, keyfile and ciphers options are supported. #protocol mqtt -# When a listener is using the websockets protocol, it is possible to serve -# http data as well. Set http_dir to a directory which contains the files you -# wish to serve. If this option is not specified, then no normal http -# connections will be possible. -#http_dir - # Set use_username_as_clientid to true to replace the clientid that a client # connected with with its username. This allows authentication to be tied to # the clientid, which means that it is possible to prevent one client @@ -169,21 +252,21 @@ port 1883 # ----------------------------------------------------------------- # Certificate based SSL/TLS support # ----------------------------------------------------------------- -# The following options can be used to enable SSL/TLS support for +# The following options can be used to enable SSL/TLS support for # this listener. Note that the recommended port for MQTT over TLS # is 8883, but this must be set manually. # # See also the mosquitto-tls man page. -# At least one of cafile or capath must be defined. They both -# define methods of accessing the PEM encoded Certificate -# Authority certificates that have signed your server certificate +# At least one of cafile or capath must be defined. They both +# define methods of accessing the PEM encoded Certificate +# Authority certificates that have signed your server certificate # and that you wish to trust. # cafile defines the path to a file containing the CA certificates. # capath defines a directory that will be searched for files # containing the CA certificates. For capath to work correctly, the # certificate files must have ".crt" as the file ending and you must run -# "c_rehash " each time you add/remove a certificate. +# "openssl rehash " each time you add/remove a certificate. #cafile #capath @@ -193,12 +276,24 @@ port 1883 # Path to the PEM encoded keyfile. #keyfile -# This option defines the version of the TLS protocol to use for this listener. -# The default value allows v1.2, v1.1 and v1.0, if they are all supported by -# the version of openssl that the broker was compiled against. For openssl >= -# 1.0.1 the valid values are tlsv1.2 tlsv1.1 and tlsv1. For openssl < 1.0.1 the -# valid values are tlsv1. -#tls_version + +# If you have require_certificate set to true, you can create a certificate +# revocation list file to revoke access to particular client certificates. If +# you have done this, use crlfile to point to the PEM encoded revocation file. +#crlfile + +# If you wish to control which encryption ciphers are used, use the ciphers +# option. The list of available ciphers can be obtained using the "openssl +# ciphers" command and should be provided in the same format as the output of +# that command. +# If unset defaults to DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:@STRENGTH +#ciphers DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:@STRENGTH + +# To allow the use of ephemeral DH key exchange, which provides forward +# security, the listener must load DH parameters. This can be specified with +# the dhparamfile option. The dhparamfile can be generated with the command +# e.g. "openssl dhparam -out dhparam.pem 2048" +#dhparamfile # By default a TLS enabled listener will operate in a similar fashion to a # https enabled web server, in that the server has a certificate signed by a CA @@ -209,22 +304,23 @@ port 1883 # outside of the mechanisms provided by MQTT. #require_certificate false +# This option defines the version of the TLS protocol to use for this listener. +# The default value allows all of v1.3, v1.2 and v1.1. The valid values are +# tlsv1.3 tlsv1.2 and tlsv1.1. +#tls_version + # If require_certificate is true, you may set use_identity_as_username to true # to use the CN value from the client certificate as a username. If this is # true, the password_file option will not be used for this listener. +# This takes priority over use_subject_as_username. +# See also use_subject_as_username. #use_identity_as_username false -# If you have require_certificate set to true, you can create a certificate -# revocation list file to revoke access to particular client certificates. If -# you have done this, use crlfile to point to the PEM encoded revocation file. -#crlfile - -# If you wish to control which encryption ciphers are used, use the ciphers -# option. The list of available ciphers can be optained using the "openssl -# ciphers" command and should be provided in the same format as the output of -# that command. -# If unset defaults to DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:@STRENGTH -#ciphers DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2:@STRENGTH +# If require_certificate is true, you may set use_subject_as_username to true +# to use the complete subject value from the client certificate as a username. +# If this is true, the password_file option will not be used for this listener. +# See also use_identity_as_username +#use_subject_as_username false # ----------------------------------------------------------------- # Pre-shared-key based SSL/TLS support @@ -245,42 +341,60 @@ port 1883 # used or create a security plugin to handle them. #psk_hint +# When using PSK, the encryption ciphers used will be chosen from the list of +# available PSK ciphers. If you want to control which ciphers are available, +# use the "ciphers" option. The list of available ciphers can be obtained +# using the "openssl ciphers" command and should be provided in the same format +# as the output of that command. +#ciphers + # Set use_identity_as_username to have the psk identity sent by the client used # as its username. Authentication will be carried out using the PSK rather than # the MQTT username/password and so password_file will not be used for this # listener. #use_identity_as_username false -# When using PSK, the encryption ciphers used will be chosen from the list of -# available PSK ciphers. If you want to control which ciphers are available, -# use the "ciphers" option. The list of available ciphers can be optained -# using the "openssl ciphers" command and should be provided in the same format -# as the output of that command. -#ciphers # ================================================================= # Extra listeners # ================================================================= -# Listen on a port/ip address combination. By using this variable -# multiple times, mosquitto can listen on more than one port. If -# this variable is used and neither bind_address nor port given, +# Listen on a port/ip address combination. By using this variable +# multiple times, mosquitto can listen on more than one port. If +# this variable is used and neither bind_address nor port given, # then the default listener will not be started. -# The port number to listen on must be given. Optionally, an ip -# address or host name may be supplied as a second argument. In -# this case, mosquitto will attempt to bind the listener to that -# address and so restrict access to the associated network and +# The port number to listen on must be given. Optionally, an ip +# address or host name may be supplied as a second argument. In +# this case, mosquitto will attempt to bind the listener to that +# address and so restrict access to the associated network and # interface. By default, mosquitto will listen on all interfaces. # Note that for a websockets listener it is not possible to bind to a host # name. # listener port-number [ip address/host name] #listener -# The maximum number of client connections to allow. This is +# Bind the listener to a specific interface. This is similar to +# the [ip address/host name] part of the listener definition, but is useful +# when an interface has multiple addresses or the address may change. It is +# valid to use this with the [ip address/host name] part of the listener +# definition, but take care that the interface you are binding to contains the +# address you are binding to, otherwise you will not be able to connect. +# Only available on Linux and requires elevated privileges. +# +# Example: bind_interface eth0 +#bind_interface + +# When a listener is using the websockets protocol, it is possible to serve +# http data as well. Set http_dir to a directory which contains the files you +# wish to serve. If this option is not specified, then no normal http +# connections will be possible. +#http_dir + +# The maximum number of client connections to allow. This is # a per listener setting. # Default is -1, which means unlimited connections. -# Note that other process limits mean that unlimited connections -# are not really possible. Typically the default maximum number of +# Note that other process limits mean that unlimited connections +# are not really possible. Typically the default maximum number of # connections possible is around 1024. #max_connections -1 @@ -296,12 +410,6 @@ port 1883 # cafile, certfile, keyfile and ciphers options are supported. #protocol mqtt -# When a listener is using the websockets protocol, it is possible to serve -# http data as well. Set http_dir to a directory which contains the files you -# wish to serve. If this option is not specified, then no normal http -# connections will be possible. -#http_dir - # Set use_username_as_clientid to true to replace the clientid that a client # connected with with its username. This allows authentication to be tied to # the clientid, which means that it is possible to prevent one client @@ -312,6 +420,13 @@ port 1883 # See also use_identity_as_username. #use_username_as_clientid +# Change the websockets headers size. This is a global option, it is not +# possible to set per listener. This option sets the size of the buffer used in +# the libwebsockets library when reading HTTP headers. If you are passing large +# header data such as cookies then you may need to increase this value. If left +# unset, or set to 0, then the default of 1024 bytes will be used. +#websockets_headers_size + # ----------------------------------------------------------------- # Certificate based SSL/TLS support # ----------------------------------------------------------------- @@ -331,7 +446,7 @@ port 1883 # capath defines a directory that will be searched for files # containing the CA certificates. For capath to work correctly, the # certificate files must have ".crt" as the file ending and you must run -# "c_rehash " each time you add/remove a certificate. +# "openssl rehash " each time you add/remove a certificate. #cafile #capath @@ -341,6 +456,24 @@ port 1883 # Path to the PEM encoded keyfile. #keyfile + +# If you wish to control which encryption ciphers are used, use the ciphers +# option. The list of available ciphers can be optained using the "openssl +# ciphers" command and should be provided in the same format as the output of +# that command. +#ciphers + +# If you have require_certificate set to true, you can create a certificate +# revocation list file to revoke access to particular client certificates. If +# you have done this, use crlfile to point to the PEM encoded revocation file. +#crlfile + +# To allow the use of ephemeral DH key exchange, which provides forward +# security, the listener must load DH parameters. This can be specified with +# the dhparamfile option. The dhparamfile can be generated with the command +# e.g. "openssl dhparam -out dhparam.pem 2048" +#dhparamfile + # By default an TLS enabled listener will operate in a similar fashion to a # https enabled web server, in that the server has a certificate signed by a CA # and the client will verify that it is a trusted certificate. The overall aim @@ -355,17 +488,6 @@ port 1883 # true, the password_file option will not be used for this listener. #use_identity_as_username false -# If you have require_certificate set to true, you can create a certificate -# revocation list file to revoke access to particular client certificates. If -# you have done this, use crlfile to point to the PEM encoded revocation file. -#crlfile - -# If you wish to control which encryption ciphers are used, use the ciphers -# option. The list of available ciphers can be optained using the "openssl -# ciphers" command and should be provided in the same format as the output of -# that command. -#ciphers - # ----------------------------------------------------------------- # Pre-shared-key based SSL/TLS support # ----------------------------------------------------------------- @@ -385,12 +507,6 @@ port 1883 # used or create a security plugin to handle them. #psk_hint -# Set use_identity_as_username to have the psk identity sent by the client used -# as its username. Authentication will be carried out using the PSK rather than -# the MQTT username/password and so password_file will not be used for this -# listener. -#use_identity_as_username false - # When using PSK, the encryption ciphers used will be chosen from the list of # available PSK ciphers. If you want to control which ciphers are available, # use the "ciphers" option. The list of available ciphers can be optained @@ -398,15 +514,22 @@ port 1883 # as the output of that command. #ciphers +# Set use_identity_as_username to have the psk identity sent by the client used +# as its username. Authentication will be carried out using the PSK rather than +# the MQTT username/password and so password_file will not be used for this +# listener. +#use_identity_as_username false + + # ================================================================= # Persistence # ================================================================= -# If persistence is enabled, save the in-memory database to disk -# every autosave_interval seconds. If set to 0, the persistence +# If persistence is enabled, save the in-memory database to disk +# every autosave_interval seconds. If set to 0, the persistence # database will only be written when mosquitto exits. See also # autosave_on_changes. -# Note that writing of the persistence database can be forced by +# Note that writing of the persistence database can be forced by # sending mosquitto a SIGUSR1 signal. #autosave_interval 1800 @@ -418,13 +541,13 @@ port 1883 #autosave_on_changes false # Save persistent message data to disk (true/false). -# This saves information about all messages, including -# subscriptions, currently in-flight messages and retained +# This saves information about all messages, including +# subscriptions, currently in-flight messages and retained # messages. # retained_persistence is a synonym for this option. #persistence false -# The filename to use for the persistent database, not including +# The filename to use for the persistent database, not including # the path. #persistence_file mosquitto.db @@ -438,17 +561,17 @@ port 1883 # Logging # ================================================================= -# Places to log to. Use multiple log_dest lines for multiple +# Places to log to. Use multiple log_dest lines for multiple # logging destinations. # Possible destinations are: stdout stderr syslog topic file # # stdout and stderr log to the console on the named output. # -# syslog uses the userspace syslog facility which usually ends up +# syslog uses the userspace syslog facility which usually ends up # in /var/log/messages or similar. # -# topic logs to the broker topic '$SYS/broker/log/', -# where severity is one of D, E, W, N, I, M which are debug, error, +# topic logs to the broker topic '$SYS/broker/log/', +# where severity is one of D, E, W, N, I, M which are debug, error, # warning, notice, information and message. Message type severity is used by # the subscribe/unsubscribe log_types and publishes log messages to # $SYS/broker/log/M/susbcribe or $SYS/broker/log/M/unsubscribe. @@ -463,15 +586,9 @@ port 1883 # Use "log_dest none" if you wish to disable logging. #log_dest stderr -# If using syslog logging (not on Windows), messages will be logged to the -# "daemon" facility by default. Use the log_facility option to choose which of -# local0 to local7 to log to instead. The option value should be an integer -# value, e.g. "log_facility 5" to use local5. -#log_facility - # Types of messages to log. Use multiple log_type lines for logging # multiple types of messages. -# Possible types are: debug, error, warning, notice, information, +# Possible types are: debug, error, warning, notice, information, # none, subscribe, unsubscribe, websockets, all. # Note that debug type messages are for decoding the incoming/outgoing # network packets. They are not logged in "topics". @@ -480,62 +597,57 @@ port 1883 #log_type notice #log_type information -# Change the websockets logging level. This is a global option, it is not -# possible to set per listener. This is an integer that is interpreted by -# libwebsockets as a bit mask for its lws_log_levels enum. See the -# libwebsockets documentation for more details. "log_type websockets" must also -# be enabled. -#websockets_log_level 0 # If set to true, client connection and disconnection messages will be included # in the log. #connection_messages true +# If using syslog logging (not on Windows), messages will be logged to the +# "daemon" facility by default. Use the log_facility option to choose which of +# local0 to local7 to log to instead. The option value should be an integer +# value, e.g. "log_facility 5" to use local5. +#log_facility + # If set to true, add a timestamp value to each log message. #log_timestamp true +# Set the format of the log timestamp. If left unset, this is the number of +# seconds since the Unix epoch. +# This is a free text string which will be passed to the strftime function. To +# get an ISO 8601 datetime, for example: +# log_timestamp_format %Y-%m-%dT%H:%M:%S +#log_timestamp_format + +# Change the websockets logging level. This is a global option, it is not +# possible to set per listener. This is an integer that is interpreted by +# libwebsockets as a bit mask for its lws_log_levels enum. See the +# libwebsockets documentation for more details. "log_type websockets" must also +# be enabled. +#websockets_log_level 0 + + # ================================================================= # Security # ================================================================= -# If set, only clients that have a matching prefix on their -# clientid will be allowed to connect to the broker. By default, +# If set, only clients that have a matching prefix on their +# clientid will be allowed to connect to the broker. By default, # all clients may connect. # For example, setting "secure-" here would mean a client "secure- # client" could connect but another with clientid "mqtt" couldn't. #clientid_prefixes -# Boolean value that determines whether clients that connect -# without providing a username are allowed to connect. If set to -# false then a password file should be created (see the -# password_file option) to control authenticated client access. -# Defaults to true. -#allow_anonymous true - -# In addition to the clientid_prefixes, allow_anonymous and TLS -# authentication options, username based authentication is also -# possible. The default support is described in "Default -# authentication and topic access control" below. The auth_plugin -# allows another authentication method to be used. -# Specify the path to the loadable plugin and see the -# "Authentication and topic access plugin options" section below. -#auth_plugin - -# If auth_plugin_deny_special_chars is true, the default, then before an ACL -# check is made, the username/client id of the client needing the check is -# searched for the presence of either a '+' or '#' character. If either of -# these characters is found in either the username or client id, then the ACL -# check is denied before it is sent to the plugin.o +# Boolean value that determines whether clients that connect +# without providing a username are allowed to connect. If set to +# false then a password file should be created (see the +# password_file option) to control authenticated client access. # -# This check prevents the case where a malicious user could circumvent an ACL -# check by using one of these characters as their username or client id. This -# is the same issue as was reported with mosquitto itself as CVE-2017-7650. +# Defaults to true if no other security options are set. If `password_file` or +# `psk_file` is set, or if an authentication plugin is loaded which implements +# username/password or TLS-PSK checks, then `allow_anonymous` defaults to +# false. # -# If you are entirely sure that the plugin you are using is not vulnerable to -# this attack (i.e. if you never use usernames or client ids in topics) then -# you can disable this extra check and have all ACL checks delivered to your -# plugin by setting auth_plugin_deny_special_chars to false. -#auth_plugin_deny_special_chars true +#allow_anonymous true # ----------------------------------------------------------------- # Default authentication and topic access control @@ -547,11 +659,12 @@ port 1883 # plain text passwords are used, in which case the file should be a text file # with lines in the format: # username:password -# The password (and colon) may be omitted if desired, although this +# The password (and colon) may be omitted if desired, although this # offers very little in the way of security. -# +# # See the TLS client require_certificate and use_identity_as_username options -# for alternative authentication options. +# for alternative authentication options. If an auth_plugin is used as well as +# password_file, the auth_plugin check will be made first. #password_file # Access may also be controlled using a pre-shared-key file. This requires @@ -559,6 +672,7 @@ port 1883 # lines in the format: # identity:key # The key should be in hexadecimal format without a leading "0x". +# If an auth_plugin is used as well, the auth_plugin check will be made first. #psk_file # Control access to topics on the broker using an access control list @@ -569,14 +683,14 @@ port 1883 # Topic access is added with lines of the format: # # topic [read|write|readwrite] -# +# # The access type is controlled using "read", "write" or "readwrite". This # parameter is optional (unless contains a space character) - if not # given then the access is read/write. can contain the + or # # wildcards as in subscriptions. -# +# # The first set of topics are applied to anonymous clients, assuming -# allow_anonymous is true. User specific topic ACLs are added after a +# allow_anonymous is true. User specific topic ACLs are added after a # user line as follows: # # user @@ -608,18 +722,31 @@ port 1883 # # pattern write sensor/%u/data # +# If an auth_plugin is used as well as acl_file, the auth_plugin check will be +# made first. #acl_file # ----------------------------------------------------------------- -# Authentication and topic access plugin options +# External authentication and topic access plugin options # ----------------------------------------------------------------- +# External authentication and access control can be supported with the +# auth_plugin option. This is a path to a loadable plugin. See also the +# auth_opt_* options described below. +# +# The auth_plugin option can be specified multiple times to load multiple +# plugins. The plugins will be processed in the order that they are specified +# here. If the auth_plugin option is specified alongside either of +# password_file or acl_file then the plugin checks will be made first. +# +#auth_plugin + # If the auth_plugin option above is used, define options to pass to the # plugin here as described by the plugin instructions. All options named # using the format auth_opt_* will be passed to the plugin, for example: # # auth_opt_db_host -# auth_opt_db_port +# auth_opt_db_port # auth_opt_db_username # auth_opt_db_password @@ -632,21 +759,29 @@ port 1883 # Create a new bridge using the "connection" option as described below. Set # options for the bridges using the remaining parameters. You must specify the # address and at least one topic to subscribe to. +# # Each connection must have a unique name. +# # The address line may have multiple host address and ports specified. See # below in the round_robin description for more details on bridge behaviour if -# multiple addresses are used. -# The direction that the topic will be shared can be chosen by -# specifying out, in or both, where the default value is out. +# multiple addresses are used. Note that if you use an IPv6 address, then you +# are required to specify a port. +# +# The direction that the topic will be shared can be chosen by +# specifying out, in or both, where the default value is out. # The QoS level of the bridged communication can be specified with the next # topic option. The default QoS level is 0, to change the QoS the topic # direction must also be given. +# # The local and remote prefix options allow a topic to be remapped when it is # bridged to/from the remote broker. This provides the ability to place a topic -# tree in an appropriate location. +# tree in an appropriate location. +# # For more details see the mosquitto.conf man page. -# Multiple topics can be specified per connection, but be careful +# +# Multiple topics can be specified per connection, but be careful # not to create any loops. +# # If you are using bridges with cleansession set to false (the default), then # you may get unexpected behaviour from incoming topics if you change what # topics you are subscribing to. This is because the remote broker keeps the @@ -657,9 +792,6 @@ port 1883 #address [:] [[:]] #topic [[[out | in | both] qos-level] local-prefix remote-prefix] -# Set the version of the MQTT protocol to use with for this bridge. Can be one -# of mqttv31 or mqttv311. Defaults to mqttv31. -#bridge_protocol_version mqttv31 # If a bridge has topics that have "out" direction, the default behaviour is to # send an unsubscribe request to the remote broker on that topic. This means @@ -669,56 +801,93 @@ port 1883 # the unsubscribe request. #bridge_attempt_unsubscribe true -# If the bridge has more than one address given in the address/addresses -# configuration, the round_robin option defines the behaviour of the bridge on -# a failure of the bridge connection. If round_robin is false, the default -# value, then the first address is treated as the main bridge connection. If -# the connection fails, the other secondary addresses will be attempted in -# turn. Whilst connected to a secondary bridge, the bridge will periodically -# attempt to reconnect to the main bridge until successful. -# If round_robin is true, then all addresses are treated as equals. If a -# connection fails, the next address will be tried and if successful will -# remain connected until it fails -#round_robin false +# Set the version of the MQTT protocol to use with for this bridge. Can be one +# of mqttv311 or mqttv11. Defaults to mqttv311. +#bridge_protocol_version mqttv311 -# Set the client id to use on the remote end of this bridge connection. If not -# defined, this defaults to 'name.hostname' where name is the connection name -# and hostname is the hostname of this computer. -# This replaces the old "clientid" option to avoid confusion. "clientid" -# remains valid for the time being. -#remote_clientid +# Set the clean session variable for this bridge. +# When set to true, when the bridge disconnects for any reason, all +# messages and subscriptions will be cleaned up on the remote +# broker. Note that with cleansession set to true, there may be a +# significant amount of retained messages sent when the bridge +# reconnects after losing its connection. +# When set to false, the subscriptions and messages are kept on the +# remote broker, and delivered when the bridge reconnects. +#cleansession false + +# Set the amount of time a bridge using the lazy start type must be idle before +# it will be stopped. Defaults to 60 seconds. +#idle_timeout 60 + +# Set the keepalive interval for this bridge connection, in +# seconds. +#keepalive_interval 60 # Set the clientid to use on the local broker. If not defined, this defaults to # 'local.'. If you are bridging a broker to itself, it is important # that local_clientid and clientid do not match. #local_clientid -# Set the clean session variable for this bridge. -# When set to true, when the bridge disconnects for any reason, all -# messages and subscriptions will be cleaned up on the remote -# broker. Note that with cleansession set to true, there may be a -# significant amount of retained messages sent when the bridge -# reconnects after losing its connection. -# When set to false, the subscriptions and messages are kept on the -# remote broker, and delivered when the bridge reconnects. -#cleansession false - # If set to true, publish notification messages to the local and remote brokers # giving information about the state of the bridge connection. Retained # messages are published to the topic $SYS/broker/connection//state # unless the notification_topic option is used. # If the message is 1 then the connection is active, or 0 if the connection has # failed. +# This uses the last will and testament feature. #notifications true # Choose the topic on which notification messages for this bridge are # published. If not set, messages are published on the topic # $SYS/broker/connection//state -#notification_topic +#notification_topic -# Set the keepalive interval for this bridge connection, in -# seconds. -#keepalive_interval 60 +# Set the client id to use on the remote end of this bridge connection. If not +# defined, this defaults to 'name.hostname' where name is the connection name +# and hostname is the hostname of this computer. +# This replaces the old "clientid" option to avoid confusion. "clientid" +# remains valid for the time being. +#remote_clientid + +# Set the password to use when connecting to a broker that requires +# authentication. This option is only used if remote_username is also set. +# This replaces the old "password" option to avoid confusion. "password" +# remains valid for the time being. +#remote_password + +# Set the username to use when connecting to a broker that requires +# authentication. +# This replaces the old "username" option to avoid confusion. "username" +# remains valid for the time being. +#remote_username + +# Set the amount of time a bridge using the automatic start type will wait +# until attempting to reconnect. +# This option can be configured to use a constant delay time in seconds, or to +# use a backoff mechanism based on "Decorrelated Jitter", which adds a degree +# of randomness to when the restart occurs. +# +# Set a constant timeout of 20 seconds: +# restart_timeout 20 +# +# Set backoff with a base (start value) of 10 seconds and a cap (upper limit) of +# 60 seconds: +# restart_timeout 10 30 +# +# Defaults to jitter with a base of 5 and cap of 30 +#restart_timeout 5 30 + +# If the bridge has more than one address given in the address/addresses +# configuration, the round_robin option defines the behaviour of the bridge on +# a failure of the bridge connection. If round_robin is false, the default +# value, then the first address is treated as the main bridge connection. If +# the connection fails, the other secondary addresses will be attempted in +# turn. Whilst connected to a secondary bridge, the bridge will periodically +# attempt to reconnect to the main bridge until successful. +# If round_robin is true, then all addresses are treated as equals. If a +# connection fails, the next address will be tried and if successful will +# remain connected until it fails +#round_robin false # Set the start type of the bridge. This controls how the bridge starts and # can be one of three types: automatic, lazy and once. Note that RSMB provides @@ -738,14 +907,6 @@ port 1883 # broker starts but will not be restarted if the connection fails. #start_type automatic -# Set the amount of time a bridge using the automatic start type will wait -# until attempting to reconnect. Defaults to 30 seconds. -#restart_timeout 30 - -# Set the amount of time a bridge using the lazy start type must be idle before -# it will be stopped. Defaults to 60 seconds. -#idle_timeout 60 - # Set the number of messages that need to be queued for a bridge with lazy # start type to be restarted. Defaults to 10 messages. # Must be less than max_queued_messages. @@ -759,18 +920,6 @@ port 1883 # properly. #try_private true -# Set the username to use when connecting to a broker that requires -# authentication. -# This replaces the old "username" option to avoid confusion. "username" -# remains valid for the time being. -#remote_username - -# Set the password to use when connecting to a broker that requires -# authentication. This option is only used if remote_username is also set. -# This replaces the old "password" option to avoid confusion. "password" -# remains valid for the time being. -#remote_password - # ----------------------------------------------------------------- # Certificate based SSL/TLS support # ----------------------------------------------------------------- @@ -781,16 +930,16 @@ port 1883 # certificate. # bridge_capath defines a directory that will be searched for files containing # the CA certificates. For bridge_capath to work correctly, the certificate -# files must have ".crt" as the file ending and you must run "c_rehash " each time you add/remove a certificate. +# files must have ".crt" as the file ending and you must run "openssl rehash +# " each time you add/remove a certificate. #bridge_cafile #bridge_capath -# Path to the PEM encoded client certificate, if required by the remote broker. -#bridge_certfile -# Path to the PEM encoded client private key, if required by the remote broker. -#bridge_keyfile +# If the remote broker has more than one protocol available on its port, e.g. +# MQTT and WebSockets, then use bridge_alpn to configure which protocol is +# requested. Note that WebSockets support for bridges is not yet available. +#bridge_alpn # When using certificate based encryption, bridge_insecure disables # verification of the server hostname in the server certificate. This can be @@ -801,6 +950,12 @@ port 1883 # point using encryption. #bridge_insecure false +# Path to the PEM encoded client certificate, if required by the remote broker. +#bridge_certfile + +# Path to the PEM encoded client private key, if required by the remote broker. +#bridge_keyfile + # ----------------------------------------------------------------- # PSK based SSL/TLS support # ----------------------------------------------------------------- @@ -818,20 +973,15 @@ port 1883 # External config files # ================================================================= -# External configuration files may be included by using the +# External configuration files may be included by using the # include_dir option. This defines a directory that will be searched # for config files. All files that end in '.conf' will be loaded as # a configuration file. It is best to have this as the last option # in the main file. This option will only be processed from the main -# configuration file. The directory specified must not contain the +# configuration file. The directory specified must not contain the # main configuration file. +# Files within include_dir will be loaded sorted in case-sensitive +# alphabetical order, with capital letters ordered first. If this option is +# given multiple times, all of the files from the first instance will be +# processed before the next instance. See the man page for examples. #include_dir - -# ================================================================= -# rsmb options - unlikely to ever be supported -# ================================================================= - -#ffdc_output -#max_log_entries -#trace_level -#trace_output diff --git a/spk/mosquitto/src/mosquitto.png b/spk/mosquitto/src/mosquitto.png index 35d9ab7ae1875a3ac83c2960c1fd245cb1e91040..ac1bc34a22b911d73a46608825f44cfe0c6446c9 100755 GIT binary patch literal 57143 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

Q3vQh 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