reset upstream subtrees to yocto 2.6

Reset the following subtrees on thud HEAD:

  poky: 87e3a9739d
  meta-openembedded: 6094ae18c8
  meta-security: 31dc4e7532
  meta-raspberrypi: a48743dc36
  meta-xilinx: c42016e2e6

Also re-apply backports that didn't make it into thud:
  poky:
    17726d0 systemd-systemctl-native: handle Install wildcards

  meta-openembedded:
    4321a5d libtinyxml2: update to 7.0.1
    042f0a3 libcereal: Add native and nativesdk classes
    e23284f libcereal: Allow empty package
    030e8d4 rsyslog: curl-less build with fmhttp PACKAGECONFIG
    179a1b9 gtest: update to 1.8.1

Squashed OpenBMC subtree compatibility updates:
  meta-aspeed:
    Brad Bishop (1):
          aspeed: add yocto 2.6 compatibility

  meta-ibm:
    Brad Bishop (1):
          ibm: prepare for yocto 2.6

  meta-ingrasys:
    Brad Bishop (1):
          ingrasys: set layer compatibility to yocto 2.6

  meta-openpower:
    Brad Bishop (1):
          openpower: set layer compatibility to yocto 2.6

  meta-phosphor:
    Brad Bishop (3):
          phosphor: set layer compatibility to thud
          phosphor: libgpg-error: drop patches
          phosphor: react to fitimage artifact rename

    Ed Tanous (4):
          Dropbear: upgrade options for latest upgrade
          yocto2.6: update openssl options
          busybox: remove upstream watchdog patch
          systemd: Rebase CONFIG_CGROUP_BPF patch

