meta-openembedded: subtree update:1e8bc46e55..6a5d6bc9ad

Aaltonen Eero (1):
      Recipe for docopt.cpp option parsing library

Aaron Chan (1):
      python3-pyatspi: Add Dbus ATSPI recipe

Adrian Bunk (11):
      xmlsec1: Import from meta-security
      libgit2: Upgrade 0.27.9 -> 0.28.3
      libenv-perl: Import from meta-security
      libgit2: Don't pass parameters with their default values to cmake
      Replace EXCLUDE_FROM_WORLD_libc-musl = "1" with COMPATIBLE_HOST_libc-musl = 'null'
      libwebsockets: Fix the build with -Os
      mimic: Fix the build with -Os
      Adapt to the lsb -> lsb-release change in OE-core
      meta-oe: Replace EXCLUDE_FROM_WORLD_libc-musl = "1" with COMPATIBLE_HOST_libc-musl = 'null'
      Remove LICENSE = "MIT" from packagegroups and images
      Remove bogus COMMON_LICENSE_DIR usage in LIC_FILES_CHKSUM

Andreas Müller (4):
      cmark: initial add 0.29.0
      libsigc++-2.0: upgrade 2.10.1 -> 2.10.2
      glibmm: upgrade 2.58.1 -> 2.60.0
      evolution-data-server: remove unused gconf dep and pythonnative dep

Anuj Mittal (2):
      pugixml: add recipe
      vlc: don't look at host headers for live555

Bruce Ashfield (1):
      dnsmasq: fix build against 5.2 headers

Callaghan, Dan (1):
      python3-pystemd: add new recipe

Changqing Li (3):
      xfsprogs: support usrmerge
      ntfs-3g-ntfsprogs: support usrmerge
      grubby: support usrmerge

Chris Laplante (1):
      breakpad: fix patch striplevel to avoid 'devtool modify breakpad' error

Christophe PRIOUZEAU (1):
      python-script: update license md5sum

Gianfranco Costamagna (2):
      libmodbus: update version to 3.1.6
      ifmetric: add initial recipe based on Debian packaging and patches

Hongxu Jia (4):
      libdevmapper/lvm2: force recipe libdevmapper to populate sysroot only
      multipath-tools: lvm2 to DEPENDS
      cryptsetup: add libdevmapper to RDEPENDS
      cryptsetup: add libdevmapper to RDEPENDS

Kai Kang (1):
      xfce4-datetime-setter: fix compile error and requires distro feature x11

Khem Raj (14):
      libgpiod: nherit python3native unconditionally
      kernel-selftest: Warn conditionally about clang-native dependency
      docopt.cpp: Drop using gitpkgv
      libnss-nisplus: Fix build with glibc >= 2.30
      bpftool.bb: Disable SECURITY_CFLAGS
      kernel-selftest: Explicitly disable stack protector
      ncmpc: Update to 0.34
      websocketpp_0.8.1.bb: Fix build with asio from boost 1.70+
      can-utils: Fix build with kernel headers >= 5.2
      android-tools: update license md5sum for BSD-2-Clause
      can-isotp: Update to latest tip
      linux-atm: Fix build with kernel headers 5.2+
      drbd: Upgrade to 9.0.19-1
      ssiapi: Upgrade to 1.3.0

Klauer, Daniel (1):
      sjf2410-linux-native: Fix do_deploy sstate caching

Oleksandr Kravchuk (1):
      nftables: update to 0.9.2

Piotr Tworek (18):
      libmxml: Use autotools bbclass and cleanup the recipe a bit.
      evolution-data-server: Update to version 3.32.4
      evolution-data-server: Drop x11 as required distro feature.
      evolution-data-server: Inherit upstream-version-is-even bbclass.
      evolution-data-server: Add dedicated packages for libebook-contacts.
      evolution-data-server: Specify SYSCONF_INSTALL_DIR in EXTRA_OECMAKE.
      evolution-data-server: Drop bits related to autotools
      evolution-data-server: Add PACKAGECONFIGs for oauth2 and kerberos.
      evolution-data-server: Drop ENABLE_UOA from EXTRA_OECMAKE.
      evolution-data-server: Drop glade file references.
      evolution-data-server: Fix package gobject-introspection support.
      evolution-data-server: Add PACKAGECONFIG for vala bindings.
      evolution-data-server: Turn goa support into PACKAGECONFIG feature.
      evolution-data-server: Add weather PACKAGECONFIG feature.
      evolution-data-server: Add PACKAGECONFIG entry for phonenumber.
      evolution-data-server: Use SRC_URI provided by gnomebase.
      evolution-data-server: Remove unused FILES paterns.
      evolution-data-server: Don't use explicit version number for libebook

Qi.Chen@windriver.com (1):
      libblockdev: fix PACKAGECONFIG regarding python

Robert Yang (1):
      netcf: Fix Manifest not found issue

Yi Zhao (1):
      samba: upgrade 4.10.6 -> 4.10.7

Yuan Chao (11):
      python-typing: upgrade 3.7.4 -> 3.7.4.1
      python-twisted: upgrade 19.2.1 -> 19.7.0
      python-jsonschema: upgrade 2.6.0 -> 3.0.2
      kpatch: upgrade 0.7.1 -> 0.8.0
      libtdb: upgrade 1.4.1 -> 1.4.2
      python-paste: upgrade 3.1.0 -> 3.1.1
      python-pip: upgrade 19.2.2 -> 19.2.3
      python-pytest: upgrade 3.4.2 -> 5.1.1
      python3-xxhash: upgrade 1.3.0 -> 1.4.1
      python-pluggy: upgrade 0.6.0 -> 0.12.0
      python-cmd2: upgrade 0.9.2 -> 0.9.16

Zang Ruochen (3):
      python-futures: upgrade 3.2.0 -> 3.3.0
      python-pyyaml: upgrade 3.13 -> 5.1.2
      python-alembic: upgrade 1.0.11 -> 1.1.0

Change-Id: I3b55c2efba09c26e31018ee2cbbc908f06630c7c
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meta-openembedded/meta-oe/recipes-extended/docopt.cpp/docopt.cpp/0001-Set-library-VERSION-and-SOVERSION.patch b/meta-openembedded/meta-oe/recipes-extended/docopt.cpp/docopt.cpp/0001-Set-library-VERSION-and-SOVERSION.patch
new file mode 100644
index 0000000..d4c7765
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/docopt.cpp/docopt.cpp/0001-Set-library-VERSION-and-SOVERSION.patch
@@ -0,0 +1,31 @@
+From a47ca75702318ff43446c70120f7aacde4ccee1b Mon Sep 17 00:00:00 2001
+From: Eero Aaltonen <eero.aaltonen@vaisala.com>
+Date: Thu, 20 Jun 2019 16:21:20 +0300
+Subject: [PATCH] Set library VERSION and SOVERSION
+
+With soversion and version specified, `install` target will install the
+library with the specified version and also create the proper symlink.
+
+Upstream-Status: Submitted [https://github.com/docopt/docopt.cpp/pull/112]
+but unlikely to be merged soon as it is a duplicate of
+[https://github.com/docopt/docopt.cpp/pull/112] which has been **Open**
+since 2016-12-08.
+---
+ CMakeLists.txt | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 23da468..feff32e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -50,6 +50,10 @@ else()
+     set_target_properties(docopt_o PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
+ 
+     add_library(docopt SHARED $<TARGET_OBJECTS:docopt_o>)
++	set_target_properties(docopt PROPERTIES
++		VERSION ${PROJECT_VERSION}
++		SOVERSION ${PROJECT_VERSION_MAJOR}
++		)
+     add_library(docopt_s STATIC $<TARGET_OBJECTS:docopt_o>)
+ endif()
+ 
diff --git a/meta-openembedded/meta-oe/recipes-extended/docopt.cpp/docopt.cpp_git.bb b/meta-openembedded/meta-oe/recipes-extended/docopt.cpp/docopt.cpp_git.bb
new file mode 100644
index 0000000..aa55ebf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/docopt.cpp/docopt.cpp_git.bb
@@ -0,0 +1,27 @@
+SUMMARY = "C++11 port of docopt command-line interface description language and parser"
+
+DESCRIPTION = "docopt is library that lets you define a command line interface with the \
+utility argument syntax that has been used by command line utilities for \
+decades (formalized in POSIX.1-2017). From the description, docopt \
+automatically generates a parser for the command line arguments."
+
+HOMEPAGE = "https://github.com/docopt/docopt.cpp"
+
+LICENSE = "MIT | BSL-1.0"
+LIC_FILES_CHKSUM = "\
+    file://LICENSE-Boost-1.0;md5=e4224ccaecb14d942c71d31bef20d78c \
+    file://LICENSE-MIT;md5=4b242fd9ef20207e18286d73da8a6677 \
+"
+
+DEPENDS = "boost"
+SRCREV = "3dd23e3280f213bacefdf5fcb04857bf52e90917"
+PV = "0.6.2+git${SRCPV}"
+
+SRC_URI = "\
+    git://github.com/docopt/docopt.cpp.git;protocol=https \
+    file://0001-Set-library-VERSION-and-SOVERSION.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.22.bb b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.22.bb
index c5fc928..985bd03 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.22.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_2.22.bb
@@ -8,7 +8,7 @@
 
 LIC_FILES_CHKSUM = "file://LICENSE;md5=c07cb499d259452f324bb90c3067d85c"
 
-inherit autotools python3native gobject-introspection
+inherit autotools gobject-introspection
 
 SRCREV = "f6e4538485d0442b3674e182c01ffe5a0f258ad4"
 SRC_URI = " \
@@ -17,11 +17,11 @@
 
 S = "${WORKDIR}/git"
 
-FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}"
+FILES_${PN} += "${libdir}/python2.7/dist-packages ${libdir}/python3.7/site-packages"
 
 PACKAGECONFIG ??= "python3 lvm dm kmod parted fs escrow btrfs crypto mdraid kbd mpath nvdimm"
 PACKAGECONFIG[python3] = "--with-python3, --without-python3,,python3"
-PACKAGECONFIG[python2] = "--with-python2, --without-python2,,python2"
+PACKAGECONFIG[python2] = "--with-python2, --without-python2,,python"
 PACKAGECONFIG[lvm] = "--with-lvm, --without-lvm, multipath-tools, lvm2"
 PACKAGECONFIG[lvm-dbus] = "--with-lvm_dbus, --without-lvm_dbus, multipath-tools, lvm2"
 PACKAGECONFIG[dm] = "--with-dm, --without-dm, multipath-tools, lvm2"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-float-endianness-issue-on-big-endian-arch.patch b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-float-endianness-issue-on-big-endian-arch.patch
new file mode 100644
index 0000000..5372a23
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-float-endianness-issue-on-big-endian-arch.patch
@@ -0,0 +1,314 @@
+From: =?utf-8?b?IlNaIExpbiAo5p6X5LiK5pm6KSI=?= <szlin@debian.org>
+Date: Wed, 19 Dec 2018 10:24:47 +0800
+Subject: Fix float endianness issue on big endian arch
+
+It converts float values depending on what order they come in.
+
+This patch was modified from rm5248 [1]
+
+[1] https://github.com/synexxus/libmodbus/commit/a511768e7fe7ec52d7bae1d9ae04e33f87a59627
+
+---
+ src/modbus-data.c        | 110 ++++++++++++++++++++++++++++++++++++++---------
+ tests/unit-test-client.c |  22 ++++++----
+ tests/unit-test.h.in     |  41 ++++++++++++++++--
+ 3 files changed, 141 insertions(+), 32 deletions(-)
+
+diff --git a/src/modbus-data.c b/src/modbus-data.c
+index 902b8c6..7a744fa 100644
+--- a/src/modbus-data.c
++++ b/src/modbus-data.c
+@@ -119,9 +119,18 @@ float modbus_get_float_abcd(const uint16_t *src)
+ {
+     float f;
+     uint32_t i;
++    uint8_t a, b, c, d;
+ 
+-    i = ntohl(((uint32_t)src[0] << 16) + src[1]);
+-    memcpy(&f, &i, sizeof(float));
++    a = (src[0] >> 8) & 0xFF;
++    b = (src[0] >> 0) & 0xFF;
++    c = (src[1] >> 8) & 0xFF;
++    d = (src[1] >> 0) & 0xFF;
++
++    i = (a << 24) |
++        (b << 16) |
++        (c << 8) |
++        (d << 0);
++    memcpy(&f, &i, 4);
+ 
+     return f;
+ }
+@@ -131,9 +140,18 @@ float modbus_get_float_dcba(const uint16_t *src)
+ {
+     float f;
+     uint32_t i;
++    uint8_t a, b, c, d;
+ 
+-    i = ntohl(bswap_32((((uint32_t)src[0]) << 16) + src[1]));
+-    memcpy(&f, &i, sizeof(float));
++    a = (src[0] >> 8) & 0xFF;
++    b = (src[0] >> 0) & 0xFF;
++    c = (src[1] >> 8) & 0xFF;
++    d = (src[1] >> 0) & 0xFF;
++
++    i = (d << 24) |
++        (c << 16) |
++        (b << 8) |
++        (a << 0);
++    memcpy(&f, &i, 4);
+ 
+     return f;
+ }
+@@ -143,9 +161,18 @@ float modbus_get_float_badc(const uint16_t *src)
+ {
+     float f;
+     uint32_t i;
++    uint8_t a, b, c, d;
+ 
+-    i = ntohl((uint32_t)(bswap_16(src[0]) << 16) + bswap_16(src[1]));
+-    memcpy(&f, &i, sizeof(float));
++    a = (src[0] >> 8) & 0xFF;
++    b = (src[0] >> 0) & 0xFF;
++    c = (src[1] >> 8) & 0xFF;
++    d = (src[1] >> 0) & 0xFF;
++
++    i = (b << 24) |
++        (a << 16) |
++        (d << 8) |
++        (c << 0);
++    memcpy(&f, &i, 4);
+ 
+     return f;
+ }
+@@ -155,9 +182,18 @@ float modbus_get_float_cdab(const uint16_t *src)
+ {
+     float f;
+     uint32_t i;
++    uint8_t a, b, c, d;
+ 
+-    i = ntohl((((uint32_t)src[1]) << 16) + src[0]);
+-    memcpy(&f, &i, sizeof(float));
++    a = (src[0] >> 8) & 0xFF;
++    b = (src[0] >> 0) & 0xFF;
++    c = (src[1] >> 8) & 0xFF;
++    d = (src[1] >> 0) & 0xFF;
++
++    i = (c << 24) |
++        (d << 16) |
++        (a << 8) |
++        (b << 0);
++    memcpy(&f, &i, 4);
+ 
+     return f;
+ }
+@@ -172,50 +208,84 @@ float modbus_get_float(const uint16_t *src)
+     memcpy(&f, &i, sizeof(float));
+ 
+     return f;
++
+ }
+ 
+ /* Set a float to 4 bytes for Modbus w/o any conversion (ABCD) */
+ void modbus_set_float_abcd(float f, uint16_t *dest)
+ {
+     uint32_t i;
++    uint8_t *out = (uint8_t*) dest;
++    uint8_t a, b, c, d;
+ 
+     memcpy(&i, &f, sizeof(uint32_t));
+-    i = htonl(i);
+-    dest[0] = (uint16_t)(i >> 16);
+-    dest[1] = (uint16_t)i;
++    a = (i >> 24) & 0xFF;
++    b = (i >> 16) & 0xFF;
++    c = (i >> 8) & 0xFF;
++    d = (i >> 0) & 0xFF;
++
++    out[0] = a;
++    out[1] = b;
++    out[2] = c;
++    out[3] = d;
+ }
+ 
+ /* Set a float to 4 bytes for Modbus with byte and word swap conversion (DCBA) */
+ void modbus_set_float_dcba(float f, uint16_t *dest)
+ {
+     uint32_t i;
++    uint8_t *out = (uint8_t*) dest;
++    uint8_t a, b, c, d;
+ 
+     memcpy(&i, &f, sizeof(uint32_t));
+-    i = bswap_32(htonl(i));
+-    dest[0] = (uint16_t)(i >> 16);
+-    dest[1] = (uint16_t)i;
++    a = (i >> 24) & 0xFF;
++    b = (i >> 16) & 0xFF;
++    c = (i >> 8) & 0xFF;
++    d = (i >> 0) & 0xFF;
++
++    out[0] = d;
++    out[1] = c;
++    out[2] = b;
++    out[3] = a;
++
+ }
+ 
+ /* Set a float to 4 bytes for Modbus with byte swap conversion (BADC) */
+ void modbus_set_float_badc(float f, uint16_t *dest)
+ {
+     uint32_t i;
++    uint8_t *out = (uint8_t*) dest;
++    uint8_t a, b, c, d;
+ 
+     memcpy(&i, &f, sizeof(uint32_t));
+-    i = htonl(i);
+-    dest[0] = (uint16_t)bswap_16(i >> 16);
+-    dest[1] = (uint16_t)bswap_16(i & 0xFFFF);
++    a = (i >> 24) & 0xFF;
++    b = (i >> 16) & 0xFF;
++    c = (i >> 8) & 0xFF;
++    d = (i >> 0) & 0xFF;
++
++    out[0] = b;
++    out[1] = a;
++    out[2] = d;
++    out[3] = c;
+ }
+ 
+ /* Set a float to 4 bytes for Modbus with word swap conversion (CDAB) */
+ void modbus_set_float_cdab(float f, uint16_t *dest)
+ {
+     uint32_t i;
++    uint8_t *out = (uint8_t*) dest;
++    uint8_t a, b, c, d;
+ 
+     memcpy(&i, &f, sizeof(uint32_t));
+-    i = htonl(i);
+-    dest[0] = (uint16_t)i;
+-    dest[1] = (uint16_t)(i >> 16);
++    a = (i >> 24) & 0xFF;
++    b = (i >> 16) & 0xFF;
++    c = (i >> 8) & 0xFF;
++    d = (i >> 0) & 0xFF;
++
++    out[0] = c;
++    out[1] = d;
++    out[2] = a;
++    out[3] = b;
+ }
+ 
+ /* DEPRECATED - Set a float to 4 bytes in a sort of Modbus format! */
+diff --git a/tests/unit-test-client.c b/tests/unit-test-client.c
+index 3e315f4..3fccf3e 100644
+--- a/tests/unit-test-client.c
++++ b/tests/unit-test-client.c
+@@ -27,6 +27,7 @@ int send_crafted_request(modbus_t *ctx, int function,
+                          uint16_t max_value, uint16_t bytes,
+                          int backend_length, int backend_offset);
+ int equal_dword(uint16_t *tab_reg, const uint32_t value);
++int is_memory_equal(const void *s1, const void *s2, size_t size);
+ 
+ #define BUG_REPORT(_cond, _format, _args ...) \
+     printf("\nLine %d: assertion error for '%s': " _format "\n", __LINE__, # _cond, ## _args)
+@@ -40,6 +41,11 @@ int equal_dword(uint16_t *tab_reg, const uint32_t value);
+     }                                             \
+ };
+ 
++int is_memory_equal(const void *s1, const void *s2, size_t size)
++{
++    return (memcmp(s1, s2, size) == 0);
++}
++
+ int equal_dword(uint16_t *tab_reg, const uint32_t value) {
+     return ((tab_reg[0] == (value >> 16)) && (tab_reg[1] == (value & 0xFFFF)));
+ }
+@@ -286,26 +292,26 @@ int main(int argc, char *argv[])
+     /** FLOAT **/
+     printf("1/4 Set/get float ABCD: ");
+     modbus_set_float_abcd(UT_REAL, tab_rp_registers);
+-    ASSERT_TRUE(equal_dword(tab_rp_registers, UT_IREAL_ABCD), "FAILED Set float ABCD");
+-    real = modbus_get_float_abcd(tab_rp_registers);
++    ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_ABCD_SET, 4), "FAILED Set float ABCD");
++    real = modbus_get_float_abcd(UT_IREAL_ABCD_GET);
+     ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL);
+ 
+     printf("2/4 Set/get float DCBA: ");
+     modbus_set_float_dcba(UT_REAL, tab_rp_registers);
+-    ASSERT_TRUE(equal_dword(tab_rp_registers, UT_IREAL_DCBA), "FAILED Set float DCBA");
+-    real = modbus_get_float_dcba(tab_rp_registers);
++    ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_DCBA_SET, 4), "FAILED Set float DCBA");
++    real = modbus_get_float_dcba(UT_IREAL_DCBA_GET);
+     ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL);
+ 
+     printf("3/4 Set/get float BADC: ");
+     modbus_set_float_badc(UT_REAL, tab_rp_registers);
+-    ASSERT_TRUE(equal_dword(tab_rp_registers, UT_IREAL_BADC), "FAILED Set float BADC");
+-    real = modbus_get_float_badc(tab_rp_registers);
++    ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_BADC_SET, 4), "FAILED Set float BADC");
++    real = modbus_get_float_badc(UT_IREAL_BADC_GET);
+     ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL);
+ 
+     printf("4/4 Set/get float CDAB: ");
+     modbus_set_float_cdab(UT_REAL, tab_rp_registers);
+-    ASSERT_TRUE(equal_dword(tab_rp_registers, UT_IREAL_CDAB), "FAILED Set float CDAB");
+-    real = modbus_get_float_cdab(tab_rp_registers);
++    ASSERT_TRUE(is_memory_equal(tab_rp_registers, UT_IREAL_CDAB_SET, 4), "FAILED Set float CDAB");
++    real = modbus_get_float_cdab(UT_IREAL_CDAB_GET);
+     ASSERT_TRUE(real == UT_REAL, "FAILED (%f != %f)\n", real, UT_REAL);
+ 
+     printf("\nAt this point, error messages doesn't mean the test has failed\n");
+diff --git a/tests/unit-test.h.in b/tests/unit-test.h.in
+index dca826f..4ffa254 100644
+--- a/tests/unit-test.h.in
++++ b/tests/unit-test.h.in
+@@ -56,12 +56,45 @@ const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x108;
+ const uint16_t UT_INPUT_REGISTERS_NB = 0x1;
+ const uint16_t UT_INPUT_REGISTERS_TAB[] = { 0x000A };
+ 
++/*
++ * This float value is 0x47F12000 (in big-endian format).
++ * In Little-endian(intel) format, it will be stored in memory as follows:
++ * 0x00 0x20 0xF1 0x47
++ *
++ * You can check this with the following code:
++
++   float fl = UT_REAL;
++   uint8_t *inmem = (uint8_t*)&fl;
++   int x;
++   for(x = 0; x < 4; x++){
++       printf("0x%02X ", inmem[ x ]);
++   }
++   printf("\n");
++ */
+ const float UT_REAL = 123456.00;
+ 
+-const uint32_t UT_IREAL_ABCD = 0x0020F147;
+-const uint32_t UT_IREAL_DCBA = 0x47F12000;
+-const uint32_t UT_IREAL_BADC = 0x200047F1;
+-const uint32_t UT_IREAL_CDAB = 0xF1470020;
++/*
++ * The following arrays assume that 'A' is the MSB,
++ * and 'D' is the LSB.
++ * Thus, the following is the case:
++ * A = 0x47
++ * B = 0xF1
++ * C = 0x20
++ * D = 0x00
++ *
++ * There are two sets of arrays: one to test that the setting is correct,
++ * the other to test that the getting is correct.
++ * Note that the 'get' values must be constants in processor-endianness,
++ * as libmodbus will convert all words to processor-endianness as they come in.
++ */
++const uint8_t UT_IREAL_ABCD_SET[] = {0x47, 0xF1, 0x20, 0x00};
++const uint16_t UT_IREAL_ABCD_GET[] = {0x47F1, 0x2000};
++const uint8_t UT_IREAL_DCBA_SET[] = {0x00, 0x20, 0xF1, 0x47};
++const uint16_t UT_IREAL_DCBA_GET[] = {0x0020, 0xF147};
++const uint8_t UT_IREAL_BADC_SET[] = {0xF1, 0x47, 0x00, 0x20};
++const uint16_t UT_IREAL_BADC_GET[] = {0xF147, 0x0020};
++const uint8_t UT_IREAL_CDAB_SET[] = {0x20, 0x00, 0x47, 0xF1};
++const uint16_t UT_IREAL_CDAB_GET[] = {0x2000, 0x47F1};
+ 
+ /* const uint32_t UT_IREAL_ABCD = 0x47F12000);
+ const uint32_t UT_IREAL_DCBA = 0x0020F147;
diff --git a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-typo.patch b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-typo.patch
new file mode 100644
index 0000000..384a4a4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/Fix-typo.patch
@@ -0,0 +1,52 @@
+From: =?utf-8?b?IlNaIExpbiAo5p6X5LiK5pm6KSI=?= <szlin@debian.org>
+Date: Thu, 27 Sep 2018 14:51:32 +0800
+Subject: Fix typo
+
+---
+ doc/modbus_mapping_new_start_address.txt | 4 ++--
+ doc/modbus_reply.txt                     | 2 +-
+ doc/modbus_reply_exception.txt           | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/doc/modbus_mapping_new_start_address.txt b/doc/modbus_mapping_new_start_address.txt
+index 4fa196a..94a81fb 100644
+--- a/doc/modbus_mapping_new_start_address.txt
++++ b/doc/modbus_mapping_new_start_address.txt
+@@ -21,9 +21,9 @@ The _modbus_mapping_new_start_address()_ function shall allocate four arrays to
+ store bits, input bits, registers and inputs registers. The pointers are stored
+ in modbus_mapping_t structure. All values of the arrays are initialized to zero.
+ 
+-The different starting adresses make it possible to place the mapping at any
++The different starting addresses make it possible to place the mapping at any
+ address in each address space. This way, you can give access to values stored
+-at high adresses without allocating memory from the address zero, for eg. to
++at high addresses without allocating memory from the address zero, for eg. to
+ make available registers from 10000 to 10009, you can use:
+ 
+ [source,c]
+diff --git a/doc/modbus_reply.txt b/doc/modbus_reply.txt
+index 0b29d6f..6b71d11 100644
+--- a/doc/modbus_reply.txt
++++ b/doc/modbus_reply.txt
+@@ -3,7 +3,7 @@ modbus_reply(3)
+ 
+ NAME
+ ----
+-modbus_reply - send a reponse to the received request
++modbus_reply - send a response to the received request
+ 
+ 
+ SYNOPSIS
+diff --git a/doc/modbus_reply_exception.txt b/doc/modbus_reply_exception.txt
+index 7e6324f..b2170be 100644
+--- a/doc/modbus_reply_exception.txt
++++ b/doc/modbus_reply_exception.txt
+@@ -3,7 +3,7 @@ modbus_reply_exception(3)
+ 
+ NAME
+ ----
+-modbus_reply_exception - send an exception reponse
++modbus_reply_exception - send an exception response
+ 
+ 
+ SYNOPSIS
diff --git a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/f1eb4bc7ccb09cd8d19ab641ee37637f8c34d16d.patch b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/f1eb4bc7ccb09cd8d19ab641ee37637f8c34d16d.patch
new file mode 100644
index 0000000..7fae34e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus/f1eb4bc7ccb09cd8d19ab641ee37637f8c34d16d.patch
@@ -0,0 +1,32 @@
+From f1eb4bc7ccb09cd8d19ab641ee37637f8c34d16d Mon Sep 17 00:00:00 2001
+From: i-ky <gl.ivanovsky@gmail.com>
+Date: Tue, 10 Jul 2018 15:58:45 +0300
+Subject: [PATCH] Fixed MODBUS_GET_* macros in case of negative values
+
+In case resulting value should be negative it is incorrect to use '+' operator to construct it from pieces, because highest bytes will result in negative number after bitwise shift while others will stay positive. Replacing addition with '|' should solve the issue.
+---
+ src/modbus.h | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/modbus.h b/src/modbus.h
+index f6e9a5f5..c63f5ceb 100644
+--- a/src/modbus.h
++++ b/src/modbus.h
+@@ -245,12 +245,12 @@ MODBUS_API int modbus_reply_exception(modbus_t *ctx, const uint8_t *req,
+ #define MODBUS_GET_HIGH_BYTE(data) (((data) >> 8) & 0xFF)
+ #define MODBUS_GET_LOW_BYTE(data) ((data) & 0xFF)
+ #define MODBUS_GET_INT64_FROM_INT16(tab_int16, index) \
+-    (((int64_t)tab_int16[(index)    ] << 48) + \
+-     ((int64_t)tab_int16[(index) + 1] << 32) + \
+-     ((int64_t)tab_int16[(index) + 2] << 16) + \
++    (((int64_t)tab_int16[(index)    ] << 48) | \
++     ((int64_t)tab_int16[(index) + 1] << 32) | \
++     ((int64_t)tab_int16[(index) + 2] << 16) | \
+       (int64_t)tab_int16[(index) + 3])
+-#define MODBUS_GET_INT32_FROM_INT16(tab_int16, index) ((tab_int16[(index)] << 16) + tab_int16[(index) + 1])
+-#define MODBUS_GET_INT16_FROM_INT8(tab_int8, index) ((tab_int8[(index)] << 8) + tab_int8[(index) + 1])
++#define MODBUS_GET_INT32_FROM_INT16(tab_int16, index) ((tab_int16[(index)] << 16) | tab_int16[(index) + 1])
++#define MODBUS_GET_INT16_FROM_INT8(tab_int8, index) ((tab_int8[(index)] << 8) | tab_int8[(index) + 1])
+ #define MODBUS_SET_INT16_TO_INT8(tab_int8, index, value) \
+     do { \
+         tab_int8[(index)] = (value) >> 8;  \
diff --git a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.4.bb b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.4.bb
deleted file mode 100644
index cc45fa7..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.4.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require libmodbus.inc
-
-SRC_URI[md5sum] = "b1a8fd3a40d2db4de51fb0cbcb201806"
-SRC_URI[sha256sum] = "c8c862b0e9a7ba699a49bc98f62bdffdfafd53a5716c0e162696b4bf108d3637"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.6.bb b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.6.bb
new file mode 100644
index 0000000..075487a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libmodbus/libmodbus_3.1.6.bb
@@ -0,0 +1,12 @@
+require libmodbus.inc
+
+SRC_URI += "file://f1eb4bc7ccb09cd8d19ab641ee37637f8c34d16d.patch \
+	    file://Fix-float-endianness-issue-on-big-endian-arch.patch \
+	    file://Fix-typo.patch"
+SRC_URI[md5sum] = "15c84c1f7fb49502b3efaaa668cfd25e"
+SRC_URI[sha256sum] = "d7d9fa94a16edb094e5fdf5d87ae17a0dc3f3e3d687fead81835d9572cf87c16"
+
+# this file has been created one minute after the configure file, so it doesn't get recreated during configure step
+do_configure_prepend() {
+	rm -rf ${S}/tests/unit-test.h
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/libnss-nisplus/libnss-nisplus.bb b/meta-openembedded/meta-oe/recipes-extended/libnss-nisplus/libnss-nisplus.bb
index 2dbeee7..3a0a87e 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libnss-nisplus/libnss-nisplus.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libnss-nisplus/libnss-nisplus.bb
@@ -18,6 +18,7 @@
 SRCREV = "c6934373c7bac91499ff7bbe7d2439599325ca63"
 
 SRC_URI = "git://github.com/thkukuk/libnss_nisplus \
+           file://0001-nisplus-hosts-Remove-use-of-RES_USE_INET6.patch \
           "
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libnss-nisplus/libnss-nisplus/0001-nisplus-hosts-Remove-use-of-RES_USE_INET6.patch b/meta-openembedded/meta-oe/recipes-extended/libnss-nisplus/libnss-nisplus/0001-nisplus-hosts-Remove-use-of-RES_USE_INET6.patch
new file mode 100644
index 0000000..cf380dd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libnss-nisplus/libnss-nisplus/0001-nisplus-hosts-Remove-use-of-RES_USE_INET6.patch
@@ -0,0 +1,245 @@
+From 184bda40e05053cd2df61c28bec0baa7353697bb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 28 Aug 2019 09:49:10 -0700
+Subject: [PATCH] nisplus-hosts: Remove use of RES_USE_INET6
+
+Upstream glibc dropped it starting glibc 2.30
+see
+https://sourceware.org/git/?p=glibc.git;a=commit;h=3f8b44be0a658266adff5ece1e4bc3ce097a5dbe
+
+Upstream-Status: Submitted [https://github.com/thkukuk/libnss_nisplus/pull/2]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/Makefile.am     |  3 +-
+ src/mapv4v6addr.h   | 69 ---------------------------------------------
+ src/nisplus-hosts.c | 58 ++++++++-----------------------------
+ 3 files changed, 13 insertions(+), 117 deletions(-)
+ delete mode 100644 src/mapv4v6addr.h
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index e879d5c..37ef86c 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -15,8 +15,7 @@ AM_CPPFLAGS = -I$(srcdir) @TIRPC_CFLAGS@ @LIBNSL_CFLAGS@
+ 
+ lib_LTLIBRARIES = libnss_nisplus.la
+ 
+-noinst_HEADERS = libc-lock.h nss-nisplus.h netgroup.h nisplus-parser.h \
+-		 mapv4v6addr.h
++noinst_HEADERS = libc-lock.h nss-nisplus.h netgroup.h nisplus-parser.h
+ check_PROGRAMS = nss_loader-test
+ nss_loader_test_LDADD = -ldl
+ 
+diff --git a/src/mapv4v6addr.h b/src/mapv4v6addr.h
+deleted file mode 100644
+index 7f85f7d..0000000
+--- a/src/mapv4v6addr.h
++++ /dev/null
+@@ -1,69 +0,0 @@
+-/*
+- * ++Copyright++ 1985, 1988, 1993
+- * -
+- * Copyright (c) 1985, 1988, 1993
+- *    The Regents of the University of California.  All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without
+- * modification, are permitted provided that the following conditions
+- * are met:
+- * 1. Redistributions of source code must retain the above copyright
+- *    notice, this list of conditions and the following disclaimer.
+- * 2. Redistributions in binary form must reproduce the above copyright
+- *    notice, this list of conditions and the following disclaimer in the
+- *    documentation and/or other materials provided with the distribution.
+- * 4. Neither the name of the University nor the names of its contributors
+- *    may be used to endorse or promote products derived from this software
+- *    without specific prior written permission.
+- *
+- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+- * -
+- * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+- *
+- * Permission to use, copy, modify, and distribute this software for any
+- * purpose with or without fee is hereby granted, provided that the above
+- * copyright notice and this permission notice appear in all copies, and that
+- * the name of Digital Equipment Corporation not be used in advertising or
+- * publicity pertaining to distribution of the document or software without
+- * specific, written prior permission.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+- * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+- * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+- * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+- * SOFTWARE.
+- * -
+- * --Copyright--
+- */
+-
+-#include <string.h>
+-#include <arpa/nameser.h>
+-
+-static void
+-map_v4v6_address (const char *src, char *dst)
+-{
+-  u_char *p = (u_char *) dst;
+-  int i;
+-
+-  /* Move the IPv4 part to the right position.  */
+-  memcpy (dst + 12, src, INADDRSZ);
+-
+-  /* Mark this ipv6 addr as a mapped ipv4. */
+-  for (i = 0; i < 10; i++)
+-    *p++ = 0x00;
+-  *p++ = 0xff;
+-  *p = 0xff;
+-}
+diff --git a/src/nisplus-hosts.c b/src/nisplus-hosts.c
+index cc00aa2..d37b209 100644
+--- a/src/nisplus-hosts.c
++++ b/src/nisplus-hosts.c
+@@ -42,14 +42,9 @@ static u_long tablename_len;
+ #define NISENTRYLEN(idx, col, res) \
+ 	(NIS_RES_OBJECT (res)[idx].EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len)
+ 
+-/* Get implementation for some internal functions. */
+-#include "mapv4v6addr.h"
+-
+-
+ static int
+ _nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host,
+-			    char *buffer, size_t buflen, int *errnop,
+-			    int flags)
++			    char *buffer, size_t buflen, int *errnop)
+ {
+   unsigned int i;
+   char *first_unused = buffer;
+@@ -66,8 +61,7 @@ _nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host,
+ 
+   char *data = first_unused;
+ 
+-  if (room_left < (af != AF_INET || (flags & AI_V4MAPPED) != 0
+-		   ? IN6ADDRSZ : INADDRSZ))
++  if (room_left < INADDRSZ)
+     {
+     no_more_room:
+       *errnop = ERANGE;
+@@ -78,18 +72,8 @@ _nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host,
+   if (af != AF_INET6
+       && inet_pton (AF_INET, NISENTRYVAL (0, 2, result), data) > 0)
+     {
+-      assert ((flags & AI_V4MAPPED) == 0 || af != AF_UNSPEC);
+-      if (flags & AI_V4MAPPED)
+-	{
+-	  map_v4v6_address (data, data);
+-	  host->h_addrtype = AF_INET6;
+-	  host->h_length = IN6ADDRSZ;
+-	}
+-      else
+-	{
+-	  host->h_addrtype = AF_INET;
+-	  host->h_length = INADDRSZ;
+-	}
++      host->h_addrtype = AF_INET;
++      host->h_length = INADDRSZ;
+     }
+   else if (af != AF_INET
+ 	   && inet_pton (AF_INET6, NISENTRYVAL (0, 2, result), data) > 0)
+@@ -319,12 +303,8 @@ internal_nisplus_gethostent_r (struct hostent *host, char *buffer,
+ 	    }
+ 	}
+ 
+-      if (_res.options & RES_USE_INET6)
+-	parse_res = _nss_nisplus_parse_hostent (result, AF_INET6, host, buffer,
+-						buflen, errnop, AI_V4MAPPED);
+-      else
+-	parse_res = _nss_nisplus_parse_hostent (result, AF_INET, host, buffer,
+-						buflen, errnop, 0);
++      parse_res = _nss_nisplus_parse_hostent (result, AF_INET, host, buffer,
++						buflen, errnop);
+ 
+       if (parse_res == -1)
+ 	{
+@@ -379,7 +359,7 @@ get_tablename (int *herrnop)
+ static enum nss_status
+ internal_gethostbyname2_r (const char *name, int af, struct hostent *host,
+ 			   char *buffer, size_t buflen, int *errnop,
+-			   int *herrnop, int flags)
++			   int *herrnop)
+ {
+   if (tablename_val == NULL)
+     {
+@@ -454,7 +434,7 @@ internal_gethostbyname2_r (const char *name, int af, struct hostent *host,
+     }
+ 
+   int parse_res = _nss_nisplus_parse_hostent (result, af, host, buffer,
+-					      buflen, errnop, flags);
++					      buflen, errnop);
+ 
+   nis_freeresult (result);
+ 
+@@ -485,8 +465,7 @@ _nss_nisplus_gethostbyname2_r (const char *name, int af, struct hostent *host,
+     }
+ 
+   return internal_gethostbyname2_r (name, af, host, buffer, buflen, errnop,
+-				    herrnop,
+-			 ((_res.options & RES_USE_INET6) ? AI_V4MAPPED : 0));
++				    herrnop);
+ }
+ 
+ 
+@@ -495,19 +474,8 @@ _nss_nisplus_gethostbyname_r (const char *name, struct hostent *host,
+ 			      char *buffer, size_t buflen, int *errnop,
+ 			      int *h_errnop)
+ {
+-  if (_res.options & RES_USE_INET6)
+-    {
+-      enum nss_status status;
+-
+-      status = internal_gethostbyname2_r (name, AF_INET6, host, buffer,
+-					  buflen, errnop, h_errnop,
+-					  AI_V4MAPPED);
+-      if (status == NSS_STATUS_SUCCESS)
+-	return status;
+-    }
+-
+   return internal_gethostbyname2_r (name, AF_INET, host, buffer,
+-				   buflen, errnop, h_errnop, 0);
++				   buflen, errnop, h_errnop);
+ }
+ 
+ 
+@@ -555,9 +523,7 @@ _nss_nisplus_gethostbyaddr_r (const void *addr, socklen_t addrlen, int af,
+     }
+ 
+   parse_res = _nss_nisplus_parse_hostent (result, af, host,
+-					  buffer, buflen, errnop,
+-					  ((_res.options & RES_USE_INET6)
+-					   ? AI_V4MAPPED : 0));
++					  buffer, buflen, errnop);
+   nis_freeresult (result);
+ 
+   if (parse_res > 0)
+@@ -584,7 +550,7 @@ _nss_nisplus_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
+ 
+   enum nss_status status = internal_gethostbyname2_r (name, AF_UNSPEC, &host,
+ 						      buffer, buflen,
+-						      errnop, herrnop, 0);
++						      errnop, herrnop);
+   if (status == NSS_STATUS_SUCCESS)
+     {
+       if (*pat == NULL)
+-- 
+2.23.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-isotp_git.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-isotp_git.bb
index 6ce3cab..5df44f2 100644
--- a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-isotp_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-isotp_git.bb
@@ -1,6 +1,6 @@
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=72d977d697c3c05830fdff00a7448931"
-SRCREV = "6003f9997587e6a563cebf1f246bcd0eb6deff3d"
+SRCREV = "b31bce98d65f894aad6427bcf6f3f7822e261a59"
 PV = "1.0+git${SRCPV}"
 
 SRC_URI = "git://github.com/hartkopp/can-isotp.git;protocol=https"
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils/0001-fix-include-to-find-SIOCGSTAMP-with-latest-kernel.patch b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils/0001-fix-include-to-find-SIOCGSTAMP-with-latest-kernel.patch
new file mode 100644
index 0000000..cbf3aee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils/0001-fix-include-to-find-SIOCGSTAMP-with-latest-kernel.patch
@@ -0,0 +1,106 @@
+From 20981c8a328747f823b7eef68d0c2812b3eaed30 Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Date: Sun, 14 Jul 2019 21:50:43 +0200
+Subject: [PATCH] fix include to find SIOCGSTAMP with latest kernel
+
+In linux kernel commit 0768e17073dc527ccd18ed5f96ce85f9985e9115
+the asm-generic/sockios.h header no longer defines SIOCGSTAMP.
+Instead it provides only SIOCGSTAMP_OLD.
+
+The linux/sockios.h header now defines SIOCGSTAMP using either
+SIOCGSTAMP_OLD or SIOCGSTAMP_NEW as appropriate. This linux only
+header file is not pulled so we get a build failure.
+
+canlogserver.c: In function 'main':
+canlogserver.c:404:21: error: 'SIOCGSTAMP' undeclared (first use in this function); did you mean 'SIOCGRARP'?
+     if (ioctl(s[i], SIOCGSTAMP, &tv) < 0)
+                     ^~~~~~~~~~
+                     SIOCGRARP
+canlogserver.c:404:21: note: each undeclared identifier is reported only once for each function it appears in
+
+Fixes:
+ - http://autobuild.buildroot.org/results/363de7d9bf433be8bc47ba4ee52ae0bb80fa9021
+
+Upstream-Status: Backport [https://github.com/linux-can/can-utils/commit/e9590b1ca75d360eaf3211bebd86058214d48064]
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ canlogserver.c | 1 +
+ cansniffer.c   | 1 +
+ isotpdump.c    | 1 +
+ isotpperf.c    | 1 +
+ isotpsniffer.c | 1 +
+ slcanpty.c     | 1 +
+ 6 files changed, 6 insertions(+)
+
+diff --git a/canlogserver.c b/canlogserver.c
+index e3350b7..f53165c 100644
+--- a/canlogserver.c
++++ b/canlogserver.c
+@@ -61,6 +61,7 @@
+ 
+ #include <linux/can.h>
+ #include <linux/can/raw.h>
++#include <linux/sockios.h>
+ #include <signal.h>
+ #include <errno.h>
+ 
+diff --git a/cansniffer.c b/cansniffer.c
+index 7b0a3fa..bf7d72e 100644
+--- a/cansniffer.c
++++ b/cansniffer.c
+@@ -61,6 +61,7 @@
+ 
+ #include <linux/can.h>
+ #include <linux/can/bcm.h>
++#include <linux/sockios.h>
+ 
+ #include "terminal.h"
+ 
+diff --git a/isotpdump.c b/isotpdump.c
+index b2b650a..36d8af3 100644
+--- a/isotpdump.c
++++ b/isotpdump.c
+@@ -55,6 +55,7 @@
+ 
+ #include <linux/can.h>
+ #include <linux/can/raw.h>
++#include <linux/sockios.h>
+ #include "terminal.h"
+ 
+ #define NO_CAN_ID 0xFFFFFFFFU
+diff --git a/isotpperf.c b/isotpperf.c
+index db3a2b7..5852a57 100644
+--- a/isotpperf.c
++++ b/isotpperf.c
+@@ -56,6 +56,7 @@
+ 
+ #include <linux/can.h>
+ #include <linux/can/raw.h>
++#include <linux/sockios.h>
+ 
+ #define NO_CAN_ID 0xFFFFFFFFU
+ #define PERCENTRES 2 /* resolution in percent for bargraph */
+diff --git a/isotpsniffer.c b/isotpsniffer.c
+index f42e18b..d7a4c66 100644
+--- a/isotpsniffer.c
++++ b/isotpsniffer.c
+@@ -55,6 +55,7 @@
+ 
+ #include <linux/can.h>
+ #include <linux/can/isotp.h>
++#include <linux/sockios.h>
+ #include "terminal.h"
+ 
+ #define NO_CAN_ID 0xFFFFFFFFU
+diff --git a/slcanpty.c b/slcanpty.c
+index 431ca68..7dfaf5c 100644
+--- a/slcanpty.c
++++ b/slcanpty.c
+@@ -40,6 +40,7 @@
+ 
+ #include <linux/can.h>
+ #include <linux/can/raw.h>
++#include <linux/sockios.h>
+ 
+ /* maximum rx buffer len: extended CAN frame with timestamp */
+ #define SLC_MTU (sizeof("T1111222281122334455667788EA5F\r")+1)
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
index a2d62c3..db5055f 100644
--- a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
@@ -5,7 +5,9 @@
 
 DEPENDS = "libsocketcan"
 
-SRC_URI = "git://github.com/linux-can/${BPN}.git;protocol=git;branch=master"
+SRC_URI = "git://github.com/linux-can/${BPN}.git;protocol=git;branch=master \
+           file://0001-fix-include-to-find-SIOCGSTAMP-with-latest-kernel.patch \
+           "
 SRCREV = "4c8fb05cb4d6ddcd67299008db54af423f86fd05"
 
 PV = "0.0+gitr${SRCPV}"