Change-Id: I7b1fe71cca880d0372a82d94b5fd785323e3a9e7
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/hostapd-CVE-2018-14526.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/hostapd-CVE-2018-14526.patch
new file mode 100644
index 0000000..522fc39
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/hostapd-CVE-2018-14526.patch
@@ -0,0 +1,44 @@
+hostapd-2.6: Fix CVE-2018-14526
+
+[No upstream tracking] -- https://w1.fi/security/2018-1/unauthenticated-eapol-key-decryption.txt
+
+wpa: Ignore unauthenticated encrypted EAPOL-Key data
+
+Ignore unauthenticated encrypted EAPOL-Key data in supplicant
+processing. When using WPA2, these are frames that have the Encrypted
+flag set, but not the MIC flag.
+
+When using WPA2, EAPOL-Key frames that had the Encrypted flag set but
+not the MIC flag, had their data field decrypted without first verifying
+the MIC. In case the data field was encrypted using RC4 (i.e., when
+negotiating TKIP as the pairwise cipher), this meant that
+unauthenticated but decrypted data would then be processed. An adversary
+could abuse this as a decryption oracle to recover sensitive information
+in the data field of EAPOL-Key messages (e.g., the group key).
+
+Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/src/rsn_supp/wpa.c?id=3e34cfdff6b192fe337c6fb3f487f73e96582961]
+CVE: CVE-2018-14526
+Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
+
+diff --git a/src/rsn_supp/wpa.c b/src/rsn_supp/wpa.c
+index 3c47879..6bdf923 100644
+--- a/src/rsn_supp/wpa.c
++++ b/src/rsn_supp/wpa.c
+@@ -2016,6 +2016,17 @@ int wpa_sm_rx_eapol(struct wpa_sm *sm, const u8 *src_addr,
+
+ 	if ((sm->proto == WPA_PROTO_RSN || sm->proto == WPA_PROTO_OSEN) &&
+ 	    (key_info & WPA_KEY_INFO_ENCR_KEY_DATA)) {
++		/*
++		 * Only decrypt the Key Data field if the frame's authenticity
++		 * was verified. When using AES-SIV (FILS), the MIC flag is not
++		 * set, so this check should only be performed if mic_len != 0
++		 * which is the case in this code branch.
++		 */
++		if (!(key_info & WPA_KEY_INFO_MIC)) {
++			wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
++				"WPA: Ignore EAPOL-Key with encrypted but unauthenticated data");
++			goto out;
++		}
+ 		if (wpa_supplicant_decrypt_key_data(sm, key, ver, key_data,
+ 						    &key_data_len))
+ 			goto out;
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.6.bb
index 250add8..42aae42 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.6.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.6.bb
@@ -18,6 +18,7 @@
     file://0005-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch \
     file://0006-TDLS-Reject-TPK-TK-reconfiguration.patch \
     file://0007-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch \
+    file://hostapd-CVE-2018-14526.patch \
 "
 
 SRC_URI[md5sum] = "eaa56dce9bd8f1d195eb62596eab34c7"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.bb b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.1.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.1.bb
index f95240f..11748cb 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/krb5/krb5_1.16.1.bb
@@ -14,8 +14,8 @@
 HOMEPAGE = "http://web.mit.edu/Kerberos/"
 SECTION = "console/network"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${S}/../NOTICE;md5=59b8da652f07186b44782a8454574f30"
-DEPENDS = "ncurses util-linux e2fsprogs e2fsprogs-native openssl"
+LIC_FILES_CHKSUM = "file://${S}/../NOTICE;md5=7f95bc3d8d0351aa481d56d5e9de20c3"
+DEPENDS = "bison-native ncurses util-linux e2fsprogs e2fsprogs-native openssl"
 
 inherit autotools-brokensep binconfig perlnative systemd update-rc.d
 
@@ -31,8 +31,8 @@
            file://krb5-kdc.service \
            file://krb5-admin-server.service \
 "
-SRC_URI[md5sum] = "23c5e9f07642db4a67f7a5b6168b1319"
-SRC_URI[sha256sum] = "faeb125f83b0fb4cdb2f99f088140631bb47d975982de0956d18c85842969e08"
+SRC_URI[md5sum] = "848e9b80d6aaaa798e3f3df24b83c407"
+SRC_URI[sha256sum] = "214ffe394e3ad0c730564074ec44f1da119159d94281bbec541dc29168d21117"
 
 CVE_PRODUCT = "kerberos"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.24.bb b/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.24.bb
index 5e0f3a5..a5838d3 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.24.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.24.bb
@@ -9,8 +9,6 @@
 SRC_URI[md5sum] = "94459a5a22db041dec6f98424d6efe54"
 SRC_URI[sha256sum] = "973593d3479abdf657674a55afe5f78624b0e440614e2b8cb3a07f16d4d7f821"
 
-S = "${WORKDIR}/${PN}-${PV}"
-
 inherit autotools
 
 EXTRA_OECONF += "--with-pic"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/inline-without-definition.patch b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/inline-without-definition.patch
deleted file mode 100644
index 9a7895f..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/files/inline-without-definition.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Fix link error with gcc 5 toolchains
-
- afc.c:258: error: undefined reference to 'debug_buffer'
- collect2: error: ld returned 1 exit status
-
-debug.h header was declaring things inline without providing a definition.
-Files that included this header then failed to link against the corresponding
-external symbol in debug.c, because the linker took the 'inline' keyword
-seriously rather than ignoring it.
-
---- libimobiledevice-1.1.4/src/debug.h.orig	2015-10-03 16:24:08.758740386 -0700
-+++ libimobiledevice-1.1.4/src/debug.h	2015-10-03 16:24:22.706740355 -0700
-@@ -44,14 +44,14 @@
- #define debug_plist(a)
- #endif
- 
--LIBIMOBILEDEVICE_INTERNAL inline void debug_info_real(const char *func,
-+LIBIMOBILEDEVICE_INTERNAL void debug_info_real(const char *func,
- 											const char *file,
- 											int	line,
- 											const char *format, ...);
- 
--LIBIMOBILEDEVICE_INTERNAL inline void debug_buffer(const char *data, const int length);
--LIBIMOBILEDEVICE_INTERNAL inline void debug_buffer_to_file(const char *file, const char *data, const int length);
--LIBIMOBILEDEVICE_INTERNAL inline void debug_plist_real(const char *func,
-+LIBIMOBILEDEVICE_INTERNAL void debug_buffer(const char *data, const int length);
-+LIBIMOBILEDEVICE_INTERNAL void debug_buffer_to_file(const char *file, const char *data, const int length);
-+LIBIMOBILEDEVICE_INTERNAL void debug_plist_real(const char *func,
- 											const char *file,
- 											int	line,
- 											plist_t plist);
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_1.1.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_1.1.4.bb
deleted file mode 100644
index 32aca96..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_1.1.4.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-SUMMARY = "A protocol library to access an iPhone or iPod Touch in Linux"
-LICENSE = "GPLv2 & LGPLv2.1"
-LIC_FILES_CHKSUM = "\
-    file://COPYING;md5=ebb5c50ab7cab4baeffba14977030c07 \
-    file://COPYING.LESSER;md5=6ab17b41640564434dda85c06b7124f7 \
-"
-
-HOMEPAGE ="http://www.libimobiledevice.org/"
-
-DEPENDS = "libplist usbmuxd libtasn1 gnutls libgcrypt"
-
-SRC_URI = " \
-    http://www.libimobiledevice.org/downloads/libimobiledevice-${PV}.tar.bz2 \
-    file://configure-fix-largefile.patch \
-    file://inline-without-definition.patch \
-"
-
-SRC_URI[md5sum] = "3f28cbc6a2e30d34685049c0abde5183"
-SRC_URI[sha256sum] = "67499cfaa6172f566ee6b0783605acffe484fb7ddc3b09881ab7ac58667ee5b8"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = " --without-cython "
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_git.bb
new file mode 100644
index 0000000..908b98d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libimobiledevice/libimobiledevice_git.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A protocol library to access an iPhone or iPod Touch in Linux"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "\
+    file://COPYING;md5=ebb5c50ab7cab4baeffba14977030c07 \
+    file://COPYING.LESSER;md5=6ab17b41640564434dda85c06b7124f7 \
+"
+
+HOMEPAGE ="http://www.libimobiledevice.org/"
+
+DEPENDS = "libplist usbmuxd libusbmuxd libtasn1 gnutls libgcrypt"
+
+SRCREV = "fb71aeef10488ed7b0e60a1c8a553193301428c0"
+PV = "1.2.0+git${SRCPV}"
+SRC_URI = "\
+    git://github.com/libimobiledevice/libimobiledevice;protocol=https \
+    file://configure-fix-largefile.patch \
+"
+
+S = "${WORKDIR}/git"
+inherit autotools pkgconfig
+
+EXTRA_OECONF = " --without-cython "
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.14.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.16.0.bb
similarity index 82%
rename from meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.14.0.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.16.0.bb
index f89ef9d..5260c0f 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.14.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.16.0.bb
@@ -14,5 +14,5 @@
 SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BPN}-${PV}.tar.xz \
            file://clang.patch \
 "
-SRC_URI[md5sum] = "2ed809e65c85353d3ab59e372890e549"
-SRC_URI[sha256sum] = "ca8d52a95a18cbabae8f15f83f1572316e888b6504f946e6645d24405127ab5b"
+SRC_URI[md5sum] = "76ea4d8381989919b1d9b91c818fed80"
+SRC_URI[sha256sum] = "c8ca50beeddd4b43309df5b698917268303bf176cea58fe4fe53d5bf0e93fac2"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp/0001-include-sys-select.h-for-fd_-definitions.patch b/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp/0001-include-sys-select.h-for-fd_-definitions.patch
deleted file mode 100644
index 15aa94e..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp/0001-include-sys-select.h-for-fd_-definitions.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 94e9a082d76414f82794b0c9817d0c24e3868275 Mon Sep 17 00:00:00 2001
-From: Kylie McClain <somasis@exherbo.org>
-Date: Sat, 21 May 2016 21:24:36 -0400
-Subject: [PATCH] ndptool: Fix compilation on musl libc
-
-FD_ZERO, fd_set, etc are defined within sys/select.h on musl.
-
-Signed-off-by: Kylie McClain <somasis@exherbo.org>
-Signed-off-by: Jiri Pirko <jiri@mellanox.com>
----
- utils/ndptool.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/utils/ndptool.c b/utils/ndptool.c
-index 1d96f4c..96479fa 100644
---- a/utils/ndptool.c
-+++ b/utils/ndptool.c
-@@ -28,6 +28,7 @@
- #include <arpa/inet.h>
- #include <errno.h>
- #include <ndp.h>
-+#include <sys/select.h>
- 
- enum verbosity_level {
- 	VERB1,
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.7.bb
similarity index 70%
rename from meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.6.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.7.bb
index 5148798..07a7a1d 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.6.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libndp/libndp_1.7.bb
@@ -4,10 +4,9 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
 
 SRC_URI = "git://github.com/jpirko/libndp \
-           file://0001-include-sys-select.h-for-fd_-definitions.patch \
            "
 # tag for v1.6
-SRCREV = "2f721c4ff519f38f46695a60d9f9d88f35bf3c1d"
+SRCREV = "96674e7d4f4d569c2c961e865cc16152dfab5f09"
 S = "${WORKDIR}/git"
 
 inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb b/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb
index dfc2049..c991344 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libnet/libnet_1.2-rc3.bb
@@ -15,6 +15,9 @@
 SRC_URI[md5sum] = "f051e6e5bdecddb90f77c701c2ca1804"
 SRC_URI[sha256sum] = "72c380785ad44183005e654b47cc12485ee0228d7fa6b0a87109ff7614be4a63"
 
+UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/libnet-dev/files/"
+UPSTREAM_CHECK_REGEX = "libnet-(?P<pver>\d+(\.\d+)+-*[a-z]*\d*)\.tar"
+
 S = "${WORKDIR}/${BPN}-${PV}"
 
 inherit autotools binconfig
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi/0001-qmi-network-Don-t-create-invalid-wds-start-network-w.patch b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi/0001-qmi-network-Don-t-create-invalid-wds-start-network-w.patch
new file mode 100644
index 0000000..d230d68
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi/0001-qmi-network-Don-t-create-invalid-wds-start-network-w.patch
@@ -0,0 +1,41 @@
+From 8269f4d86927fbe19e78776a12736680fe9169b6 Mon Sep 17 00:00:00 2001
+From: Adrian Bunk <bunk@stusta.de>
+Date: Mon, 1 Oct 2018 16:53:31 +0300
+Subject: [PATCH] qmi-network: Don't create invalid --wds-start-network when
+ APN is not set
+
+In 1.20.2 the warning for this was turned into an error.
+
+(cherry picked from commit 289d8ad6419895e2e1fba3d78a54a0db65da521d)
+---
+Upstream-Status: Backport
+
+ utils/qmi-network.in | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/utils/qmi-network.in b/utils/qmi-network.in
+index bf7bed9..a9e5299 100755
+--- a/utils/qmi-network.in
++++ b/utils/qmi-network.in
+@@ -334,11 +334,13 @@ start_network ()
+ 
+     setup_data_format
+ 
+-    START_NETWORK_ARGS="apn='$APN'"
+-    if [ -n "$APN_USER" ]; then
+-        START_NETWORK_ARGS="${START_NETWORK_ARGS},username='$APN_USER'"
+-        if [ -n "$APN_PASS" ]; then
+-            START_NETWORK_ARGS="${START_NETWORK_ARGS},password='$APN_PASS'"
++    if [ -n "$APN" ]; then
++        START_NETWORK_ARGS="apn='$APN'"
++        if [ -n "$APN_USER" ]; then
++            START_NETWORK_ARGS="${START_NETWORK_ARGS},username='$APN_USER'"
++            if [ -n "$APN_PASS" ]; then
++                START_NETWORK_ARGS="${START_NETWORK_ARGS},password='$APN_PASS'"
++            fi
+         fi
+     fi
+ 
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.2.bb
similarity index 60%
rename from meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.0.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.2.bb
index 9301cbd..f0bc81c 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.20.2.bb
@@ -7,12 +7,17 @@
     file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
 "
 
-DEPENDS = "glib-2.0 libgudev libmbim glib-2.0-native"
+DEPENDS = "glib-2.0 glib-2.0-native"
 
 inherit autotools pkgconfig bash-completion
 
 SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BPN}-${PV}.tar.xz \
+           file://0001-qmi-network-Don-t-create-invalid-wds-start-network-w.patch \
            file://0001-Detect-clang.patch \
            "
-SRC_URI[md5sum] = "797e365521df76b77b067e6317618b41"
-SRC_URI[sha256sum] = "21428cd3749c56246565123f707fee51238651a22c60bdc85ebce97388626eb4"
+SRC_URI[md5sum] = "584214476ab75c394160cb85fbccaa1d"
+SRC_URI[sha256sum] = "c73459ca8bfe1213f8047858d4946fc1f58e164d4f488a7a6904edee25e2ca44"
+
+PACKAGECONFIG ??= "udev mbim"
+PACKAGECONFIG[udev] = ",--without-udev,libgudev"
+PACKAGECONFIG[mbim] = "--enable-mbim-qmux,--disable-mbim-qmux,libmbim"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/don-t-run-code-while-configuring-package.patch b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/don-t-run-code-while-configuring-package.patch
index 79d4f29..8d8867a 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/don-t-run-code-while-configuring-package.patch
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent/don-t-run-code-while-configuring-package.patch
@@ -4,91 +4,25 @@
 Upstream-Status: Pending
 Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
 
-Index: libtorrent-0.13.3/scripts/checks.m4
+Index: git/scripts/common.m4
 ===================================================================
---- libtorrent-0.13.3.orig/scripts/checks.m4	2012-05-14 14:17:04.000000000 +0300
-+++ libtorrent-0.13.3/scripts/checks.m4	2013-02-10 15:28:37.414445524 +0200
-@@ -95,40 +95,6 @@
-
- AC_DEFUN([TORRENT_CHECK_KQUEUE_SOCKET_ONLY], [
-   AC_MSG_CHECKING(whether kqueue supports pipes and ptys)
--
--  AC_RUN_IFELSE([AC_LANG_SOURCE([
--      #include <fcntl.h>
--      #include <stdlib.h>
--      #include <unistd.h>
--      #include <sys/event.h>
--      #include <sys/time.h>
--      int main() {
--        struct kevent ev@<:@2@:>@, ev_out@<:@2@:>@;
--        struct timespec ts = { 0, 0 };
--        int pfd@<:@2@:>@, pty@<:@2@:>@, kfd, n;
--        char buffer@<:@9001@:>@;
--        if (pipe(pfd) == -1) return 1;
--        if (fcntl(pfd@<:@1@:>@, F_SETFL, O_NONBLOCK) == -1) return 2;
--        while ((n = write(pfd@<:@1@:>@, buffer, sizeof(buffer))) == sizeof(buffer));
--        if ((pty@<:@0@:>@=posix_openpt(O_RDWR | O_NOCTTY)) == -1) return 3;
--        if ((pty@<:@1@:>@=grantpt(pty@<:@0@:>@)) == -1) return 4;
--        EV_SET(ev+0, pfd@<:@1@:>@, EVFILT_WRITE, EV_ADD | EV_ENABLE, 0, 0, NULL);
--        EV_SET(ev+1, pty@<:@1@:>@, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, NULL);
--        if ((kfd = kqueue()) == -1) return 5;
--        if ((n = kevent(kfd, ev, 2, NULL, 0, NULL)) == -1) return 6;
--        if (ev_out@<:@0@:>@.flags & EV_ERROR) return 7;
--        if (ev_out@<:@1@:>@.flags & EV_ERROR) return 8;
--        read(pfd@<:@0@:>@, buffer, sizeof(buffer));
--        if ((n = kevent(kfd, NULL, 0, ev_out, 2, &ts)) < 1) return 9;
--        return 0;
--      }
--      ])],
--    [
--      AC_MSG_RESULT(yes)
--    ], [
--      AC_DEFINE(KQUEUE_SOCKET_ONLY, 1, kqueue only supports sockets.)
--      AC_MSG_RESULT(no)
--    ])
- ])
-
- AC_DEFUN([TORRENT_WITH_KQUEUE], [
-Index: libtorrent-0.13.3/scripts/common.m4
-===================================================================
---- libtorrent-0.13.3.orig/scripts/common.m4	2012-05-14 14:17:04.000000000 +0300
-+++ libtorrent-0.13.3/scripts/common.m4	2013-02-10 15:27:55.874446741 +0200
-@@ -222,38 +222,10 @@
-
+--- git.orig/scripts/common.m4
++++ git/scripts/common.m4
+@@ -153,7 +153,7 @@ dnl   Need to fix this so that it uses t
  AC_DEFUN([TORRENT_CHECK_EXECINFO], [
    AC_MSG_CHECKING(for execinfo.h)
--
--  AC_RUN_IFELSE([AC_LANG_SOURCE([
--      #include <execinfo.h>
--      int main() { backtrace((void**)0, 0); backtrace_symbols((char**)0, 0); return 0;}
--      ])],
--    [
--      AC_MSG_RESULT(yes)
--      AC_DEFINE(USE_EXECINFO, 1, Use execinfo.h)
--    ], [
--      AC_MSG_RESULT(no)
--  ])
- ])
-
+ 
+-  AC_COMPILE_IFELSE([AC_LANG_SOURCE([
++  AC_LINK_IFELSE([AC_LANG_SOURCE([
+       #include <execinfo.h>
+       int main() { backtrace((void**)0, 0); backtrace_symbols((char**)0, 0); return 0;}
+       ])],
+@@ -168,7 +168,7 @@ AC_DEFUN([TORRENT_CHECK_EXECINFO], [
  AC_DEFUN([TORRENT_CHECK_ALIGNED], [
    AC_MSG_CHECKING(the byte alignment)
--
+ 
 -  AC_RUN_IFELSE([AC_LANG_SOURCE([
--      #include <inttypes.h>
--      int main() {
--        char buf@<:@8@:>@ = { 0, 0, 0, 0, 1, 0, 0, 0 };
--	int i;
--        for (i = 1; i < 4; ++i)
--	  if (*(uint32_t*)(buf + i) == 0) return -1;
--	return 0;
--	}
--      ])],
--    [
--      AC_MSG_RESULT(none needed)
--    ], [
--      AC_DEFINE(USE_ALIGNED, 1, Require byte alignment)
--      AC_MSG_RESULT(required)
--  ])
- ])
-
-
++  AC_LINK_IFELSE([AC_LANG_SOURCE([
+       #include <inttypes.h>
+       int main() {
+         char buf@<:@8@:>@ = { 0, 0, 0, 0, 1, 0, 0, 0 };
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
index 92e6528..b2dffcd 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
@@ -11,9 +11,9 @@
            file://0001-implement-64bit-atomic-for-mips.patch \
            file://0001-Define-64bit-atomic-helpers-for-ppc-32-bit.patch \
            "
-SRCREV = "c167c5a9e0bcf0df23ae5efd91396aae0e37eb87"
+SRCREV = "074f6ec51a2e4bc5c6140b4dad13c9bb56f3f0dc"
 
-PV = "0.13.6+git${SRCPV}"
+PV = "0.13.7+git${SRCPV}"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.11.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.20.3.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.11.0.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.20.3.bb
index ca4685a..a11ff9d 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.11.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.20.3.bb
@@ -2,10 +2,10 @@
 HOMEPAGE = "https://github.com/libuv/libuv"
 BUGTRACKER = "https://github.com/libuv/libuv/issues"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=bb5ea0d651f4c3519327171906045775"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a68902a430e32200263d182d44924d47"
 
 S = "${WORKDIR}/git"
-SRCREV = "7452ef4e06a4f99ee26b694c65476401534f2725"
+SRCREV = "8cfd67e59195251dff793ee47c185c9d6a8f3818"
 BRANCH = "v1.x"
 SRC_URI = "git://github.com/libuv/libuv.git;protocol=https;branch=${BRANCH};"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_2.1.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_3.0.0.bb
similarity index 85%
rename from meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_2.1.0.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_3.0.0.bb
index 100f3a3..f384148 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_2.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_3.0.0.bb
@@ -1,12 +1,12 @@
 SUMMARY = "Canonical libwebsockets.org websocket library"
 HOMEPAGE = "https://libwebsockets.org/"
 LICENSE = "LGPL-2.1"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=e3393a657830d4a118c5a6ed35ba53d0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ce87f3facb6f911c142c8bef9bfb380"
 
 DEPENDS = "zlib"
 
 S = "${WORKDIR}/git"
-SRCREV = "73557509bd15f95a1ad081a6f4fab48ff7743215"
+SRCREV = "eaa935a80adb38b5cc4d09ce06ec987b87dcddfa"
 SRC_URI = "git://github.com/warmcat/libwebsockets.git;protocol=https;"
 
 inherit cmake pkgconfig
@@ -23,5 +23,4 @@
 
 PACKAGES =+ "${PN}-testapps"
 
-FILES_${PN}-dev += "${libdir}/cmake"
 FILES_${PN}-testapps += "${datadir}/libwebsockets-test-server/*"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager/enum-conversion.patch b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager/enum-conversion.patch
deleted file mode 100644
index a3fb0f3..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager/enum-conversion.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Fixes errors found bt Clang
-
-| ../../ModemManager-1.6.4/src/mm-bearer-qmi.c:774:50: error: implicit conversion from enumeration type 'MMBearerStatus' to different enumeration type 'MMBearerConnectionStatus' [-Werror,-Wenum-conversion]
-|         MMBearerConnectionStatus bearer_status = mm_base_bearer_get_status (MM_BASE_BEARER (self));
-|                                  ~~~~~~~~~~~~~   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-| 1 error generated.
-
-
-Index: ModemManager-1.6.4/src/mm-bearer-qmi.c
-===================================================================
---- ModemManager-1.6.4.orig/src/mm-bearer-qmi.c
-+++ ModemManager-1.6.4/src/mm-bearer-qmi.c
-@@ -771,7 +771,7 @@ packet_service_status_indication_cb (Qmi
-             &connection_status,
-             NULL,
-             NULL)) {
--        MMBearerConnectionStatus bearer_status = mm_base_bearer_get_status (MM_BASE_BEARER (self));
-+        MMBearerConnectionStatus bearer_status = (MMBearerConnectionStatus)mm_base_bearer_get_status (MM_BASE_BEARER (self));
- 
-         if (connection_status == QMI_WDS_CONNECTION_STATUS_DISCONNECTED &&
-             bearer_status != MM_BEARER_CONNECTION_STATUS_DISCONNECTED &&
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.6.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.8.2.bb
similarity index 84%
rename from meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.6.4.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.8.2.bb
index e60cd4b..dec4b67 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.6.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.8.2.bb
@@ -12,10 +12,10 @@
 DEPENDS = "glib-2.0 libgudev dbus-glib intltool-native"
 
 SRC_URI = "http://www.freedesktop.org/software/ModemManager/ModemManager-${PV}.tar.xz \
-           file://enum-conversion.patch \
-"
-SRC_URI[md5sum] = "06488186c7dd53f8104183b86f7a1568"
-SRC_URI[sha256sum] = "cdd5b4cb1e4d7643643a28ccbfc4bb354bfa9cb89a77ea160ebdf7926171c668"
+           "
+
+SRC_URI[md5sum] = "a49c9f73e46c7b89e5efedda250d22c0"
+SRC_URI[sha256sum] = "96f2a5f0ed15532b4c4c185b756fdc0326e7c2027cea26a1264f91e098260f80"
 
 S = "${WORKDIR}/ModemManager-${PV}"
 
@@ -26,10 +26,14 @@
 PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,,"
 PACKAGECONFIG[polkit] = "--with-polkit=yes,--with-polkit=no,polkit"
 # Support WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol.
-PACKAGECONFIG[mbim] = "--with-mbim,--enable-mbim=no,libmbim"
+PACKAGECONFIG[mbim] = "--with-mbim,--with-mbim=no,libmbim"
 # Support WWAN modems and devices which speak the Qualcomm MSM Interface (QMI) protocol.
 PACKAGECONFIG[qmi] = "--with-qmi,--without-qmi,libqmi"
 
+EXTRA_OECONF = " \
+    --with-udev-base-dir=${nonarch_base_libdir}/udev \
+"
+
 FILES_${PN} += " \
     ${datadir}/icons \
     ${datadir}/polkit-1 \
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch
deleted file mode 100644
index a5aa277..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 0be38301249d797ec1f59071cc868ceda6d4720a Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <andre.draszik@jci.com>
-Date: Tue, 12 Apr 2016 12:50:32 +0100
-Subject: [PATCH 1/2] config.mk: allow prefix / mandir / localedir from
- environment
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We want to control them using OE environment variables.
-
-Upstream-Status: Inappropriate [embedded-specific]
-Signed-off-by: André Draszik <andre.draszik@jci.com>
----
- config.mk | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/config.mk b/config.mk
-index 71f17e5..81d9702 100644
---- a/config.mk
-+++ b/config.mk
-@@ -249,7 +249,7 @@ ifeq ($(WITH_DOCS),yes)
- endif
- 
- INSTALL?=install
--prefix=/usr/local
--mandir=${prefix}/share/man
--localedir=${prefix}/share/locale
-+prefix?=/usr/local
-+mandir?=${prefix}/share/man
-+localedir?=${prefix}/share/locale
- STRIP?=strip
--- 
-2.15.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0002-uthash-remove-in-tree-version.patch b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0002-uthash-remove-in-tree-version.patch
deleted file mode 100644
index c89dfe6..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/0002-uthash-remove-in-tree-version.patch
+++ /dev/null
@@ -1,975 +0,0 @@
-From d9aeef8d95a325942cc92f4d72415771d75d904c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <andre.draszik@jci.com>
-Date: Tue, 12 Apr 2016 13:05:10 +0100
-Subject: [PATCH 2/2] uthash: remove in-tree version
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We don't need it as we want to use the version provided by
-meta-oe instead.
-
-Upstream-Status: Inappropriate [embedded-specific]
-Signed-off-by: André Draszik <andre.draszik@jci.com>
----
- src/uthash.h | 948 -----------------------------------------------------------
- 1 file changed, 948 deletions(-)
- delete mode 100644 src/uthash.h
-
-diff --git a/src/uthash.h b/src/uthash.h
-deleted file mode 100644
-index 915a825..0000000
---- a/src/uthash.h
-+++ /dev/null
-@@ -1,948 +0,0 @@
--/*
--Copyright (c) 2003-2013, Troy D. Hanson     http://troydhanson.github.com/uthash/
--All rights reserved.
--
--Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions are met:
--
--    * Redistributions of source code must retain the above copyright
--      notice, this list of conditions and the following disclaimer.
--
--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--*/
--
--#ifndef UTHASH_H
--#define UTHASH_H 
--
--#include <string.h>   /* memcmp,strlen */
--#include <stddef.h>   /* ptrdiff_t */
--#include <stdlib.h>   /* exit() */
--
--/* These macros use decltype or the earlier __typeof GNU extension.
--   As decltype is only available in newer compilers (VS2010 or gcc 4.3+
--   when compiling c++ source) this code uses whatever method is needed
--   or, for VS2008 where neither is available, uses casting workarounds. */
--#ifdef _MSC_VER         /* MS compiler */
--#if _MSC_VER >= 1600 && defined(__cplusplus)  /* VS2010 or newer in C++ mode */
--#define DECLTYPE(x) (decltype(x))
--#else                   /* VS2008 or older (or VS2010 in C mode) */
--#define NO_DECLTYPE
--#define DECLTYPE(x)
--#endif
--#else                   /* GNU, Sun and other compilers */
--#define DECLTYPE(x) (__typeof(x))
--#endif
--
--#ifdef NO_DECLTYPE
--#define DECLTYPE_ASSIGN(dst,src)                                                 \
--do {                                                                             \
--  char **_da_dst = (char**)(&(dst));                                             \
--  *_da_dst = (char*)(src);                                                       \
--} while(0)
--#else 
--#define DECLTYPE_ASSIGN(dst,src)                                                 \
--do {                                                                             \
--  (dst) = DECLTYPE(dst)(src);                                                    \
--} while(0)
--#endif
--
--/* a number of the hash function use uint32_t which isn't defined on win32 */
--#ifdef _MSC_VER
--typedef unsigned int uint32_t;
--typedef unsigned char uint8_t;
--#else
--#include <inttypes.h>   /* uint32_t */
--#endif
--
--#define UTHASH_VERSION 1.9.8
--
--#ifndef uthash_fatal
--#define uthash_fatal(msg) exit(-1)        /* fatal error (out of memory,etc) */
--#endif
--#ifndef uthash_malloc
--#define uthash_malloc(sz) malloc(sz)      /* malloc fcn                      */
--#endif
--#ifndef uthash_free
--#define uthash_free(ptr,sz) free(ptr)     /* free fcn                        */
--#endif
--
--#ifndef uthash_noexpand_fyi
--#define uthash_noexpand_fyi(tbl)          /* can be defined to log noexpand  */
--#endif
--#ifndef uthash_expand_fyi
--#define uthash_expand_fyi(tbl)            /* can be defined to log expands   */
--#endif
--
--/* initial number of buckets */
--#define HASH_INITIAL_NUM_BUCKETS 32      /* initial number of buckets        */
--#define HASH_INITIAL_NUM_BUCKETS_LOG2 5  /* lg2 of initial number of buckets */
--#define HASH_BKT_CAPACITY_THRESH 10      /* expand when bucket count reaches */
--
--/* calculate the element whose hash handle address is hhe */
--#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho)))
--
--#define HASH_FIND(hh,head,keyptr,keylen,out)                                     \
--do {                                                                             \
--  unsigned _hf_bkt,_hf_hashv;                                                    \
--  out=NULL;                                                                      \
--  if (head) {                                                                    \
--     HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt);   \
--     if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) {                           \
--       HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ],  \
--                        keyptr,keylen,out);                                      \
--     }                                                                           \
--  }                                                                              \
--} while (0)
--
--#ifdef HASH_BLOOM
--#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM)
--#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0)
--#define HASH_BLOOM_MAKE(tbl)                                                     \
--do {                                                                             \
--  (tbl)->bloom_nbits = HASH_BLOOM;                                               \
--  (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN);                 \
--  if (!((tbl)->bloom_bv))  { uthash_fatal( "out of memory"); }                   \
--  memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN);                                \
--  (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE;                                       \
--} while (0) 
--
--#define HASH_BLOOM_FREE(tbl)                                                     \
--do {                                                                             \
--  uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN);                              \
--} while (0) 
--
--#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8)))
--#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8)))
--
--#define HASH_BLOOM_ADD(tbl,hashv)                                                \
--  HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))
--
--#define HASH_BLOOM_TEST(tbl,hashv)                                               \
--  HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))
--
--#else
--#define HASH_BLOOM_MAKE(tbl) 
--#define HASH_BLOOM_FREE(tbl) 
--#define HASH_BLOOM_ADD(tbl,hashv) 
--#define HASH_BLOOM_TEST(tbl,hashv) (1)
--#define HASH_BLOOM_BYTELEN 0
--#endif
--
--#define HASH_MAKE_TABLE(hh,head)                                                 \
--do {                                                                             \
--  (head)->hh.tbl = (UT_hash_table*)uthash_malloc(                                \
--                  sizeof(UT_hash_table));                                        \
--  if (!((head)->hh.tbl))  { uthash_fatal( "out of memory"); }                    \
--  memset((head)->hh.tbl, 0, sizeof(UT_hash_table));                              \
--  (head)->hh.tbl->tail = &((head)->hh);                                          \
--  (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS;                        \
--  (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2;              \
--  (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head);                    \
--  (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc(                      \
--          HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket));               \
--  if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); }             \
--  memset((head)->hh.tbl->buckets, 0,                                             \
--          HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket));               \
--  HASH_BLOOM_MAKE((head)->hh.tbl);                                               \
--  (head)->hh.tbl->signature = HASH_SIGNATURE;                                    \
--} while(0)
--
--#define HASH_ADD(hh,head,fieldname,keylen_in,add)                                \
--        HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add)
--
--#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced)                   \
--do {                                                                             \
--  replaced=NULL;                                                                 \
--  HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced);                     \
--  if (replaced!=NULL) {                                                          \
--     HASH_DELETE(hh,head,replaced);                                              \
--  };                                                                             \
--  HASH_ADD(hh,head,fieldname,keylen_in,add);                                     \
--} while(0)
-- 
--#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add)                            \
--do {                                                                             \
-- unsigned _ha_bkt;                                                               \
-- (add)->hh.next = NULL;                                                          \
-- (add)->hh.key = (char*)keyptr;                                                  \
-- (add)->hh.keylen = (unsigned)keylen_in;                                                   \
-- if (!(head)) {                                                                  \
--    head = (add);                                                                \
--    (head)->hh.prev = NULL;                                                      \
--    HASH_MAKE_TABLE(hh,head);                                                    \
-- } else {                                                                        \
--    (head)->hh.tbl->tail->next = (add);                                          \
--    (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail);         \
--    (head)->hh.tbl->tail = &((add)->hh);                                         \
-- }                                                                               \
-- (head)->hh.tbl->num_items++;                                                    \
-- (add)->hh.tbl = (head)->hh.tbl;                                                 \
-- HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets,                         \
--         (add)->hh.hashv, _ha_bkt);                                              \
-- HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh);                   \
-- HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv);                                 \
-- HASH_EMIT_KEY(hh,head,keyptr,keylen_in);                                        \
-- HASH_FSCK(hh,head);                                                             \
--} while(0)
--
--#define HASH_TO_BKT( hashv, num_bkts, bkt )                                      \
--do {                                                                             \
--  bkt = ((hashv) & ((num_bkts) - 1));                                            \
--} while(0)
--
--/* delete "delptr" from the hash table.
-- * "the usual" patch-up process for the app-order doubly-linked-list.
-- * The use of _hd_hh_del below deserves special explanation.
-- * These used to be expressed using (delptr) but that led to a bug
-- * if someone used the same symbol for the head and deletee, like
-- *  HASH_DELETE(hh,users,users);
-- * We want that to work, but by changing the head (users) below
-- * we were forfeiting our ability to further refer to the deletee (users)
-- * in the patch-up process. Solution: use scratch space to
-- * copy the deletee pointer, then the latter references are via that
-- * scratch pointer rather than through the repointed (users) symbol.
-- */
--#define HASH_DELETE(hh,head,delptr)                                              \
--do {                                                                             \
--    unsigned _hd_bkt;                                                            \
--    struct UT_hash_handle *_hd_hh_del;                                           \
--    if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) )  {         \
--        uthash_free((head)->hh.tbl->buckets,                                     \
--                    (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \
--        HASH_BLOOM_FREE((head)->hh.tbl);                                         \
--        uthash_free((head)->hh.tbl, sizeof(UT_hash_table));                      \
--        head = NULL;                                                             \
--    } else {                                                                     \
--        _hd_hh_del = &((delptr)->hh);                                            \
--        if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) {     \
--            (head)->hh.tbl->tail =                                               \
--                (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) +               \
--                (head)->hh.tbl->hho);                                            \
--        }                                                                        \
--        if ((delptr)->hh.prev) {                                                 \
--            ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) +                  \
--                    (head)->hh.tbl->hho))->next = (delptr)->hh.next;             \
--        } else {                                                                 \
--            DECLTYPE_ASSIGN(head,(delptr)->hh.next);                             \
--        }                                                                        \
--        if (_hd_hh_del->next) {                                                  \
--            ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next +                     \
--                    (head)->hh.tbl->hho))->prev =                                \
--                    _hd_hh_del->prev;                                            \
--        }                                                                        \
--        HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt);   \
--        HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del);        \
--        (head)->hh.tbl->num_items--;                                             \
--    }                                                                            \
--    HASH_FSCK(hh,head);                                                          \
--} while (0)
--
--
--/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */
--#define HASH_FIND_STR(head,findstr,out)                                          \
--    HASH_FIND(hh,head,findstr,strlen(findstr),out)
--#define HASH_ADD_STR(head,strfield,add)                                          \
--    HASH_ADD(hh,head,strfield,strlen(add->strfield),add)
--#define HASH_REPLACE_STR(head,strfield,add,replaced)                             \
--  HASH_REPLACE(hh,head,strfield,strlen(add->strfield),add,replaced)
--#define HASH_FIND_INT(head,findint,out)                                          \
--    HASH_FIND(hh,head,findint,sizeof(int),out)
--#define HASH_ADD_INT(head,intfield,add)                                          \
--    HASH_ADD(hh,head,intfield,sizeof(int),add)
--#define HASH_REPLACE_INT(head,intfield,add,replaced)                             \
--    HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
--#define HASH_FIND_PTR(head,findptr,out)                                          \
--    HASH_FIND(hh,head,findptr,sizeof(void *),out)
--#define HASH_ADD_PTR(head,ptrfield,add)                                          \
--    HASH_ADD(hh,head,ptrfield,sizeof(void *),add)
--#define HASH_REPLACE_PTR(head,ptrfield,add)                                      \
--    HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced)
--#define HASH_DEL(head,delptr)                                                    \
--    HASH_DELETE(hh,head,delptr)
--
--/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.
-- * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.
-- */
--#ifdef HASH_DEBUG
--#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0)
--#define HASH_FSCK(hh,head)                                                       \
--do {                                                                             \
--    unsigned _bkt_i;                                                             \
--    unsigned _count, _bkt_count;                                                 \
--    char *_prev;                                                                 \
--    struct UT_hash_handle *_thh;                                                 \
--    if (head) {                                                                  \
--        _count = 0;                                                              \
--        for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) {       \
--            _bkt_count = 0;                                                      \
--            _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head;                      \
--            _prev = NULL;                                                        \
--            while (_thh) {                                                       \
--               if (_prev != (char*)(_thh->hh_prev)) {                            \
--                   HASH_OOPS("invalid hh_prev %p, actual %p\n",                  \
--                    _thh->hh_prev, _prev );                                      \
--               }                                                                 \
--               _bkt_count++;                                                     \
--               _prev = (char*)(_thh);                                            \
--               _thh = _thh->hh_next;                                             \
--            }                                                                    \
--            _count += _bkt_count;                                                \
--            if ((head)->hh.tbl->buckets[_bkt_i].count !=  _bkt_count) {          \
--               HASH_OOPS("invalid bucket count %d, actual %d\n",                 \
--                (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count);              \
--            }                                                                    \
--        }                                                                        \
--        if (_count != (head)->hh.tbl->num_items) {                               \
--            HASH_OOPS("invalid hh item count %d, actual %d\n",                   \
--                (head)->hh.tbl->num_items, _count );                             \
--        }                                                                        \
--        /* traverse hh in app order; check next/prev integrity, count */         \
--        _count = 0;                                                              \
--        _prev = NULL;                                                            \
--        _thh =  &(head)->hh;                                                     \
--        while (_thh) {                                                           \
--           _count++;                                                             \
--           if (_prev !=(char*)(_thh->prev)) {                                    \
--              HASH_OOPS("invalid prev %p, actual %p\n",                          \
--                    _thh->prev, _prev );                                         \
--           }                                                                     \
--           _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh);                    \
--           _thh = ( _thh->next ?  (UT_hash_handle*)((char*)(_thh->next) +        \
--                                  (head)->hh.tbl->hho) : NULL );                 \
--        }                                                                        \
--        if (_count != (head)->hh.tbl->num_items) {                               \
--            HASH_OOPS("invalid app item count %d, actual %d\n",                  \
--                (head)->hh.tbl->num_items, _count );                             \
--        }                                                                        \
--    }                                                                            \
--} while (0)
--#else
--#define HASH_FSCK(hh,head) 
--#endif
--
--/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to 
-- * the descriptor to which this macro is defined for tuning the hash function.
-- * The app can #include <unistd.h> to get the prototype for write(2). */
--#ifdef HASH_EMIT_KEYS
--#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)                                   \
--do {                                                                             \
--    unsigned _klen = fieldlen;                                                   \
--    write(HASH_EMIT_KEYS, &_klen, sizeof(_klen));                                \
--    write(HASH_EMIT_KEYS, keyptr, fieldlen);                                     \
--} while (0)
--#else 
--#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen)                    
--#endif
--
--/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */
--#ifdef HASH_FUNCTION 
--#define HASH_FCN HASH_FUNCTION
--#else
--#define HASH_FCN HASH_JEN
--#endif
--
--/* The Bernstein hash function, used in Perl prior to v5.6 */
--#define HASH_BER(key,keylen,num_bkts,hashv,bkt)                                  \
--do {                                                                             \
--  unsigned _hb_keylen=keylen;                                                    \
--  char *_hb_key=(char*)(key);                                                    \
--  (hashv) = 0;                                                                   \
--  while (_hb_keylen--)  { (hashv) = ((hashv) * 33) + *_hb_key++; }               \
--  bkt = (hashv) & (num_bkts-1);                                                  \
--} while (0)
--
--
--/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at 
-- * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */
--#define HASH_SAX(key,keylen,num_bkts,hashv,bkt)                                  \
--do {                                                                             \
--  unsigned _sx_i;                                                                \
--  char *_hs_key=(char*)(key);                                                    \
--  hashv = 0;                                                                     \
--  for(_sx_i=0; _sx_i < keylen; _sx_i++)                                          \
--      hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i];                     \
--  bkt = hashv & (num_bkts-1);                                                    \
--} while (0)
--
--#define HASH_FNV(key,keylen,num_bkts,hashv,bkt)                                  \
--do {                                                                             \
--  unsigned _fn_i;                                                                \
--  char *_hf_key=(char*)(key);                                                    \
--  hashv = 2166136261UL;                                                          \
--  for(_fn_i=0; _fn_i < keylen; _fn_i++)                                          \
--      hashv = (hashv * 16777619) ^ _hf_key[_fn_i];                               \
--  bkt = hashv & (num_bkts-1);                                                    \
--} while(0) 
-- 
--#define HASH_OAT(key,keylen,num_bkts,hashv,bkt)                                  \
--do {                                                                             \
--  unsigned _ho_i;                                                                \
--  char *_ho_key=(char*)(key);                                                    \
--  hashv = 0;                                                                     \
--  for(_ho_i=0; _ho_i < keylen; _ho_i++) {                                        \
--      hashv += _ho_key[_ho_i];                                                   \
--      hashv += (hashv << 10);                                                    \
--      hashv ^= (hashv >> 6);                                                     \
--  }                                                                              \
--  hashv += (hashv << 3);                                                         \
--  hashv ^= (hashv >> 11);                                                        \
--  hashv += (hashv << 15);                                                        \
--  bkt = hashv & (num_bkts-1);                                                    \
--} while(0)
--
--#define HASH_JEN_MIX(a,b,c)                                                      \
--do {                                                                             \
--  a -= b; a -= c; a ^= ( c >> 13 );                                              \
--  b -= c; b -= a; b ^= ( a << 8 );                                               \
--  c -= a; c -= b; c ^= ( b >> 13 );                                              \
--  a -= b; a -= c; a ^= ( c >> 12 );                                              \
--  b -= c; b -= a; b ^= ( a << 16 );                                              \
--  c -= a; c -= b; c ^= ( b >> 5 );                                               \
--  a -= b; a -= c; a ^= ( c >> 3 );                                               \
--  b -= c; b -= a; b ^= ( a << 10 );                                              \
--  c -= a; c -= b; c ^= ( b >> 15 );                                              \
--} while (0)
--
--#define HASH_JEN(key,keylen,num_bkts,hashv,bkt)                                  \
--do {                                                                             \
--  unsigned _hj_i,_hj_j,_hj_k;                                                    \
--  unsigned char *_hj_key=(unsigned char*)(key);                                  \
--  hashv = 0xfeedbeef;                                                            \
--  _hj_i = _hj_j = 0x9e3779b9;                                                    \
--  _hj_k = (unsigned)keylen;                                                      \
--  while (_hj_k >= 12) {                                                          \
--    _hj_i +=    (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 )                      \
--        + ( (unsigned)_hj_key[2] << 16 )                                         \
--        + ( (unsigned)_hj_key[3] << 24 ) );                                      \
--    _hj_j +=    (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 )                      \
--        + ( (unsigned)_hj_key[6] << 16 )                                         \
--        + ( (unsigned)_hj_key[7] << 24 ) );                                      \
--    hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 )                         \
--        + ( (unsigned)_hj_key[10] << 16 )                                        \
--        + ( (unsigned)_hj_key[11] << 24 ) );                                     \
--                                                                                 \
--     HASH_JEN_MIX(_hj_i, _hj_j, hashv);                                          \
--                                                                                 \
--     _hj_key += 12;                                                              \
--     _hj_k -= 12;                                                                \
--  }                                                                              \
--  hashv += keylen;                                                               \
--  switch ( _hj_k ) {                                                             \
--     case 11: hashv += ( (unsigned)_hj_key[10] << 24 );                          \
--     case 10: hashv += ( (unsigned)_hj_key[9] << 16 );                           \
--     case 9:  hashv += ( (unsigned)_hj_key[8] << 8 );                            \
--     case 8:  _hj_j += ( (unsigned)_hj_key[7] << 24 );                           \
--     case 7:  _hj_j += ( (unsigned)_hj_key[6] << 16 );                           \
--     case 6:  _hj_j += ( (unsigned)_hj_key[5] << 8 );                            \
--     case 5:  _hj_j += _hj_key[4];                                               \
--     case 4:  _hj_i += ( (unsigned)_hj_key[3] << 24 );                           \
--     case 3:  _hj_i += ( (unsigned)_hj_key[2] << 16 );                           \
--     case 2:  _hj_i += ( (unsigned)_hj_key[1] << 8 );                            \
--     case 1:  _hj_i += _hj_key[0];                                               \
--  }                                                                              \
--  HASH_JEN_MIX(_hj_i, _hj_j, hashv);                                             \
--  bkt = hashv & (num_bkts-1);                                                    \
--} while(0)
--
--/* The Paul Hsieh hash function */
--#undef get16bits
--#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__)             \
--  || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
--#define get16bits(d) (*((const uint16_t *) (d)))
--#endif
--
--#if !defined (get16bits)
--#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)             \
--                       +(uint32_t)(((const uint8_t *)(d))[0]) )
--#endif
--#define HASH_SFH(key,keylen,num_bkts,hashv,bkt)                                  \
--do {                                                                             \
--  unsigned char *_sfh_key=(unsigned char*)(key);                                 \
--  uint32_t _sfh_tmp, _sfh_len = keylen;                                          \
--                                                                                 \
--  int _sfh_rem = _sfh_len & 3;                                                   \
--  _sfh_len >>= 2;                                                                \
--  hashv = 0xcafebabe;                                                            \
--                                                                                 \
--  /* Main loop */                                                                \
--  for (;_sfh_len > 0; _sfh_len--) {                                              \
--    hashv    += get16bits (_sfh_key);                                            \
--    _sfh_tmp       = (uint32_t)(get16bits (_sfh_key+2)) << 11  ^ hashv;          \
--    hashv     = (hashv << 16) ^ _sfh_tmp;                                        \
--    _sfh_key += 2*sizeof (uint16_t);                                             \
--    hashv    += hashv >> 11;                                                     \
--  }                                                                              \
--                                                                                 \
--  /* Handle end cases */                                                         \
--  switch (_sfh_rem) {                                                            \
--    case 3: hashv += get16bits (_sfh_key);                                       \
--            hashv ^= hashv << 16;                                                \
--            hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)] << 18);              \
--            hashv += hashv >> 11;                                                \
--            break;                                                               \
--    case 2: hashv += get16bits (_sfh_key);                                       \
--            hashv ^= hashv << 11;                                                \
--            hashv += hashv >> 17;                                                \
--            break;                                                               \
--    case 1: hashv += *_sfh_key;                                                  \
--            hashv ^= hashv << 10;                                                \
--            hashv += hashv >> 1;                                                 \
--  }                                                                              \
--                                                                                 \
--    /* Force "avalanching" of final 127 bits */                                  \
--    hashv ^= hashv << 3;                                                         \
--    hashv += hashv >> 5;                                                         \
--    hashv ^= hashv << 4;                                                         \
--    hashv += hashv >> 17;                                                        \
--    hashv ^= hashv << 25;                                                        \
--    hashv += hashv >> 6;                                                         \
--    bkt = hashv & (num_bkts-1);                                                  \
--} while(0) 
--
--#ifdef HASH_USING_NO_STRICT_ALIASING
--/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.
-- * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.
-- * MurmurHash uses the faster approach only on CPU's where we know it's safe. 
-- *
-- * Note the preprocessor built-in defines can be emitted using:
-- *
-- *   gcc -m64 -dM -E - < /dev/null                  (on gcc)
-- *   cc -## a.c (where a.c is a simple test file)   (Sun Studio)
-- */
--#if (defined(__i386__) || defined(__x86_64__)  || defined(_M_IX86))
--#define MUR_GETBLOCK(p,i) p[i]
--#else /* non intel */
--#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0)
--#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1)
--#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2)
--#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3)
--#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL))
--#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__))
--#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24))
--#define MUR_TWO_TWO(p)   ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16))
--#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >>  8))
--#else /* assume little endian non-intel */
--#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24))
--#define MUR_TWO_TWO(p)   ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16))
--#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) <<  8))
--#endif
--#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) :           \
--                            (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \
--                             (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) :  \
--                                                      MUR_ONE_THREE(p))))
--#endif
--#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
--#define MUR_FMIX(_h) \
--do {                 \
--  _h ^= _h >> 16;    \
--  _h *= 0x85ebca6b;  \
--  _h ^= _h >> 13;    \
--  _h *= 0xc2b2ae35l; \
--  _h ^= _h >> 16;    \
--} while(0)
--
--#define HASH_MUR(key,keylen,num_bkts,hashv,bkt)                        \
--do {                                                                   \
--  const uint8_t *_mur_data = (const uint8_t*)(key);                    \
--  const int _mur_nblocks = (keylen) / 4;                               \
--  uint32_t _mur_h1 = 0xf88D5353;                                       \
--  uint32_t _mur_c1 = 0xcc9e2d51;                                       \
--  uint32_t _mur_c2 = 0x1b873593;                                       \
--  uint32_t _mur_k1 = 0;                                                \
--  const uint8_t *_mur_tail;                                            \
--  const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \
--  int _mur_i;                                                          \
--  for(_mur_i = -_mur_nblocks; _mur_i; _mur_i++) {                      \
--    _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i);                        \
--    _mur_k1 *= _mur_c1;                                                \
--    _mur_k1 = MUR_ROTL32(_mur_k1,15);                                  \
--    _mur_k1 *= _mur_c2;                                                \
--                                                                       \
--    _mur_h1 ^= _mur_k1;                                                \
--    _mur_h1 = MUR_ROTL32(_mur_h1,13);                                  \
--    _mur_h1 = _mur_h1*5+0xe6546b64;                                    \
--  }                                                                    \
--  _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4);            \
--  _mur_k1=0;                                                           \
--  switch((keylen) & 3) {                                               \
--    case 3: _mur_k1 ^= _mur_tail[2] << 16;                             \
--    case 2: _mur_k1 ^= _mur_tail[1] << 8;                              \
--    case 1: _mur_k1 ^= _mur_tail[0];                                   \
--    _mur_k1 *= _mur_c1;                                                \
--    _mur_k1 = MUR_ROTL32(_mur_k1,15);                                  \
--    _mur_k1 *= _mur_c2;                                                \
--    _mur_h1 ^= _mur_k1;                                                \
--  }                                                                    \
--  _mur_h1 ^= (keylen);                                                 \
--  MUR_FMIX(_mur_h1);                                                   \
--  hashv = _mur_h1;                                                     \
--  bkt = hashv & (num_bkts-1);                                          \
--} while(0)
--#endif  /* HASH_USING_NO_STRICT_ALIASING */
--
--/* key comparison function; return 0 if keys equal */
--#define HASH_KEYCMP(a,b,len) memcmp(a,b,len) 
--
--/* iterate over items in a known bucket to find desired item */
--#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out)                       \
--do {                                                                             \
-- if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head));          \
-- else out=NULL;                                                                  \
-- while (out) {                                                                   \
--    if ((out)->hh.keylen == keylen_in) {                                           \
--        if ((HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) break;             \
--    }                                                                            \
--    if ((out)->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,(out)->hh.hh_next)); \
--    else out = NULL;                                                             \
-- }                                                                               \
--} while(0)
--
--/* add an item to a bucket  */
--#define HASH_ADD_TO_BKT(head,addhh)                                              \
--do {                                                                             \
-- head.count++;                                                                   \
-- (addhh)->hh_next = head.hh_head;                                                \
-- (addhh)->hh_prev = NULL;                                                        \
-- if (head.hh_head) { (head).hh_head->hh_prev = (addhh); }                        \
-- (head).hh_head=addhh;                                                           \
-- if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH)             \
--     && (addhh)->tbl->noexpand != 1) {                                           \
--       HASH_EXPAND_BUCKETS((addhh)->tbl);                                        \
-- }                                                                               \
--} while(0)
--
--/* remove an item from a given bucket */
--#define HASH_DEL_IN_BKT(hh,head,hh_del)                                          \
--    (head).count--;                                                              \
--    if ((head).hh_head == hh_del) {                                              \
--      (head).hh_head = hh_del->hh_next;                                          \
--    }                                                                            \
--    if (hh_del->hh_prev) {                                                       \
--        hh_del->hh_prev->hh_next = hh_del->hh_next;                              \
--    }                                                                            \
--    if (hh_del->hh_next) {                                                       \
--        hh_del->hh_next->hh_prev = hh_del->hh_prev;                              \
--    }                                                                
--
--/* Bucket expansion has the effect of doubling the number of buckets
-- * and redistributing the items into the new buckets. Ideally the
-- * items will distribute more or less evenly into the new buckets
-- * (the extent to which this is true is a measure of the quality of
-- * the hash function as it applies to the key domain). 
-- * 
-- * With the items distributed into more buckets, the chain length
-- * (item count) in each bucket is reduced. Thus by expanding buckets
-- * the hash keeps a bound on the chain length. This bounded chain 
-- * length is the essence of how a hash provides constant time lookup.
-- * 
-- * The calculation of tbl->ideal_chain_maxlen below deserves some
-- * explanation. First, keep in mind that we're calculating the ideal
-- * maximum chain length based on the *new* (doubled) bucket count.
-- * In fractions this is just n/b (n=number of items,b=new num buckets).
-- * Since the ideal chain length is an integer, we want to calculate 
-- * ceil(n/b). We don't depend on floating point arithmetic in this
-- * hash, so to calculate ceil(n/b) with integers we could write
-- * 
-- *      ceil(n/b) = (n/b) + ((n%b)?1:0)
-- * 
-- * and in fact a previous version of this hash did just that.
-- * But now we have improved things a bit by recognizing that b is
-- * always a power of two. We keep its base 2 log handy (call it lb),
-- * so now we can write this with a bit shift and logical AND:
-- * 
-- *      ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)
-- * 
-- */
--#define HASH_EXPAND_BUCKETS(tbl)                                                 \
--do {                                                                             \
--    unsigned _he_bkt;                                                            \
--    unsigned _he_bkt_i;                                                          \
--    struct UT_hash_handle *_he_thh, *_he_hh_nxt;                                 \
--    UT_hash_bucket *_he_new_buckets, *_he_newbkt;                                \
--    _he_new_buckets = (UT_hash_bucket*)uthash_malloc(                            \
--             2 * tbl->num_buckets * sizeof(struct UT_hash_bucket));              \
--    if (!_he_new_buckets) { uthash_fatal( "out of memory"); }                    \
--    memset(_he_new_buckets, 0,                                                   \
--            2 * tbl->num_buckets * sizeof(struct UT_hash_bucket));               \
--    tbl->ideal_chain_maxlen =                                                    \
--       (tbl->num_items >> (tbl->log2_num_buckets+1)) +                           \
--       ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0);                    \
--    tbl->nonideal_items = 0;                                                     \
--    for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++)                \
--    {                                                                            \
--        _he_thh = tbl->buckets[ _he_bkt_i ].hh_head;                             \
--        while (_he_thh) {                                                        \
--           _he_hh_nxt = _he_thh->hh_next;                                        \
--           HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt);            \
--           _he_newbkt = &(_he_new_buckets[ _he_bkt ]);                           \
--           if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) {                \
--             tbl->nonideal_items++;                                              \
--             _he_newbkt->expand_mult = _he_newbkt->count /                       \
--                                        tbl->ideal_chain_maxlen;                 \
--           }                                                                     \
--           _he_thh->hh_prev = NULL;                                              \
--           _he_thh->hh_next = _he_newbkt->hh_head;                               \
--           if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev =               \
--                _he_thh;                                                         \
--           _he_newbkt->hh_head = _he_thh;                                        \
--           _he_thh = _he_hh_nxt;                                                 \
--        }                                                                        \
--    }                                                                            \
--    uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \
--    tbl->num_buckets *= 2;                                                       \
--    tbl->log2_num_buckets++;                                                     \
--    tbl->buckets = _he_new_buckets;                                              \
--    tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ?         \
--        (tbl->ineff_expands+1) : 0;                                              \
--    if (tbl->ineff_expands > 1) {                                                \
--        tbl->noexpand=1;                                                         \
--        uthash_noexpand_fyi(tbl);                                                \
--    }                                                                            \
--    uthash_expand_fyi(tbl);                                                      \
--} while(0)
--
--
--/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */
--/* Note that HASH_SORT assumes the hash handle name to be hh. 
-- * HASH_SRT was added to allow the hash handle name to be passed in. */
--#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn)
--#define HASH_SRT(hh,head,cmpfcn)                                                 \
--do {                                                                             \
--  unsigned _hs_i;                                                                \
--  unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize;               \
--  struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail;            \
--  if (head) {                                                                    \
--      _hs_insize = 1;                                                            \
--      _hs_looping = 1;                                                           \
--      _hs_list = &((head)->hh);                                                  \
--      while (_hs_looping) {                                                      \
--          _hs_p = _hs_list;                                                      \
--          _hs_list = NULL;                                                       \
--          _hs_tail = NULL;                                                       \
--          _hs_nmerges = 0;                                                       \
--          while (_hs_p) {                                                        \
--              _hs_nmerges++;                                                     \
--              _hs_q = _hs_p;                                                     \
--              _hs_psize = 0;                                                     \
--              for ( _hs_i = 0; _hs_i  < _hs_insize; _hs_i++ ) {                  \
--                  _hs_psize++;                                                   \
--                  _hs_q = (UT_hash_handle*)((_hs_q->next) ?                      \
--                          ((void*)((char*)(_hs_q->next) +                        \
--                          (head)->hh.tbl->hho)) : NULL);                         \
--                  if (! (_hs_q) ) break;                                         \
--              }                                                                  \
--              _hs_qsize = _hs_insize;                                            \
--              while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) {           \
--                  if (_hs_psize == 0) {                                          \
--                      _hs_e = _hs_q;                                             \
--                      _hs_q = (UT_hash_handle*)((_hs_q->next) ?                  \
--                              ((void*)((char*)(_hs_q->next) +                    \
--                              (head)->hh.tbl->hho)) : NULL);                     \
--                      _hs_qsize--;                                               \
--                  } else if ( (_hs_qsize == 0) || !(_hs_q) ) {                   \
--                      _hs_e = _hs_p;                                             \
--                      if (_hs_p){                                                \
--                        _hs_p = (UT_hash_handle*)((_hs_p->next) ?                \
--                                ((void*)((char*)(_hs_p->next) +                  \
--                                (head)->hh.tbl->hho)) : NULL);                   \
--                       }                                                         \
--                      _hs_psize--;                                               \
--                  } else if ((                                                   \
--                      cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \
--                             DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \
--                             ) <= 0) {                                           \
--                      _hs_e = _hs_p;                                             \
--                      if (_hs_p){                                                \
--                        _hs_p = (UT_hash_handle*)((_hs_p->next) ?                \
--                               ((void*)((char*)(_hs_p->next) +                   \
--                               (head)->hh.tbl->hho)) : NULL);                    \
--                       }                                                         \
--                      _hs_psize--;                                               \
--                  } else {                                                       \
--                      _hs_e = _hs_q;                                             \
--                      _hs_q = (UT_hash_handle*)((_hs_q->next) ?                  \
--                              ((void*)((char*)(_hs_q->next) +                    \
--                              (head)->hh.tbl->hho)) : NULL);                     \
--                      _hs_qsize--;                                               \
--                  }                                                              \
--                  if ( _hs_tail ) {                                              \
--                      _hs_tail->next = ((_hs_e) ?                                \
--                            ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL);          \
--                  } else {                                                       \
--                      _hs_list = _hs_e;                                          \
--                  }                                                              \
--                  if (_hs_e) {                                                   \
--                  _hs_e->prev = ((_hs_tail) ?                                    \
--                     ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL);              \
--                  }                                                              \
--                  _hs_tail = _hs_e;                                              \
--              }                                                                  \
--              _hs_p = _hs_q;                                                     \
--          }                                                                      \
--          if (_hs_tail){                                                         \
--            _hs_tail->next = NULL;                                               \
--          }                                                                      \
--          if ( _hs_nmerges <= 1 ) {                                              \
--              _hs_looping=0;                                                     \
--              (head)->hh.tbl->tail = _hs_tail;                                   \
--              DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list));      \
--          }                                                                      \
--          _hs_insize *= 2;                                                       \
--      }                                                                          \
--      HASH_FSCK(hh,head);                                                        \
-- }                                                                               \
--} while (0)
--
--/* This function selects items from one hash into another hash. 
-- * The end result is that the selected items have dual presence 
-- * in both hashes. There is no copy of the items made; rather 
-- * they are added into the new hash through a secondary hash 
-- * hash handle that must be present in the structure. */
--#define HASH_SELECT(hh_dst, dst, hh_src, src, cond)                              \
--do {                                                                             \
--  unsigned _src_bkt, _dst_bkt;                                                   \
--  void *_last_elt=NULL, *_elt;                                                   \
--  UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL;                         \
--  ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst));                 \
--  if (src) {                                                                     \
--    for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) {     \
--      for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head;                \
--          _src_hh;                                                               \
--          _src_hh = _src_hh->hh_next) {                                          \
--          _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh);                       \
--          if (cond(_elt)) {                                                      \
--            _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho);               \
--            _dst_hh->key = _src_hh->key;                                         \
--            _dst_hh->keylen = _src_hh->keylen;                                   \
--            _dst_hh->hashv = _src_hh->hashv;                                     \
--            _dst_hh->prev = _last_elt;                                           \
--            _dst_hh->next = NULL;                                                \
--            if (_last_elt_hh) { _last_elt_hh->next = _elt; }                     \
--            if (!dst) {                                                          \
--              DECLTYPE_ASSIGN(dst,_elt);                                         \
--              HASH_MAKE_TABLE(hh_dst,dst);                                       \
--            } else {                                                             \
--              _dst_hh->tbl = (dst)->hh_dst.tbl;                                  \
--            }                                                                    \
--            HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt);    \
--            HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh);            \
--            (dst)->hh_dst.tbl->num_items++;                                      \
--            _last_elt = _elt;                                                    \
--            _last_elt_hh = _dst_hh;                                              \
--          }                                                                      \
--      }                                                                          \
--    }                                                                            \
--  }                                                                              \
--  HASH_FSCK(hh_dst,dst);                                                         \
--} while (0)
--
--#define HASH_CLEAR(hh,head)                                                      \
--do {                                                                             \
--  if (head) {                                                                    \
--    uthash_free((head)->hh.tbl->buckets,                                         \
--                (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket));      \
--    HASH_BLOOM_FREE((head)->hh.tbl);                                             \
--    uthash_free((head)->hh.tbl, sizeof(UT_hash_table));                          \
--    (head)=NULL;                                                                 \
--  }                                                                              \
--} while(0)
--
--#define HASH_OVERHEAD(hh,head)                                                   \
-- (size_t)((((head)->hh.tbl->num_items   * sizeof(UT_hash_handle))   +            \
--           ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket))   +            \
--            (sizeof(UT_hash_table))                                 +            \
--            (HASH_BLOOM_BYTELEN)))
--
--#ifdef NO_DECLTYPE
--#define HASH_ITER(hh,head,el,tmp)                                                \
--for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL);       \
--  el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL)) 
--#else
--#define HASH_ITER(hh,head,el,tmp)                                                \
--for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL);                 \
--  el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL))
--#endif
--
--/* obtain a count of items in the hash */
--#define HASH_COUNT(head) HASH_CNT(hh,head) 
--#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0)
--
--typedef struct UT_hash_bucket {
--   struct UT_hash_handle *hh_head;
--   unsigned count;
--
--   /* expand_mult is normally set to 0. In this situation, the max chain length
--    * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If
--    * the bucket's chain exceeds this length, bucket expansion is triggered). 
--    * However, setting expand_mult to a non-zero value delays bucket expansion
--    * (that would be triggered by additions to this particular bucket)
--    * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.
--    * (The multiplier is simply expand_mult+1). The whole idea of this
--    * multiplier is to reduce bucket expansions, since they are expensive, in
--    * situations where we know that a particular bucket tends to be overused.
--    * It is better to let its chain length grow to a longer yet-still-bounded
--    * value, than to do an O(n) bucket expansion too often. 
--    */
--   unsigned expand_mult;
--
--} UT_hash_bucket;
--
--/* random signature used only to find hash tables in external analysis */
--#define HASH_SIGNATURE 0xa0111fe1
--#define HASH_BLOOM_SIGNATURE 0xb12220f2
--
--typedef struct UT_hash_table {
--   UT_hash_bucket *buckets;
--   unsigned num_buckets, log2_num_buckets;
--   unsigned num_items;
--   struct UT_hash_handle *tail; /* tail hh in app order, for fast append    */
--   ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */
--
--   /* in an ideal situation (all buckets used equally), no bucket would have
--    * more than ceil(#items/#buckets) items. that's the ideal chain length. */
--   unsigned ideal_chain_maxlen;
--
--   /* nonideal_items is the number of items in the hash whose chain position
--    * exceeds the ideal chain maxlen. these items pay the penalty for an uneven
--    * hash distribution; reaching them in a chain traversal takes >ideal steps */
--   unsigned nonideal_items;
--
--   /* ineffective expands occur when a bucket doubling was performed, but 
--    * afterward, more than half the items in the hash had nonideal chain
--    * positions. If this happens on two consecutive expansions we inhibit any
--    * further expansion, as it's not helping; this happens when the hash
--    * function isn't a good fit for the key domain. When expansion is inhibited
--    * the hash will still work, albeit no longer in constant time. */
--   unsigned ineff_expands, noexpand;
--
--   uint32_t signature; /* used only to find hash tables in external analysis */
--#ifdef HASH_BLOOM
--   uint32_t bloom_sig; /* used only to test bloom exists in external analysis */
--   uint8_t *bloom_bv;
--   char bloom_nbits;
--#endif
--
--} UT_hash_table;
--
--typedef struct UT_hash_handle {
--   struct UT_hash_table *tbl;
--   void *prev;                       /* prev element in app order      */
--   void *next;                       /* next element in app order      */
--   struct UT_hash_handle *hh_prev;   /* previous hh in bucket order    */
--   struct UT_hash_handle *hh_next;   /* next hh in bucket order        */
--   void *key;                        /* ptr to enclosing struct's key  */
--   unsigned keylen;                  /* enclosing struct's key len     */
--   unsigned hashv;                   /* result of hash-fcn(key)        */
--} UT_hash_handle;
--
--#endif /* UTHASH_H */
--- 
-2.15.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.init b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.init
deleted file mode 100644
index d2a27b2..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.init
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /bin/sh
-
-# Based on the Debian initscript for mosquitto
-
-### BEGIN INIT INFO
-# Provides:         mosquitto
-# Required-Start:   $remote_fs $syslog
-# Required-Stop:    $remote_fs $syslog
-# Default-Start:    2 3 4 5
-# Default-Stop:     0 1 6
-# Short-Description:    mosquitto MQTT v3.1 message broker
-# Description: 
-#  This is a message broker that supports version 3.1 of the MQ Telemetry
-#  Transport (MQTT) protocol.
-#  
-#  MQTT provides a method of carrying out messaging using a publish/subscribe
-#  model. It is lightweight, both in terms of bandwidth usage and ease of
-#  implementation. This makes it particularly useful at the edge of the network
-#  where a sensor or other simple device may be implemented using an arduino for
-#  example.
-### END INIT INFO
-
-set -e
-
-PIDFILE=@LOCALSTATEDIR@/run/mosquitto.pid
-DAEMON=@SBINDIR@/mosquitto
-
-# start and stop the mosquitto MQTT message broker
-
-test -x ${DAEMON} || exit 0
-
-umask 022
-
-. @SYSCONFDIR@/init.d/functions
-
-export PATH="${PATH:+$PATH:}@SBINDIR@:@BASE_SBINDIR@"
-
-case "$1" in
-    start)
-        echo "Starting Mosquitto message broker" "mosquitto"
-        if start-stop-daemon --start --quiet --oknodo --background  --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} ; then
-            exit 0
-        else
-            exit 1
-        fi
-        ;;
-    stop)
-        echo "Stopping Mosquitto message broker" "mosquitto"
-        if start-stop-daemon --stop --quiet --oknodo --pidfile ${PIDFILE}; then
-            rm -f ${PIDFILE}
-            exit 0
-        else
-            exit 1
-        fi
-        ;;
-
-
-    reload|force-reload)
-        if [ -f ${PIDFILE} ] ; then
-            echo "Reloading configuration for mosquitto"
-            pid=`cat ${PIDFILE}`
-            kill -HUP $pid
-        else
-            echo "mosquitto does not seem to be running"
-        fi
-        ;;
-
-    restart)
-        echo "Restarting Mosquitto message broker" "mosquitto"
-        if start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile ${PIDFILE}; then
-            rm -f ${PIDFILE}
-        fi
-        if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} -- -c @SYSCONFDIR@/mosquitto/mosquitto.conf ; then
-            exit 0
-        else
-            exit 1
-        fi
-        ;;
-
-    status)
-        status ${DAEMON} && exit 0 || exit $?
-        ;;
-
-    *)
-        echo "Usage: $0 {start|stop|reload|force-reload|restart|status}"
-        exit 1
-esac
-
-exit 0
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.service b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.service
deleted file mode 100644
index 25f68fa..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/files/mosquitto.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[Unit]
-Description=Mosquitto - lightweight server implementation of the MQTT and MQTT-SN protocols
-ConditionPathExists=/etc/mosquitto/mosquitto.conf
-After=network.target
-
-[Service]
-Type=simple
-ExecStartPre=/bin/rm -f /var/run/mosquitto.pid
-ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
-ExecReload=/bin/kill -HUP $MAINPID
-PIDFile=/var/run/mosquitto.pid
-Restart=on-failure
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/mosquitto_1.4.14.bb b/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/mosquitto_1.4.14.bb
deleted file mode 100644
index 13ce381..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/mosquitto/mosquitto_1.4.14.bb
+++ /dev/null
@@ -1,83 +0,0 @@
-SUMMARY = "Open source MQTT v3.1/3.1.1 implemention"
-DESCRIPTION = "Mosquitto is an open source (Eclipse licensed) message broker that implements the MQ Telemetry Transport protocol version 3.1 and 3.1.1. MQTT provides a lightweight method of carrying out messaging using a publish/subscribe model. "
-HOMEPAGE = "http://mosquitto.org/"
-SECTION = "console/network"
-LICENSE = "EPL-1.0 | EDL-1.0"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=62ddc846179e908dc0c8efec4a42ef20 \
-                    file://edl-v10;md5=c09f121939f063aeb5235972be8c722c \
-                    file://epl-v10;md5=8d383c379e91d20ba18a52c3e7d3a979 \
-                    file://notice.html;md5=a00d6f9ab542be7babc2d8b80d5d2a4c \
-"
-DEPENDS = "uthash"
-
-SRC_URI = "http://mosquitto.org/files/source/mosquitto-${PV}.tar.gz \
-           file://0001-config.mk-allow-prefix-mandir-localedir-from-environ.patch \
-           file://0002-uthash-remove-in-tree-version.patch \
-           file://mosquitto.service \
-           file://mosquitto.init \
-"
-
-SRC_URI[md5sum] = "6b0966e93f118bc71ad7b61600a6c2d3"
-SRC_URI[sha256sum] = "156b1fa731d12baad4b8b22f7b6a8af50ba881fc711b81e9919ec103cf2942d1"
-
-inherit systemd update-rc.d useradd
-
-PACKAGECONFIG ??= "ssl uuid"
-
-PACKAGECONFIG[dns-srv] = ",,c-ares"
-PACKAGECONFIG[ssl] = ",,openssl"
-PACKAGECONFIG[uuid] = ",,util-linux"
-EXTRA_OEMAKE = "${@bb.utils.contains('PACKAGECONFIG', 'dns-srv', 'WITH_SRV=yes', 'WITH_SRV=no', d)} \
-                STRIP=/bin/true \
-                WITH_DOCS=no \
-                ${@bb.utils.contains('PACKAGECONFIG', 'ssl', 'WITH_TLS=yes WITH_TLS_PSK=yes', 'WITH_TLS=no WITH_TLS_PSK=no', d)} \
-                ${@bb.utils.contains('PACKAGECONFIG', 'uuid', 'WITH_UUID=yes', 'WITH_UUID=no', d)}"
-
-export LIB_SUFFIX="${@d.getVar('baselib', True).replace('lib', '')}"
-
-do_compile() {
-    oe_runmake PREFIX=${prefix}
-}
-
-do_install() {
-    oe_runmake install DESTDIR=${D}
-    install -d ${D}${libdir}
-    install -m 0644 lib/libmosquitto.a ${D}${libdir}/
-
-    install -d ${D}${systemd_unitdir}/system/
-    install -m 0644 ${WORKDIR}/mosquitto.service ${D}${systemd_unitdir}/system/
-
-    install -d ${D}${sysconfdir}/init.d/
-    install -m 0755 ${WORKDIR}/mosquitto.init ${D}${sysconfdir}/init.d/mosquitto
-    sed -i -e 's,@SBINDIR@,${sbindir},g' \
-        -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
-        -e 's,@LOCALSTATEDIR@,${localstatedir},g' \
-        -e 's,@SYSCONFDIR@,${sysconfdir},g' \
-        ${D}${sysconfdir}/init.d/mosquitto
-}
-
-PACKAGES += "libmosquitto1 libmosquittopp1 ${PN}-clients"
-
-FILES_${PN} = "${sbindir}/mosquitto \
-               ${bindir}/mosquitto_passwd \
-               ${sysconfdir}/mosquitto \
-               ${sysconfdir}/init.d \
-               ${systemd_unitdir}/system/mosquitto.service \
-"
-
-FILES_libmosquitto1 = "${libdir}/libmosquitto.so.1"
-
-FILES_libmosquittopp1 = "${libdir}/libmosquittopp.so.1"
-
-FILES_${PN}-clients = "${bindir}/mosquitto_pub \
-                       ${bindir}/mosquitto_sub \
-"
-
-SYSTEMD_SERVICE_${PN} = "mosquitto.service"
-
-INITSCRIPT_NAME = "mosquitto"
-INITSCRIPT_PARAMS = "defaults 30"
-
-USERADD_PACKAGES = "${PN}"
-USERADD_PARAM_${PN} = "--system --no-create-home --shell /bin/false \
-                       --user-group mosquitto"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/obex/openobex_1.7.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/obex/openobex_1.7.2.bb
index 1b56685..3fb8cb1 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/obex/openobex_1.7.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/obex/openobex_1.7.2.bb
@@ -2,29 +2,26 @@
 Object Exchange (OBEX) protocol."
 HOMEPAGE = "http://openobex.triq.net"
 SECTION = "libs"
-DEPENDS = "virtual/libusb0"
-DEPENDS_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES','bluez5','bluez5','bluez4',d)}"
-
 LICENSE = "GPLv2 & LGPLv2.1"
 LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
                     file://COPYING.LIB;md5=a6f89e2100d9b6cdffcea4f398e37343 \
 "
 
+DEPENDS = "virtual/libusb0"
+DEPENDS_append_class-target = " ${@bb.utils.contains('DISTRO_FEATURES','bluez5','bluez5','bluez4',d)}"
+
 SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}/${PV}/${BP}-Source.tar.gz \
 "
-
 SRC_URI[md5sum] = "f6e0b6cb7dcfd731460a7e9a91429a3a"
 SRC_URI[sha256sum] = "158860aaea52f0fce0c8e4b64550daaae06df2689e05834697b7e8c7d73dd4fc"
 
-inherit cmake pkgconfig
-
 S = "${WORKDIR}/${BP}-Source"
 
+inherit cmake pkgconfig
+
 EXTRA_OECONF = " -DCMAKE_SKIP_RPATH=ON "
 EXTRA_OECMAKE += "-DBUILD_DOCUMENTATION=OFF"
 
-#--enable-apps --enable-syslog
-
 ASNEEDED = ""
 
 do_install_append () {
@@ -34,7 +31,7 @@
 PACKAGES =+ "openobex-apps"
 FILES_${PN}-apps = "${bindir}/*"
 FILES_${PN} += "${libdir}/lib*.so.*"
-FILES_${PN}-dev += "${bindir}/openobex-config ${libdir}/cmake"
+FILES_${PN}-dev += "${bindir}/openobex-config"
 DEBIAN_NOAUTONAME_${PN}-apps = "1"
 
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.1.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.0.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.1.bb
index fec380c..a7a9b5a 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.2.1.bb
@@ -13,7 +13,7 @@
 
 SRC_URI = "git://github.com/eclipse/paho.mqtt.c;protocol=http"
 
-SRCREV = "e8d34da24ad807f5e698b327d67591fd4b4bfa7e"
+SRCREV = "09fe0744e02f317b907e96dd5afcc02224ddbb85"
 
 DEPENDS = "openssl"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent_git.bb
index c731cf7..9bb81c4 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent_git.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/rtorrent/rtorrent_git.bb
@@ -8,9 +8,10 @@
 SRC_URI = "git://github.com/rakshasa/rtorrent \
     file://don-t-run-code-while-configuring-package.patch \
 "
-SRCREV = "226e670decf92e7adaa845a6982aca4f164ea740"
+# v0.9.7
+SRCREV = "327164f9d86aafcd2500a317d485374df32ea622"
 
-PV = "0.9.6+git${SRCPV}"
+PV = "0.9.7+git${SRCPV}"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.5.bb
similarity index 71%
rename from meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.4.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.5.bb
index 708650f..f64776c 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.5.bb
@@ -7,8 +7,8 @@
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/project/ser2net/ser2net/ser2net-${PV}.tar.gz"
 
-SRC_URI[md5sum] = "562274d783534276a9feac913b7d8c4e"
-SRC_URI[sha256sum] = "d846066e27c3072565990745d030357aa0c278f96b7d1d4f59023347c1db8824"
+SRC_URI[md5sum] = "e10e7c8c97e5bade5e85ce6e89bdf1f4"
+SRC_URI[sha256sum] = "ba9e1d60a89fd7ed075553b4a2074352902203f7fbd9b65b15048c05f0e3f3be"
 
 inherit autotools pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-Forcibly-disable-check-for-Qt5.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-Forcibly-disable-check-for-Qt5.patch
index fcc2f08..a77cd28 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-Forcibly-disable-check-for-Qt5.patch
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-Forcibly-disable-check-for-Qt5.patch
@@ -1,9 +1,10 @@
-From b3da0d8677b7e8467367a303c18551c56ed20e15 Mon Sep 17 00:00:00 2001
+From a5544d8e543436e413379422b702f6f56ac7eb8e Mon Sep 17 00:00:00 2001
 From: Philip Balister <philip@balister.org>
 Date: Tue, 12 Apr 2016 17:30:15 -0400
 Subject: [PATCH] Forcibly disable check for Qt5.
 
 Signed-off-by: Philip Balister <philip@balister.org>
+
 ---
  build/cmake/DefineOptions.cmake | 3 ---
  1 file changed, 3 deletions(-)
@@ -22,6 +23,3 @@
  if(${WITH_QT4} AND ${WITH_QT5} AND ${CMAKE_MAJOR_VERSION} LESS 3)
    # cmake < 3.0.0 causes conflict when building both Qt4 and Qt5
    set(WITH_QT4 OFF)
--- 
-2.5.5
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch
index 7cc8d17..182eacc 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch
@@ -1,7 +1,7 @@
-From bc577820ad25795543b31f123e309cdaebc7d6c6 Mon Sep 17 00:00:00 2001
+From b8e254a2f4ba49412e541598c72159869a7770f8 Mon Sep 17 00:00:00 2001
 From: Cody P Schafer <dev@codyps.com>
 Date: Mon, 16 May 2016 15:21:10 -0400
-Subject: [PATCH 1/2] THRIFT-3828 In cmake avoid use of both quoted paths and
+Subject: [PATCH] THRIFT-3828 In cmake avoid use of both quoted paths and
  SYSTEM with include_directories()
 
 This allows us to avoid issues where there are no paths to be added to
@@ -11,6 +11,7 @@
 Specifically, gcc-6 requires that libraries stop passing paths like
 '/usr/include' (or they will get libstdc++ build errors), so these paths
 will be empty more often in the future.
+
 ---
  lib/cpp/CMakeLists.txt      | 8 ++++----
  lib/cpp/test/CMakeLists.txt | 2 +-
@@ -105,6 +106,3 @@
  
  #Make sure gen-cpp files can be included
  include_directories("${CMAKE_CURRENT_BINARY_DIR}")
--- 
-2.9.3
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch
index f13adbb..37715c2 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch
@@ -1,7 +1,7 @@
-From f6cad0580e5391c37af7f60adddb71bf1a403dc4 Mon Sep 17 00:00:00 2001
+From 7b05a74432f08ef34d0f8743dd6438ad012e3b5e Mon Sep 17 00:00:00 2001
 From: Cody P Schafer <dev@codyps.com>
 Date: Fri, 9 Sep 2016 15:50:26 -0400
-Subject: [PATCH 2/2] THRIFT-3831 in test/cpp explicitly use `signed char`
+Subject: [PATCH] THRIFT-3831 in test/cpp explicitly use `signed char`
 
 `char`'s signed-ness is implimentation dependent, and in the case where
 `char` was not signed, we previously recieved errors like
@@ -9,15 +9,16 @@
     thrift/0.9.3-r0/git/test/cpp/src/TestClient.cpp:404:15: error: narrowing conversion of '-127' from 'int' to 'char' inside { } [-Wnarrowing]
 
 (This example from gcc-6 on arm)
+
 ---
  test/cpp/src/TestClient.cpp | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/test/cpp/src/TestClient.cpp b/test/cpp/src/TestClient.cpp
-index e709899..4a961f8 100644
+index 7c425a9..7145ebb 100644
 --- a/test/cpp/src/TestClient.cpp
 +++ b/test/cpp/src/TestClient.cpp
-@@ -383,7 +383,7 @@ int main(int argc, char** argv) {
+@@ -381,7 +381,7 @@ int main(int argc, char** argv) {
       * BINARY TEST
       */
      printf("testBinary([-128..127]) = {");
@@ -26,7 +27,7 @@
          = {-128, -127, -126, -125, -124, -123, -122, -121, -120, -119, -118, -117, -116, -115, -114,
             -113, -112, -111, -110, -109, -108, -107, -106, -105, -104, -103, -102, -101, -100, -99,
             -98,  -97,  -96,  -95,  -94,  -93,  -92,  -91,  -90,  -89,  -88,  -87,  -86,  -85,  -84,
-@@ -404,7 +404,7 @@ int main(int argc, char** argv) {
+@@ -402,7 +402,7 @@ int main(int argc, char** argv) {
             127};
      try {
        string bin_result;
@@ -35,6 +36,3 @@
        if (bin_result.size() != 256) {
          printf("}\n*** FAILED ***\n");
          printf("invalid length: %lu\n", bin_result.size());
--- 
-2.9.3
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0004-THRIFT-3207-enable-build-with-OpenSSL-1.1.0-series.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0004-THRIFT-3207-enable-build-with-OpenSSL-1.1.0-series.patch
new file mode 100644
index 0000000..500cfab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0004-THRIFT-3207-enable-build-with-OpenSSL-1.1.0-series.patch
@@ -0,0 +1,41 @@
+From 5f2c7e50b99d72177250c44236c41b99bfc161b5 Mon Sep 17 00:00:00 2001
+From: Andrej Valek <andrej.valek@siemens.com>
+Date: Thu, 7 Jun 2018 15:21:06 +0200
+Subject: [PATCH 4/6] %% original patch:
+ 0004-THRIFT-3207-enable-build-with-OpenSSL-1.1.0-series.patch
+
+---
+ lib/cpp/src/thrift/transport/TSSLSocket.cpp | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/lib/cpp/src/thrift/transport/TSSLSocket.cpp b/lib/cpp/src/thrift/transport/TSSLSocket.cpp
+index 98c5326..3da9e45 100644
+--- a/lib/cpp/src/thrift/transport/TSSLSocket.cpp
++++ b/lib/cpp/src/thrift/transport/TSSLSocket.cpp
+@@ -39,6 +39,7 @@
+ #include <thrift/transport/PlatformSocket.h>
+ 
+ #define OPENSSL_VERSION_NO_THREAD_ID 0x10000000L
++#define OPENSSL_VERSION_WITH_TLSv1_1_AND_TLSv1_2 0x10100000L
+ 
+ using namespace std;
+ using namespace apache::thrift::concurrency;
+@@ -143,10 +144,15 @@ SSLContext::SSLContext(const SSLProtocol& protocol) {
+     ctx_ = SSL_CTX_new(SSLv3_method());
+   } else if (protocol == TLSv1_0) {
+     ctx_ = SSL_CTX_new(TLSv1_method());
++#if (OPENSSL_VERSION_NUMBER >= OPENSSL_VERSION_WITH_TLSv1_1_AND_TLSv1_2)
+   } else if (protocol == TLSv1_1) {
+     ctx_ = SSL_CTX_new(TLSv1_1_method());
+   } else if (protocol == TLSv1_2) {
+     ctx_ = SSL_CTX_new(TLSv1_2_method());
++#else
++  //Support for this versions will end on 2016-12-31
++  //https://www.openssl.org/about/releasestrat.html
++#endif
+   } else {
+     /// UNKNOWN PROTOCOL!
+     throw TSSLException("SSL_CTX_new: Unknown protocol");
+-- 
+2.19.0
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0005-THRIFT-3878-Compile-error-in-TSSLSocket.cpp-with-new.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0005-THRIFT-3878-Compile-error-in-TSSLSocket.cpp-with-new.patch
new file mode 100644
index 0000000..f4482b1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0005-THRIFT-3878-Compile-error-in-TSSLSocket.cpp-with-new.patch
@@ -0,0 +1,26 @@
+From 81f36e7174097a1f1f3e7f94a97574b2ec68577f Mon Sep 17 00:00:00 2001
+From: "James E. King, III" <jim.king@simplivity.com>
+Date: Thu, 29 Sep 2016 15:04:09 -0400
+Subject: [PATCH] THRIFT-3878: fix interop with newer OpenSSL libraries
+
+---
+ lib/cpp/src/thrift/transport/TSSLSocket.cpp | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/lib/cpp/src/thrift/transport/TSSLSocket.cpp b/lib/cpp/src/thrift/transport/TSSLSocket.cpp
+index 3da9e45..0a3a124 100644
+--- a/lib/cpp/src/thrift/transport/TSSLSocket.cpp
++++ b/lib/cpp/src/thrift/transport/TSSLSocket.cpp
+@@ -97,7 +97,12 @@ void initializeOpenSSL() {
+   SSL_library_init();
+   SSL_load_error_strings();
+   // static locking
++  // newer versions of OpenSSL changed CRYPTO_num_locks - see THRIFT-3878
++#ifdef CRYPTO_num_locks
++  mutexes = boost::shared_array<Mutex>(new Mutex[CRYPTO_num_locks()]);
++#else
+   mutexes = boost::shared_array<Mutex>(new Mutex[ ::CRYPTO_num_locks()]);
++#endif
+   if (mutexes == NULL) {
+     throw TTransportException(TTransportException::INTERNAL_ERROR,
+                               "initializeOpenSSL() failed, "
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0006-THRIFT-3736-C++-library-build-fails-if-OpenSSL-does-.patch b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0006-THRIFT-3736-C++-library-build-fails-if-OpenSSL-does-.patch
new file mode 100644
index 0000000..dfaa2fb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift-0.9.3/0006-THRIFT-3736-C++-library-build-fails-if-OpenSSL-does-.patch
@@ -0,0 +1,46 @@
+From 4cd49f470ca983369451d1141acc80fe1115cab4 Mon Sep 17 00:00:00 2001
+From: Nobuaki Sukegawa <nsuke@apache.org>
+Date: Sun, 13 Mar 2016 08:55:38 +0900
+Subject: [PATCH] THRIFT-3736 C++ library build fails if OpenSSL does not
+
+ surrpot SSLv3
+
+---
+ lib/cpp/src/thrift/transport/TSSLSocket.cpp | 2 ++
+ lib/cpp/test/SecurityTest.cpp               | 8 ++++++++
+ 2 files changed, 10 insertions(+)
+
+diff --git a/lib/cpp/src/thrift/transport/TSSLSocket.cpp b/lib/cpp/src/thrift/transport/TSSLSocket.cpp
+index 0a3a124..3e79354 100644
+--- a/lib/cpp/src/thrift/transport/TSSLSocket.cpp
++++ b/lib/cpp/src/thrift/transport/TSSLSocket.cpp
+@@ -145,8 +145,10 @@ static char uppercase(char c);
+ SSLContext::SSLContext(const SSLProtocol& protocol) {
+   if (protocol == SSLTLS) {
+     ctx_ = SSL_CTX_new(SSLv23_method());
++#ifndef OPENSSL_NO_SSL3
+   } else if (protocol == SSLv3) {
+     ctx_ = SSL_CTX_new(SSLv3_method());
++#endif
+   } else if (protocol == TLSv1_0) {
+     ctx_ = SSL_CTX_new(TLSv1_method());
+ #if (OPENSSL_VERSION_NUMBER >= OPENSSL_VERSION_WITH_TLSv1_1_AND_TLSv1_2)
+diff --git a/lib/cpp/test/SecurityTest.cpp b/lib/cpp/test/SecurityTest.cpp
+index 213efd4..08110e7 100644
+--- a/lib/cpp/test/SecurityTest.cpp
++++ b/lib/cpp/test/SecurityTest.cpp
+@@ -239,6 +239,14 @@ BOOST_AUTO_TEST_CASE(ssl_security_matrix)
+                     continue;
+                 }
+ 
++#ifdef OPENSSL_NO_SSL3
++                if (si == 2 || ci == 2)
++                {
++                    // Skip all SSLv3 cases - protocol not supported
++                    continue;
++                }
++#endif
++
+                 boost::mutex::scoped_lock lock(mMutex);
+ 
+                 BOOST_TEST_MESSAGE(boost::format("TEST: Server = %1%, Client = %2%")
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift_0.9.3.bb b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift_0.9.3.bb
index aa93283..7ab7402 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift_0.9.3.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/thrift/thrift_0.9.3.bb
@@ -12,6 +12,9 @@
            file://0001-Forcibly-disable-check-for-Qt5.patch \
            file://0001-THRIFT-3828-In-cmake-avoid-use-of-both-quoted-paths-.patch \
            file://0002-THRIFT-3831-in-test-cpp-explicitly-use-signed-char.patch \
+           file://0004-THRIFT-3207-enable-build-with-OpenSSL-1.1.0-series.patch \
+           file://0005-THRIFT-3878-Compile-error-in-TSSLSocket.cpp-with-new.patch \
+           file://0006-THRIFT-3736-C++-library-build-fails-if-OpenSSL-does-.patch \
 "
 
 SRC_URI[md5sum] = "88d667a8ae870d5adeca8cb7d6795442"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-Add-format-string-to-fprintf-call.patch b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-Add-format-string-to-fprintf-call.patch
deleted file mode 100644
index 8e5f4da..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-Add-format-string-to-fprintf-call.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From a0ad5128d14b022239445e251cf4a9826e86aa96 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 27 Jun 2017 07:48:31 -0700
-Subject: [PATCH] Add format string to fprintf() call
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/vt.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/vt.c b/src/vt.c
-index 795d393..a533d3d 100644
---- a/src/vt.c
-+++ b/src/vt.c
-@@ -499,7 +499,7 @@ static int vt_cmd_dump_candidates(const struct vt_handle *vh,
- 		}
- 		llen += cmdlen;
- 
--		ret = fprintf(vh->vh_stream, e->cmd);
-+		ret = fprintf(vh->vh_stream, "%s", e->cmd);
- 		if (ret < 0)
- 			return ret;
- 
--- 
-2.13.2
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch
deleted file mode 100644
index 8192056..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From f567740cf64978ac9db014c786b6d0267b244f33 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 4 Mar 2018 22:30:30 -0800
-Subject: [PATCH 1/2] replace SIGCLD with SIGCHLD and include sys/types.h
-
-Fixes
-main.c:129:10: error: 'SIGCLD' undeclared (first use in this function); did you mean 'SIGCHLD'?
-   signal(SIGCLD, sig_child);
-          ^~~~~~
-          SIGCHLD
-
-main.c:125:2: warning: implicit declaration of function 'umask' [-Wimplicit-function-declaration]
-  umask(0);
-  ^~~~~
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- src/main.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/main.c b/src/main.c
-index 3cf4072..cd34196 100644
---- a/src/main.c
-+++ b/src/main.c
-@@ -31,6 +31,7 @@
- #include <sys/ioctl.h>
- #include <sys/wait.h>
- #include <sys/param.h>
-+#include <sys/types.h>
- #include <pthread.h>
- #include <fcntl.h>
- #include <unistd.h>
-@@ -126,9 +127,9 @@ static void daemon_start(int ignsigcld)
- 
- 	if (ignsigcld) {
- #ifdef SIGTSTP
--		signal(SIGCLD, sig_child);
-+		signal(SIGCHLD, sig_child);
- #else
--		signal(SIGCLD, SIG_IGN);
-+		signal(SIGCHLD, SIG_IGN);
- #endif
- 	}
- }
--- 
-2.16.2
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch
deleted file mode 100644
index 90d12da..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From 19b6cf8099e1974b5fc39086fc54103b0cbc2658 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 4 Mar 2018 23:01:25 -0800
-Subject: [PATCH 2/2] replace PTHREAD_MUTEX_FAST_NP with PTHREAD_MUTEX_NORMAL
-
-PTHREAD_MUTEX_FAST_NP is not available on non-posix systems
-e.g. musl
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- src/ha.c        | 2 +-
- src/icmp6.c     | 2 +-
- src/mh.c        | 2 +-
- src/mn.c        | 2 +-
- src/movement.c  | 2 +-
- src/mpdisc_ha.c | 2 +-
- src/mpdisc_mn.c | 2 +-
- src/tqueue.c    | 2 +-
- src/tunnelctl.c | 2 +-
- 9 files changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/src/ha.c b/src/ha.c
-index fbdcff0..b2f811e 100644
---- a/src/ha.c
-+++ b/src/ha.c
-@@ -1246,7 +1246,7 @@ int ha_init(void)
- {
- 	pthread_mutexattr_t mattrs;
- 	pthread_mutexattr_init(&mattrs);
--	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 	if (pthread_mutex_init(&bu_worker_mutex, &mattrs) ||
- 	    pthread_cond_init(&cond, NULL))
- 		return -1;
-diff --git a/src/icmp6.c b/src/icmp6.c
-index 3695135..6460634 100644
---- a/src/icmp6.c
-+++ b/src/icmp6.c
-@@ -243,7 +243,7 @@ int icmp6_init(void)
- 		return -1;
- 	/* create ICMP listener thread */
- 	pthread_mutexattr_init(&mattrs);
--	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 	if (pthread_mutex_init(&icmp6_sock.send_mutex, &mattrs) ||
- 	    pthread_rwlock_init(&handler_lock, NULL) ||
- 	    pthread_create(&icmp6_listener, NULL, icmp6_listen, NULL))
-diff --git a/src/mh.c b/src/mh.c
-index 60e345e..7928f4c 100644
---- a/src/mh.c
-+++ b/src/mh.c
-@@ -204,7 +204,7 @@ int mh_init(void)
- 		return -1;
- 
- 	pthread_mutexattr_init(&mattrs);
--	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 	if (pthread_mutex_init(&mh_sock.send_mutex, &mattrs) ||
- 	    pthread_rwlock_init(&handler_lock, NULL) ||
- 	    pthread_create(&mh_listener, NULL, mh_listen, NULL))
-diff --git a/src/mn.c b/src/mn.c
-index 092cfcb..8f7f448 100644
---- a/src/mn.c
-+++ b/src/mn.c
-@@ -1478,7 +1478,7 @@ static struct home_addr_info *hai_copy(struct home_addr_info *conf_hai)
- 	if (hai != NULL) {
- 		pthread_mutexattr_t mattrs;
- 		pthread_mutexattr_init(&mattrs);
--		pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+		pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 
- 		memcpy(hai, conf_hai, sizeof(struct home_addr_info));
- 
-diff --git a/src/movement.c b/src/movement.c
-index d985937..6400448 100644
---- a/src/movement.c
-+++ b/src/movement.c
-@@ -2013,7 +2013,7 @@ int md_init(void)
- 	int val;
- 
- 	pthread_mutexattr_init(&mattrs);
--	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 	if (pthread_mutex_init(&iface_lock, &mattrs))
- 		return -1;
- 
-diff --git a/src/mpdisc_ha.c b/src/mpdisc_ha.c
-index 40ba05f..fd7a90d 100644
---- a/src/mpdisc_ha.c
-+++ b/src/mpdisc_ha.c
-@@ -559,7 +559,7 @@ int mpd_ha_init(void)
- {
- 	pthread_mutexattr_t mattrs;
- 	pthread_mutexattr_init(&mattrs);
--	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 	if (pthread_mutex_init(&mpa_lock, &mattrs) ||
- 	    pthread_rwlock_init(&prefix_lock, NULL) ||
- 	    hash_init(&mpa_hash, DOUBLE_ADDR, MPA_BUCKETS) < 0)
-diff --git a/src/mpdisc_mn.c b/src/mpdisc_mn.c
-index 4873bd6..ada02bd 100644
---- a/src/mpdisc_mn.c
-+++ b/src/mpdisc_mn.c
-@@ -267,7 +267,7 @@ int mpd_mn_init(void)
- {
- 	pthread_mutexattr_t mattrs;
- 	pthread_mutexattr_init(&mattrs);
--	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 	if (pthread_mutex_init(&mps_lock, &mattrs))
- 		return -1;
- 	if (hash_init(&mps_hash, DOUBLE_ADDR, MPS_BUCKETS) < 0)
-diff --git a/src/tqueue.c b/src/tqueue.c
-index 2f7aa0b..9c185b8 100644
---- a/src/tqueue.c
-+++ b/src/tqueue.c
-@@ -65,7 +65,7 @@ int taskqueue_init(void)
- {
- 	pthread_mutexattr_t mattrs;
- 	pthread_mutexattr_init(&mattrs);
--	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 	if (pthread_mutex_init(&mutex, &mattrs) ||
- 	    pthread_cond_init(&cond, NULL) ||
- 	    pthread_create(&tq_runner, NULL, runner, NULL))
-diff --git a/src/tunnelctl.c b/src/tunnelctl.c
-index 23fc20b..813b8ec 100644
---- a/src/tunnelctl.c
-+++ b/src/tunnelctl.c
-@@ -433,7 +433,7 @@ int tunnelctl_init(void)
- 		return -1;
- 
- 	pthread_mutexattr_init(&mattrs);
--	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_FAST_NP);
-+	pthread_mutexattr_settype(&mattrs, PTHREAD_MUTEX_NORMAL);
- 	if (pthread_mutex_init(&tnl_lock, &mattrs))
- 		return -1;
- 
--- 
-2.16.2
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/add-dependency-to-support-parallel-compilation.patch b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/add-dependency-to-support-parallel-compilation.patch
deleted file mode 100644
index dbf0082..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/add-dependency-to-support-parallel-compilation.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-When "make -j10", the compilation will fail,
-because scan.c has included gram.h, but gram.h was produced
-after scan.c was compiled
-
-So add this dependency to ensure that gram.h is produced
-before scan.c is produced.
-
-Upstream-Status: Inappropriate [upstream is not active]
-
-Signed-off-by: Roy.Li <RongQing.Li@windriver.com>
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
----
- src/Makefile.am |    2 ++
- 1 file changed, 2 insertions(+)
-
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -81,3 +81,5 @@ CLEANFILES = gram.c gram.h \
- 
- DISTCLEANFILES = $(BUILT_SOURCES)
- MAINTAINERCLEANFILES = Makefile.in
-+
-+scan.c: gram.h
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d
deleted file mode 100755
index ebd70a6..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-#
-# mip6d		Start script for the Mobile IPv6 daemon
-#
-# chkconfig:	- 55 25
-# description:	The mobile IPv6 daemon allows nodes to remain \
-#		reachable while moving around in the IPv6 Internet.
-# processname:	mip6d
-# config:	/etc/mip6d.conf
-# config:	/etc/sysconfig/mip6d
-#
-### BEGIN INIT INFO
-# Provides: mipv6-daemon
-# Required-Start: $local_fs $remote_fs $network $named
-# Required-Stop: $local_fs $remote_fs $network
-# Should-Start: $syslog
-# Should-Stop: $network $syslog
-# Default-Start:
-# Default-Stop: 0 1 6
-# Short-Description: Start and stop Mobile IPV6 daemon
-# Description:	The mobile IPv6 daemon allows nodes to remain
-#		reachable while moving around in the IPv6 Internet.
-### END INIT INFO
-
-# Source function library.
-. /etc/init.d/functions
-
-if [ -f /etc/sysconfig/mip6d ]; then
-	. /etc/sysconfig/mip6d
-fi
-
-mip6d=/usr/sbin/mip6d
-prog="mip6d"
-lockfile=/var/lock/subsys/$prog
-
-start() {
-	[ -x $mip6d ] || exit 5
-	echo -n $"Starting $prog: "
-	start-stop-daemon -S -x ${mip6d} && success || failure
-	retval=$?
-	echo
-	[ $retval -eq 0 ] && touch ${lockfile}
-	return $retval
-}
-
-stop() {
-	echo -n $"Stopping $prog: "
-	start-stop-daemon -K -x $mip6d
-	retval=$?
-	echo
-	[ $retval -eq 0 ] && rm -f ${lockfile}
-	return $retval
-}
-
-restart() {
-	stop
-	start
-}
-
-reload()
-{
-	echo -n $"Reloading $prog configuration: "
-	killproc $mip6d -HUP
-	retval=$?
-	echo
-	return $retval
-}
-
-force_reload() {
-	restart
-}
-
-rh_status() {
-	status $prog
-}
-
-rh_status_q() {
-	rh_status > /dev/null 2>&1
-}
-
-case "$1" in
-  start)
-	rh_status_q && exit 0
-	$1
-	;;
-  stop)
-	rh_status_q || exit 0
-	$1
-	;;
-  restart)
-	$1
-	;;
-  reload)
-	rh_status_q || exit 7
-	$1
-	;;
-  force-reload)
-	force_reload
-	;;
-  status)
-	rh_status
-	;;
-  condrestart|try-restart)
-	rh_status_q || exit 0
-	restart
-	;;
-  *)
-	echo $"Usage: $prog {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
-	exit 2
-esac
-
-exit $?
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d.service b/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d.service
deleted file mode 100644
index 2b5a5b9..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/umip/files/mip6d.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=MIPL Mobile IPv6
-After=network.target
-
-[Service]
-EnvironmentFile=-@SYSCONFDIR@/sysconfig/mip6d
-ExecStart=@SBINDIR@/mip6d $ARGS
-
-[Install]
-WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/umip/umip_1.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/umip/umip_1.0.bb
deleted file mode 100644
index 0c120bf..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/umip/umip_1.0.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SUMMARY = "Mobile IPv6 and NEMO for Linux"
-DESCRIPTION = "UMIP is an open source implementation of Mobile IPv6 and NEMO \
-Basic Support for Linux. It is released under the GPLv2 license. It supports \
-the following IETF RFC: RFC6275 (Mobile IPv6), RFC3963 (NEMO), RFC3776 and \
-RFC4877 (IPsec and IKEv2)."
-HOMEPAGE = "http://umip.org/"
-SECTION = "System Environment/Base"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=073dc31ccb2ebed70db54f1e8aeb4c33"
-DEPENDS = "rpm indent-native"
-
-SRC_URI = "git://github.com/jlanza/umip \
-           file://add-dependency-to-support-parallel-compilation.patch \
-           file://mip6d \
-           file://mip6d.service \
-           file://0001-Add-format-string-to-fprintf-call.patch \
-           file://0001-replace-SIGCLD-with-SIGCHLD-and-include-sys-types.h.patch \
-           file://0002-replace-PTHREAD_MUTEX_FAST_NP-with-PTHREAD_MUTEX_NOR.patch \
-           "
-SRCREV = "7d67209cd1bba2dd0e183a0fa07eeef07964dd14"
-
-S = "${WORKDIR}/git"
-
-EXTRA_OECONF = "--enable-vt"
-
-inherit autotools-brokensep systemd update-rc.d
-
-INITSCRIPT_NAME = "mip6d"
-INITSCRIPT_PARAMS = "start 64 . stop 36 0 1 2 3 4 5 6 ."
-
-SYSTEMD_SERVICE_${PN} = "mip6d.service"
-SYSTEMD_AUTO_ENABLE = "disable"
-
-do_install_append() {
-	install -D -m 0755 ${WORKDIR}/mip6d ${D}${sysconfdir}/init.d/mip6d
-	install -D -m 0644 ${WORKDIR}/mip6d.service ${D}${systemd_system_unitdir}/mip6d.service
-	sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
-	    -e 's,@SBINDIR@,${sbindir},g' \
-	    ${D}${systemd_system_unitdir}/mip6d.service
-}
-
-RRECOMMENDS_${PN} = "kernel-module-mip6 kernel-module-ipv6"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/usbmuxd/usbmuxd_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/usbmuxd/usbmuxd_git.bb
index 4365aa4..7284234 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/usbmuxd/usbmuxd_git.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/usbmuxd/usbmuxd_git.bb
@@ -1,24 +1,21 @@
 DESCRIPTION = "This daemon is in charge of multiplexing connections over USB to an iPhone or iPod touch."
 LICENSE = "GPLv3 & GPLv2 & LGPLv2.1"
 LIC_FILES_CHKSUM = "file://COPYING.GPLv2;md5=ebb5c50ab7cab4baeffba14977030c07 \
-                    file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
-                    file://COPYING.LGPLv2.1;md5=6ab17b41640564434dda85c06b7124f7"
+                    file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504"
 
-DEPENDS = "udev libusb1"
+DEPENDS = "udev libusb1 libplist"
 
-inherit cmake pkgconfig gitpkgv
+inherit autotools pkgconfig gitpkgv systemd
 
 PKGV = "${GITPKGVTAG}"
 
-SRCREV = "919587580c5e77f3936f3432115d2e10c7bac7c5"
-SRC_URI = "git://git.sukimashita.com/usbmuxd.git;protocol=http"
+SRCREV = "ee85938c21043ef5f7cd4dfbc7677f385814d4d8"
+SRC_URI = "git://github.com/libimobiledevice/usbmuxd;protocol=https"
 
 S = "${WORKDIR}/git"
 
+EXTRA_OECONF += "--without-preflight"
+
 FILES_${PN} += "${base_libdir}/udev/rules.d/"
 
-# fix usbmuxd installing files to /usr/lib64 on 64bit hosts:
-EXTRA_OECMAKE = "-DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[plist] = "-DWANT_PLIST=1,-DWANT_PLIST=0,libplist"
+SYSTEMD_SERVICE_${PN} = "usbmuxd.service"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb
index 3a71fb9..5154208 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvdial_1.61.bb
@@ -30,3 +30,5 @@
 do_install() {
     oe_runmake prefix=${D}/usr PPPDIR=${D}/etc/ppp/peers install
 }
+# http://errors.yoctoproject.org/Errors/Details/186959/
+EXCLUDE_FROM_WORLD_libc-musl = "1"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-Forward-port-to-OpenSSL-1.1.x.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-Forward-port-to-OpenSSL-1.1.x.patch
new file mode 100644
index 0000000..19a2e26
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/0001-Forward-port-to-OpenSSL-1.1.x.patch
@@ -0,0 +1,557 @@
+From 0c35749891bf834c1f3c1c4c330266bd2f4733cc Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Sep 2018 10:40:09 -0700
+Subject: [PATCH] Forward port to OpenSSL 1.1.x
+
+* import patch from debian
+https://sources.debian.org/src/wvstreams/4.6.1-14/debian/patches/wvstreams_openssl1.1.patch
+Author: Reiner Herrmann <reiner@reiner-h.de>
+
+Upstream-Status: Submitted [https://github.com/apenwarr/wvstreams/pull/2]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ crypto/wvcrl.cc           | 38 +++++++++++++-------------------------
+ crypto/wvdiffiehellman.cc | 30 +++++++++++++++++++-----------
+ crypto/wvdigest.cc        | 16 ++++++++--------
+ crypto/wvocsp.cc          | 35 +++++++++--------------------------
+ crypto/wvx509.cc          | 31 ++++++++++++++++---------------
+ crypto/wvx509mgr.cc       | 27 ++++++++++++++++-----------
+ include/wvdiffiehellman.h |  2 +-
+ include/wvdigest.h        | 14 ++++++--------
+ include/wvtripledes.h     | 10 +++++-----
+ 9 files changed, 93 insertions(+), 110 deletions(-)
+
+diff --git a/crypto/wvcrl.cc b/crypto/wvcrl.cc
+index fa00c76..880ad85 100644
+--- a/crypto/wvcrl.cc
++++ b/crypto/wvcrl.cc
+@@ -357,31 +357,19 @@ bool WvCRL::isrevoked(WvStringParm serial_number) const
+ 	ASN1_INTEGER *serial = serial_to_int(serial_number);
+ 	if (serial)
+ 	{
+-	    X509_REVOKED mayberevoked;
+-	    mayberevoked.serialNumber = serial;
+-	    if (crl->crl->revoked)
+-	    {
+-		int idx = sk_X509_REVOKED_find(crl->crl->revoked, 
+-					       &mayberevoked);
+-		ASN1_INTEGER_free(serial);
+-		if (idx >= 0)
+-                {
+-                    debug("Certificate is revoked.\n");
+-		    return true;
+-                }
+-                else
+-                {
+-                    debug("Certificate is not revoked.\n");
+-		    return false;
+-                }
+-	    }
+-	    else
+-	    {
+-		ASN1_INTEGER_free(serial);
+-		debug("CRL does not have revoked list.\n");
+-                return false;
+-	    }
+-	    
++	    X509_REVOKED *revoked_entry = NULL;
++	    int idx = X509_CRL_get0_by_serial(crl, &revoked_entry, serial);
++	    ASN1_INTEGER_free(serial);
++	    if (idx >= 1 || revoked_entry)
++            {
++                debug("Certificate is revoked.\n");
++	        return true;
++            }
++            else
++            {
++                debug("Certificate is not revoked.\n");
++	        return false;
++            }
+ 	}
+ 	else
+ 	    debug(WvLog::Warning, "Can't convert serial number to ASN1 format. "
+diff --git a/crypto/wvdiffiehellman.cc b/crypto/wvdiffiehellman.cc
+index 7c0bf32..15cd104 100644
+--- a/crypto/wvdiffiehellman.cc
++++ b/crypto/wvdiffiehellman.cc
+@@ -39,24 +39,25 @@ WvDiffieHellman::WvDiffieHellman(const unsigned char *_key, int _keylen,
+ {
+     int problems;
+     int check;
+-    {
++
+ 	info = DH_new();
+-	info->p = BN_bin2bn(_key, _keylen, NULL);
++	BIGNUM *p = BN_bin2bn(_key, _keylen, NULL);
+ // 	info->p->top = 0;
+ // 	info->p->dmax = _keylen * 8 / BN_BITS2;
+ // 	info->p->neg = 0;
+ // 	info->p->flags = 0;
+ 
+-	info->g = BN_new();
+-	BN_set_word(info->g, generator);
++	BIGNUM *g = BN_new();
++	BN_set_word(g, generator);
+ // 	info->g->d = &generator;
+ //  	info->g->top = 0;
+ //  	info->g->dmax = 1;
+ //  	info->g->neg = 0;
+ //  	info->g->flags = 0;
+-    }
+ 
+-    check = BN_mod_word(info->p, 24);
++	DH_set0_pqg(info, p, NULL, g);
++
++    check = BN_mod_word(p, 24);
+     DH_check(info, &problems);
+     if (problems & DH_CHECK_P_NOT_PRIME)
+  	log(WvLog::Error, "Using a composite number for authentication.\n");
+@@ -64,7 +65,7 @@ WvDiffieHellman::WvDiffieHellman(const unsigned char *_key, int _keylen,
+ 	log(WvLog::Error,"Using an unsafe prime number for authentication.\n");
+     if (problems & DH_NOT_SUITABLE_GENERATOR)
+ 	log(WvLog::Error, "Can you just use 2 instead of %s (%s)!!\n",
+-	    BN_bn2hex(info->g), check);
++	    BN_bn2hex(g), check);
+     if (problems & DH_UNABLE_TO_CHECK_GENERATOR)
+ 	log(WvLog::Notice, "Using a strange argument for diffie-hellman.\n");
+     DH_generate_key(info);
+@@ -72,18 +73,23 @@ WvDiffieHellman::WvDiffieHellman(const unsigned char *_key, int _keylen,
+ 
+ int WvDiffieHellman::pub_key_len()
+ {
+-    return BN_num_bytes(info->pub_key);
++    const BIGNUM *pub_key = NULL;
++	DH_get0_key(info, &pub_key, NULL);
++    return BN_num_bytes(pub_key);
+ }
+ 
+ int WvDiffieHellman::get_public_value(WvBuf &outbuf, int len)
+ {
+-    int key_len = BN_num_bytes(info->pub_key);
++	const BIGNUM *pub_key = NULL;
++	DH_get0_key(info, &pub_key, NULL);
++
++    int key_len = BN_num_bytes(pub_key);
+     if (key_len < len)
+ 	len = key_len;
+ 
+     // alloca is stack allocated, don't free it.
+     unsigned char *foo = (unsigned char*)alloca(key_len);
+-    BN_bn2bin(info->pub_key, foo);
++    BN_bn2bin(pub_key, foo);
+     outbuf.put(foo, len);
+ 
+     return len;
+@@ -91,8 +97,10 @@ int WvDiffieHellman::get_public_value(WvBuf &outbuf, int len)
+ 
+ bool WvDiffieHellman::create_secret(WvBuf &inbuf, size_t in_len, WvBuf& outbuf)
+ {
++   const BIGNUM *pub_key = NULL;
++   DH_get0_key(info, &pub_key, NULL);
+     unsigned char *foo = (unsigned char *)alloca(DH_size(info));
+-   log("My public value\n%s\nYour public value\n%s\n",BN_bn2hex(info->pub_key),
++   log("My public value\n%s\nYour public value\n%s\n",BN_bn2hex(pub_key),
+        hexdump_buffer(inbuf.peek(0, in_len), in_len, false));
+     int len = DH_compute_key (foo, BN_bin2bn(inbuf.get(in_len), in_len, NULL), 
+ 			      info);
+diff --git a/crypto/wvdigest.cc b/crypto/wvdigest.cc
+index 150edee..73ebb5d 100644
+--- a/crypto/wvdigest.cc
++++ b/crypto/wvdigest.cc
+@@ -13,10 +13,10 @@
+ 
+ /***** WvEVPMDDigest *****/
+ 
+-WvEVPMDDigest::WvEVPMDDigest(const env_md_st *_evpmd) :
++WvEVPMDDigest::WvEVPMDDigest(const EVP_MD*_evpmd) :
+     evpmd(_evpmd), active(false)
+ {
+-    evpctx = new EVP_MD_CTX;
++    evpctx = EVP_MD_CTX_new();
+     _reset();
+ }
+ 
+@@ -24,7 +24,7 @@ WvEVPMDDigest::WvEVPMDDigest(const env_md_st *_evpmd) :
+ WvEVPMDDigest::~WvEVPMDDigest()
+ {
+     cleanup();
+-    delete evpctx;
++    EVP_MD_CTX_free(evpctx);
+ }
+ 
+ 
+@@ -60,7 +60,7 @@ bool WvEVPMDDigest::_reset()
+     // the typecast is necessary for API compatibility with different
+     // versions of openssl.  None of them *actually* change the contents of
+     // the pointer.
+-    EVP_DigestInit(evpctx, (env_md_st *)evpmd);
++    EVP_DigestInit(evpctx, evpmd);
+     active = true;
+     return true;
+ }
+@@ -79,7 +79,7 @@ void WvEVPMDDigest::cleanup()
+ 
+ size_t WvEVPMDDigest::digestsize() const
+ {
+-    return EVP_MD_size((env_md_st *)evpmd);
++    return EVP_MD_size(evpmd);
+ }
+ 
+ 
+@@ -104,14 +104,14 @@ WvHMACDigest::WvHMACDigest(WvEVPMDDigest *_digest,
+ {
+     key = new unsigned char[keysize];
+     memcpy(key, _key, keysize);
+-    hmacctx = new HMAC_CTX;
++    hmacctx = HMAC_CTX_new();
+     _reset();
+ }
+ 
+ WvHMACDigest::~WvHMACDigest()
+ {
+     cleanup();
+-    delete hmacctx;
++    HMAC_CTX_free(hmacctx);
+     deletev key;
+     delete digest;
+ }
+@@ -145,7 +145,7 @@ bool WvHMACDigest::_finish(WvBuf &outbuf)
+ bool WvHMACDigest::_reset()
+ {
+     cleanup();
+-    HMAC_Init(hmacctx, key, keysize, (env_md_st *)digest->getevpmd());
++    HMAC_Init(hmacctx, key, keysize, digest->getevpmd());
+     active = true;
+     return true;
+ }
+diff --git a/crypto/wvocsp.cc b/crypto/wvocsp.cc
+index ddb2de4..7d5da07 100644
+--- a/crypto/wvocsp.cc
++++ b/crypto/wvocsp.cc
+@@ -118,9 +118,10 @@ bool WvOCSPResp::check_nonce(const WvOCSPReq &req) const
+ 
+ bool WvOCSPResp::signedbycert(const WvX509 &cert) const
+ {
+-    EVP_PKEY *skey = X509_get_pubkey(cert.cert);
+-    int i = OCSP_BASICRESP_verify(bs, skey, 0);
+-    EVP_PKEY_free(skey);
++    STACK_OF(X509) *sk = sk_X509_new_null();
++    sk_X509_push(sk, cert.cert);
++    int i = OCSP_basic_verify(bs, sk, NULL, OCSP_NOVERIFY);
++    sk_X509_free(sk);
+ 
+     if(i > 0)
+         return true;
+@@ -131,33 +132,15 @@ bool WvOCSPResp::signedbycert(const WvX509 &cert) const
+ 
+ WvX509 WvOCSPResp::get_signing_cert() const
+ {
+-    if (!bs || !sk_X509_num(bs->certs))
++    const STACK_OF(X509) *certs = OCSP_resp_get0_certs(bs);
++    if (!bs || !sk_X509_num(certs))
+         return WvX509();
+ 
+-    // note: the following bit of code is taken almost verbatim from
+-    // ocsp_vfy.c in OpenSSL 0.9.8. Copyright and attribution should 
+-    // properly belong to them
+-
+-    OCSP_RESPID *id = bs->tbsResponseData->responderId;
+-
+-    if (id->type == V_OCSP_RESPID_NAME)
+-    {
+-        X509 *x = X509_find_by_subject(bs->certs, id->value.byName);
+-        if (x)
+-            return WvX509(X509_dup(x));
++    X509 *signer = NULL;
++    if (OCSP_resp_get0_signer(bs, &signer, NULL) == 1) {
++        return WvX509(X509_dup(signer));
+     }
+ 
+-    if (id->value.byKey->length != SHA_DIGEST_LENGTH) return NULL;
+-    unsigned char tmphash[SHA_DIGEST_LENGTH];
+-    unsigned char *keyhash = id->value.byKey->data;
+-    for (int i = 0; i < sk_X509_num(bs->certs); i++)
+-    {
+-        X509 *x = sk_X509_value(bs->certs, i);
+-        X509_pubkey_digest(x, EVP_sha1(), tmphash, NULL);
+-        if(!memcmp(keyhash, tmphash, SHA_DIGEST_LENGTH))
+-            return WvX509(X509_dup(x));
+-    }
+-    
+     return WvX509();
+ }
+ 
+diff --git a/crypto/wvx509.cc b/crypto/wvx509.cc
+index e4925ce..984156c 100644
+--- a/crypto/wvx509.cc
++++ b/crypto/wvx509.cc
+@@ -974,7 +974,7 @@ static void add_aia(WvStringParm type, WvString identifier,
+     sk_ACCESS_DESCRIPTION_push(ainfo, acc);
+     acc->method = OBJ_txt2obj(type.cstr(), 0);
+     acc->location->type = GEN_URI;
+-    acc->location->d.ia5 = M_ASN1_IA5STRING_new();
++    acc->location->d.ia5 = ASN1_IA5STRING_new();
+     unsigned char *cident 
+ 	= reinterpret_cast<unsigned char *>(identifier.edit());
+     ASN1_STRING_set(acc->location->d.ia5, cident, identifier.len());
+@@ -1059,7 +1059,7 @@ void WvX509::set_crl_urls(WvStringList &urls)
+         GENERAL_NAMES *uris = GENERAL_NAMES_new();
+         GENERAL_NAME *uri = GENERAL_NAME_new();
+         uri->type = GEN_URI;
+-        uri->d.ia5 = M_ASN1_IA5STRING_new();
++        uri->d.ia5 = ASN1_IA5STRING_new();
+         unsigned char *cident
+ 	    = reinterpret_cast<unsigned char *>(i().edit());    
+         ASN1_STRING_set(uri->d.ia5, cident, i().len());
+@@ -1162,10 +1162,11 @@ WvString WvX509::get_extension(int nid) const
+ #else
+             X509V3_EXT_METHOD *method = X509V3_EXT_get(ext);
+ #endif
++            ASN1_OCTET_STRING *ext_data_str = X509_EXTENSION_get_data(ext);
+             if (!method)
+             {
+                 WvDynBuf buf;
+-                buf.put(ext->value->data, ext->value->length);
++                buf.put(ext_data_str->data, ext_data_str->length);
+                 retval = buf.getstr();
+             }
+             else
+@@ -1176,21 +1177,21 @@ WvString WvX509::get_extension(int nid) const
+                 // even though it's const (at least as of version 0.9.8e). 
+                 // gah.
+ #if OPENSSL_VERSION_NUMBER >= 0x0090800fL
+-                const unsigned char * ext_value_data = ext->value->data;
++                const unsigned char * ext_value_data = ext_data_str->data;
+ #else
+                 unsigned char *ext_value_data = ext->value->data;
+ #endif
+                 if (method->it)
+                 {
+                     ext_data = ASN1_item_d2i(NULL, &ext_value_data,
+-                                             ext->value->length, 
++                                             ext_data_str->length, 
+                                              ASN1_ITEM_ptr(method->it));
+                     TRACE("Applied generic conversion!\n");
+                 }
+                 else
+                 {
+                     ext_data = method->d2i(NULL, &ext_value_data,
+-                                           ext->value->length);
++                                           ext_data_str->length);
+                     TRACE("Applied method specific conversion!\n");
+                 }
+                 
+@@ -1325,13 +1326,13 @@ bool WvX509::verify(WvBuf &original, WvStringParm signature) const
+         return false;
+     
+     /* Verify the signature */
+-    EVP_MD_CTX sig_ctx;
+-    EVP_VerifyInit(&sig_ctx, EVP_sha1());
+-    EVP_VerifyUpdate(&sig_ctx, original.peek(0, original.used()),
++    EVP_MD_CTX *sig_ctx = EVP_MD_CTX_new();
++    EVP_VerifyInit(sig_ctx, EVP_sha1());
++    EVP_VerifyUpdate(sig_ctx, original.peek(0, original.used()),
+ 		     original.used());
+-    int sig_err = EVP_VerifyFinal(&sig_ctx, sig_buf, sig_size, pk);
++    int sig_err = EVP_VerifyFinal(sig_ctx, sig_buf, sig_size, pk);
+     EVP_PKEY_free(pk);
+-    EVP_MD_CTX_cleanup(&sig_ctx); // Again, not my fault... 
++    EVP_MD_CTX_free(sig_ctx); // Again, not my fault... 
+     if (sig_err != 1) 
+     {
+         debug("Verify failed!\n");
+@@ -1450,19 +1451,19 @@ void WvX509::set_ski()
+ {
+     CHECK_CERT_EXISTS_SET("ski");
+ 
+-    ASN1_OCTET_STRING *oct = M_ASN1_OCTET_STRING_new();
+-    ASN1_BIT_STRING *pk = cert->cert_info->key->public_key;
++    ASN1_OCTET_STRING *oct = ASN1_OCTET_STRING_new();
++    ASN1_BIT_STRING *pk = X509_get0_pubkey_bitstr(cert);
+     unsigned char pkey_dig[EVP_MAX_MD_SIZE];
+     unsigned int diglen;
+ 
+     EVP_Digest(pk->data, pk->length, pkey_dig, &diglen, EVP_sha1(), NULL);
+ 
+-    M_ASN1_OCTET_STRING_set(oct, pkey_dig, diglen);
++    ASN1_OCTET_STRING_set(oct, pkey_dig, diglen);
+     X509_EXTENSION *ext = X509V3_EXT_i2d(NID_subject_key_identifier, 0, 
+ 					oct);
+     X509_add_ext(cert, ext, -1);
+     X509_EXTENSION_free(ext);
+-    M_ASN1_OCTET_STRING_free(oct);
++    ASN1_OCTET_STRING_free(oct);
+ }
+ 
+ 
+diff --git a/crypto/wvx509mgr.cc b/crypto/wvx509mgr.cc
+index f249eec..156d3a4 100644
+--- a/crypto/wvx509mgr.cc
++++ b/crypto/wvx509mgr.cc
+@@ -350,6 +350,8 @@ bool WvX509Mgr::signcert(WvX509 &unsignedcert) const
+         return false;
+     }
+ 
++    uint32_t ex_flags = X509_get_extension_flags(cert);
++    uint32_t ex_kusage = X509_get_key_usage(cert);
+     if (cert == unsignedcert.cert)
+     {
+ 	debug("Self Signing!\n");
+@@ -362,8 +364,8 @@ bool WvX509Mgr::signcert(WvX509 &unsignedcert) const
+         return false;
+     }
+ #endif
+-    else if (!((cert->ex_flags & EXFLAG_KUSAGE) && 
+-               (cert->ex_kusage & KU_KEY_CERT_SIGN)))
++    else if (!((ex_flags & EXFLAG_KUSAGE) && 
++               (ex_kusage & KU_KEY_CERT_SIGN)))
+     {
+ 	debug("This Certificate is not allowed to sign certificates!\n");
+ 	return false;
+@@ -390,6 +392,8 @@ bool WvX509Mgr::signcert(WvX509 &unsignedcert) const
+ 
+ bool WvX509Mgr::signcrl(WvCRL &crl) const
+ {
++    uint32_t ex_flags = X509_get_extension_flags(cert);
++    uint32_t ex_kusage = X509_get_key_usage(cert);
+     if (!isok() || !crl.isok())
+     {
+         debug(WvLog::Warning, "Asked to sign CRL, but certificate or CRL (or "
+@@ -403,12 +407,12 @@ bool WvX509Mgr::signcrl(WvCRL &crl) const
+               "CRLs!\n");
+         return false;
+     }
+-    else if (!((cert->ex_flags & EXFLAG_KUSAGE) && 
+-	  (cert->ex_kusage & KU_CRL_SIGN)))
++    else if (!((ex_flags & EXFLAG_KUSAGE) && 
++	  (ex_kusage & KU_CRL_SIGN)))
+     {
+ 	debug("Certificate not allowed to sign CRLs! (%s %s)\n", 
+-              (cert->ex_flags & EXFLAG_KUSAGE),
+-	      (cert->ex_kusage & KU_CRL_SIGN));
++              (ex_flags & EXFLAG_KUSAGE),
++	      (ex_kusage & KU_CRL_SIGN));
+ 	return false;
+     }
+ #endif
+@@ -454,7 +458,6 @@ WvString WvX509Mgr::sign(WvBuf &data) const
+ {
+     assert(rsa);
+ 
+-    EVP_MD_CTX sig_ctx;
+     unsigned char sig_buf[4096];
+     
+     EVP_PKEY *pk = EVP_PKEY_new();
+@@ -467,20 +470,22 @@ WvString WvX509Mgr::sign(WvBuf &data) const
+ 	return WvString::null;
+     }
+     
+-    EVP_SignInit(&sig_ctx, EVP_sha1());
+-    EVP_SignUpdate(&sig_ctx, data.peek(0, data.used()), data.used());
++    EVP_MD_CTX *sig_ctx = EVP_MD_CTX_new();
++    EVP_SignInit(sig_ctx, EVP_sha1());
++    EVP_SignUpdate(sig_ctx, data.peek(0, data.used()), data.used());
+     unsigned int sig_len = sizeof(sig_buf);
+-    int sig_err = EVP_SignFinal(&sig_ctx, sig_buf, 
++    int sig_err = EVP_SignFinal(sig_ctx, sig_buf, 
+ 				&sig_len, pk);
+     if (sig_err != 1)
+     {
+ 	debug("Error while signing.\n");
+ 	EVP_PKEY_free(pk);
++	EVP_MD_CTX_free(sig_ctx);
+ 	return WvString::null;
+     }
+ 
+     EVP_PKEY_free(pk);
+-    EVP_MD_CTX_cleanup(&sig_ctx); // this isn't my fault ://
++    EVP_MD_CTX_free(sig_ctx); // this isn't my fault ://
+     WvDynBuf buf;
+     buf.put(sig_buf, sig_len);
+     debug("Signature size: %s\n", buf.used());
+diff --git a/include/wvdiffiehellman.h b/include/wvdiffiehellman.h
+index af75ffa..a2d001f 100644
+--- a/include/wvdiffiehellman.h
++++ b/include/wvdiffiehellman.h
+@@ -27,7 +27,7 @@ public:
+     bool create_secret(WvBuf &inbuf, size_t in_len, WvBuf& outbuf);
+ 
+ protected:
+-    struct dh_st *info;
++    DH *info;
+     BN_ULONG generator;
+ 
+ private:
+diff --git a/include/wvdigest.h b/include/wvdigest.h
+index fdc39bd..f2eed40 100644
+--- a/include/wvdigest.h
++++ b/include/wvdigest.h
+@@ -9,10 +9,8 @@
+ 
+ #include "wvencoder.h"
+ #include <stdint.h>
++#include <openssl/evp.h>
+ 
+-struct env_md_st;
+-struct env_md_ctx_st;
+-struct hmac_ctx_st;
+ 
+ /**
+  * Superclass for all message digests.
+@@ -45,8 +43,8 @@ public:
+ class WvEVPMDDigest : public WvDigest
+ {
+     friend class WvHMACDigest;
+-    const env_md_st *evpmd;
+-    env_md_ctx_st *evpctx;
++    const EVP_MD *evpmd;
++    EVP_MD_CTX *evpctx;
+     bool active;
+ 
+ public:
+@@ -54,13 +52,13 @@ public:
+     virtual size_t digestsize() const;
+ 
+ protected:
+-    WvEVPMDDigest(const env_md_st *_evpmd);
++    WvEVPMDDigest(const EVP_MD *_evpmd);
+     virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
+         bool flush); // consumes input
+     virtual bool _finish(WvBuf &outbuf); // outputs digest
+     virtual bool _reset(); // supported: resets digest value
+     
+-    const env_md_st *getevpmd()
++    const EVP_MD *getevpmd()
+         { return evpmd; }
+ 
+ private:
+@@ -104,7 +102,7 @@ class WvHMACDigest : public WvDigest
+     WvEVPMDDigest *digest;
+     unsigned char *key;
+     size_t keysize;
+-    hmac_ctx_st *hmacctx;
++    HMAC_CTX *hmacctx;
+     bool active;
+ 
+ public:
+diff --git a/include/wvtripledes.h b/include/wvtripledes.h
+index 185fe8a..a442e7a 100644
+--- a/include/wvtripledes.h
++++ b/include/wvtripledes.h
+@@ -70,11 +70,11 @@ protected:
+ 
+ private:
+     Mode mode;
+-    des_cblock key;
+-    des_key_schedule deskey1;
+-    des_key_schedule deskey2;
+-    des_key_schedule deskey3;
+-    des_cblock ivec; // initialization vector
++    DES_cblock key;
++    DES_key_schedule deskey1;
++    DES_key_schedule deskey2;
++    DES_key_schedule deskey3;
++    DES_cblock ivec; // initialization vector
+     int ivecoff; // current offset into initvec
+ };
+ 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/05_gcc.diff b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/05_gcc.diff
index 8e4fd03..616843d 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/05_gcc.diff
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/05_gcc.diff
@@ -1,16 +1,3 @@
-Index: wvstreams-4.6.1/crypto/wvx509.cc
-===================================================================
---- wvstreams-4.6.1.orig/crypto/wvx509.cc	2011-05-20 00:02:38.119136584 +0200
-+++ wvstreams-4.6.1/crypto/wvx509.cc	2011-05-20 00:02:26.035136589 +0200
-@@ -1157,7 +1157,7 @@
-         
-         if (ext)
-         {
--            X509V3_EXT_METHOD *method = X509V3_EXT_get(ext);
-+            X509V3_EXT_METHOD *method = (X509V3_EXT_METHOD *)X509V3_EXT_get(ext);
-             if (!method)
-             {
-                 WvDynBuf buf;
 Index: wvstreams-4.6.1/ipstreams/wvunixdgsocket.cc
 ===================================================================
 --- wvstreams-4.6.1.orig/ipstreams/wvunixdgsocket.cc	2011-05-20 00:02:38.391136584 +0200
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/openssl-buildfix.patch b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/openssl-buildfix.patch
new file mode 100644
index 0000000..1c7005c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams/openssl-buildfix.patch
@@ -0,0 +1,16 @@
+Index: wvstreams-4.6.1/crypto/wvx509.cc
+===================================================================
+--- wvstreams-4.6.1.orig/crypto/wvx509.cc
++++ wvstreams-4.6.1/crypto/wvx509.cc
+@@ -1157,7 +1157,11 @@ WvString WvX509::get_extension(int nid)
+         
+         if (ext)
+         {
++#if OPENSSL_VERSION_NUMBER >= 0x10000000L
++            const X509V3_EXT_METHOD *method = X509V3_EXT_get(ext);
++#else
+             X509V3_EXT_METHOD *method = X509V3_EXT_get(ext);
++#endif
+             if (!method)
+             {
+                 WvDynBuf buf;
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb
index e3d5e7d..b9f62da 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/wvdial/wvstreams_4.6.1.bb
@@ -21,6 +21,8 @@
            file://0005-check-for-libexecinfo-during-configure.patch \
            file://0001-build-fix-parallel-make.patch \
            file://0002-wvrules.mk-Use-_DEFAULT_SOURCE.patch \
+           file://openssl-buildfix.patch \
+           file://0001-Forward-port-to-OpenSSL-1.1.x.patch \
            "
 
 SRC_URI[md5sum] = "2760dac31a43d452a19a3147bfde571c"
@@ -34,23 +36,21 @@
 
 EXTRA_OECONF = " --without-tcl --without-qt --without-pam --without-valgrind"
 
-PACKAGES_prepend = "libuniconf libuniconf-dbg "
-PACKAGES_prepend = "uniconfd uniconfd-dbg "
-PACKAGES_prepend = "libwvstreams-base libwvstreams-base-dbg "
-PACKAGES_prepend = "libwvstreams-extras libwvstreams-extras-dbg "
+PACKAGES_prepend = "libuniconf "
+PACKAGES_prepend = "uniconfd "
+PACKAGES_prepend = "libwvstreams-base "
+PACKAGES_prepend = "libwvstreams-extras "
 PACKAGES_prepend = "${PN}-valgrind "
 
+RPROVIDES_${PN}-dbg += "libuniconf-dbg uniconfd-dbg libwvstreams-base-dbg libwvstreams-extras-dbg"
+
 FILES_libuniconf     = "${libdir}/libuniconf.so.*"
-FILES_libuniconf-dbg = "${libdir}/.debug/libuniconf.so.*"
 
 FILES_uniconfd     = "${sbindir}/uniconfd ${sysconfdir}/uniconf.conf ${localstatedir}/uniconf"
-FILES_uniconfd-dbg = "${sbindir}/.debug/uniconfd"
 
 FILES_libwvstreams-base     = "${libdir}/libwvutils.so.*"
-FILES_libwvstreams-base-dbg = "${libdir}/.debug/libwvutils.so.*"
 
 FILES_libwvstreams-extras     = "${libdir}/libwvbase.so.* ${libdir}/libwvstreams.so.*"
-FILES_libwvstreams-extras-dbg = "${libdir}/.debug/libwvbase.so.* ${libdir}/.debug/libwvstreams.so.*"
 
 FILES_${PN}-valgrind = "${libdir}/valgrind/wvstreams.supp"
 RDEPENDS_${PN} += "perl"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/cppzmq_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/cppzmq_git.bb
index 4920bce..9aff59c 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/cppzmq_git.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/cppzmq_git.bb
@@ -11,10 +11,7 @@
 
 S = "${WORKDIR}/git"
 
-do_install () {
-        install -d ${D}/usr/include
-        install -m 0755 ${S}/zmq.hpp ${D}/usr/include/
-}
+inherit cmake
 
 PACKAGES = "${PN}-dev"